Docker容器化 | 超简单部署 FireCrawl
灵感来源
- 【RAG实战】Docker容器化 🔥 FireCrawl | 基于docker-compose.yaml一键运行的网页解析API
- 参考仓库地址
建议给大佬点点star,这么简单的教程非常实用
测试环境
- ubuntu 24.04
可能要安装的依赖
sudo apt install docker-buildx
拉取FireCrawl官方仓库
git clone https://github.com/mendableai/firecrawl.git
需要新增的dockerfile文件
路径: 根目录/apps/api/server.Dockerfile
# server.Dockerfile
FROM node:lts AS base
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
LABEL fly_launch_runtime="Node.js"
RUN corepack enable
COPY . /app
WORKDIR /app
FROM base AS prod-deps
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod --frozen-lockfile
FROM base AS build
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
RUN pnpm install
RUN pnpm run build:nosentry
FROM base
RUN apt-get update -qq && \
apt-get install --no-install-recommends -y chromium chromium-sandbox && \
rm -rf /var/lib/apt/lists /var/cache/apt/archives
COPY --from=prod-deps /app/node_modules /app/node_modules
COPY --from=build /app /app
# Start the server by default, this can be overwritten at runtime
EXPOSE 3002
ENV PUPPETEER_EXECUTABLE_PATH="/usr/bin/chromium"
CMD [ "pnpm", "run", "start:production" ]
路径: 根目录/apps/api/worker.Dockerfile
# worker.Dockerfile
FROM node:lts AS base
# 添加 corepack_npm_registry 环境变量,你可以根据需要修改其值
ENV COREPACK_NPM_REGISTRY=https://registry.npmmirror.com
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
LABEL fly_launch_runtime="Node.js"
RUN corepack enable
COPY . /app
WORKDIR /app
FROM base AS prod-deps
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod --frozen-lockfile
FROM base AS build
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
RUN pnpm install
RUN pnpm run build:nosentry
FROM base
RUN apt-get update -qq && \
apt-get install --no-install-recommends -y chromium chromium-sandbox && \
rm -rf /var/lib/apt/lists /var/cache/apt/archives
COPY --from=prod-deps /app/node_modules /app/node_modules
COPY --from=build /app /app
EXPOSE 8080
ENV PUPPETEER_EXECUTABLE_PATH="/usr/bin/chromium"
CMD [ "pnpm", "run", "worker:production" ]
执行docker镜像构建
构建: plb/firecrawl-worker:local
先切换到路径: 根目录/apps/api/ ,然后执行:
# docker buildx build -f worker.Dockerfile -t {你自定义的Worker镜像}:{标签名}
# 我这边设置镜像名: plb/firecrawl-worker:local
sudo docker buildx build -f worker.Dockerfile -t plb/firecrawl-worker:local .
然后就能构建出一个名字 plb/firecrawl-worker:local 的镜像,接下来构建 plb/firecrawl-server:local 镜像。
构建: plb/firecrawl-server:local
# docker buildx build -f server.Dockerfile -t {你自定义的Worker镜像}:{标签名}
# 我这边设置镜像名: plb/firecrawl-server:local
sudo docker buildx build -f server.Dockerfile -t plb/firecrawl-server:local .
创建docker-compose.ymal文件
这个文件是用来同时启动上面两个镜像的,记得替换关键镜像名字
路径: 根目录/apps/api/docker-compose.yaml
# docker-compose.yaml
version: '3.1'
services:
redis:
image: redis:latest
restart: always
volumes:
- redis_data:/data
worker:
environment:
- REDIS_URL=redis://redis:6379
- USE_DB_AUTHENTICATION=false
image: plb/firecrawl-worker:local
pull_policy: always
restart: always
server:
environment:
- REDIS_URL=redis://redis:6379
- USE_DB_AUTHENTICATION=false
- HOST=0.0.0.0
image: plb/firecrawl-server:local
pull_policy: always
ports:
- "3002:3002"
restart: always
volumes:
redis_data:
开始运行已经构建好的docker镜像
切换到路径: 根目录/apps/api/
docker compose up
测试是否成功
curl -X GET http://localhost:3002/test
如果有返回值,那么就是部署成功了。