Docker一键部署启动PaiFlow Agent实战项目(派派工作流AI企业级工作流编排)
之前做派聪明 RAG 项目的时候,有球友反馈一上来就被 Kafka、ElasticSearch 的前置环境卡死了,所以后来我们提供了 Docker 部署版本——甭管那些细节,闭着眼启动 Docker,然后启动项目了,前置条件一个不用操心。
很多同学表示友好友好,实在太友好了。
到派派工作流这个项目,虽然前置环境需要的不多,只需要 MySQL、Redis 和 MinIO,但我们打算继续保持优良的传统,给大家提供 Docker 的一键启动版本。
一、二哥构建
为了让大家对整个过程有个清晰的认知,我画了一张图来解释 Docker 是怎么把代码变成可运行的服务的。
姑且叫它“多阶段构建”吧。你可以把它想象成“厨房”和“餐厅”的关系:我们在一个装满工具的“厨房容器”里把代码做成“菜”(编译成 Jar 包或静态文件),然后把“菜”端到一个干净清爽的“餐厅容器”里运行。
这样做出来的镜像体积小,运行效率也高。
理解了原理后,大家需要做的就是进入到 docker/PaiFlow 文件夹下,执行 docker-compose up -d --build命令就可以了。
等它构建完事就好了。
也许你对 Dockerfile 里的内容感到好奇,我们把三个核心服务的构建过程拆解开来看看。
01、后端构建 (Dockerfile.backend)
这是 hub Java 后端服务的构建过程。
# 1. 定义“厨房”:使用 Maven 和 JDK 21 的镜像作为构建环境
# 这个镜像标签 (Tag) 包含了丰富的信息:
# - 3.9.9:代表 Maven 的版本是 3.9.9
# - eclipse-temurin-21:代表 JDK 的版本是 21 (来自 Eclipse Temurin 发行版)
# - noble:代表底层的 Linux 操作系统是 Ubuntu 24.04 LTS (代号 Noble Numbat)
# 注意:这些工具是 Docker 从互联网上拉取的,完全独立于你本机的环境。
# ========== 第一阶段:BUILD(构建阶段)==========
FROM maven:3.9.9-eclipse-temurin-21-noble AS build
WORKDIR /app
# 复制源码
COPY console/backend /app/console/backend
# 编译打包
WORKDIR /app/console/backend
RUN mvn clean package -DskipTests
# ========== 第二阶段:RUNTIME(运行阶段)==========
FROM eclipse-temurin:21-jre-noble
WORKDIR /app
# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 🔑 关键:只从第一阶段复制编译好的 JAR 包
COPY --from=build /app/console/backend/hub/target/hub-server.jar /app/hub-server.jar
# 创建日志目录
RUN mkdir -p /app/logs
# 暴露端口
EXPOSE 8080
# 启动
ENTRYPOINT ["java", \
"-XX:+UseContainerSupport", \
"-XX:MaxRAMPercentage=75.0", \
"-jar", \
"/app/hub-server.jar"]
02、前端构建 (Dockerfile.frontend)
这是 React 前端页面的构建过程。
# -----------------------------------------------------------------------------
# 第一阶段:构建环境 (Builder Stage)
# -----------------------------------------------------------------------------
# 使用 Node.js 18 作为构建基础镜像
FROM docker.m.daocloud.io/library/node:18-alpine AS builder
WORKDIR /app
# 复制前端源代码
COPY console/frontend /app/console/frontend
WORKDIR /app/console/frontend
# 安装依赖并编译
# 1. 设置 npm 镜像源为官方源(也可以换成淘宝源加快速度)
# 2. npm ci: 严格按照 package-lock.json 安装依赖,比 npm install 更快更稳定
# 3. max-old-space-size=4096: 增加 Node 内存限制,防止构建大型项目时内存溢出
RUN npm config set registry https://registry.npmjs.org/ && \
npm ci --legacy-peer-deps && \
NODE_OPTIONS="--max-old-space-size=4096" npm run build-prod
# -----------------------------------------------------------------------------
# 第二阶段:运行环境 (Runtime Stage)
# -----------------------------------------------------------------------------
# 使用轻量级的 Nginx Alpine 镜像
FROM docker.m.daocloud.io/library/nginx:1.15-alpine
# 定义环境变量,Nginx 将监听此端口 (默认 1881)
ENV NGINX_PORT=1881
# 【核心配置】动态生成 nginx.conf
# 这里直接在 Dockerfile 里写入配置,免去了挂载外部配置文件的麻烦
RUN echo "user nginx; \
worker_processes 8; \
# ... (省略标准日志和性能配置) ...
http { \
include /etc/nginx/mime.types; \
default_type application/octet-stream; \
# 开启 Gzip 压缩,减少传输流量
gzip on; \
\
server { \
listen ${NGI...
3 条评论
回复