
G0DM0D3 Docker多阶段构建Dockerfile与Dockerfile.web差异全解析【免费下载链接】G0DM0D3LIBERATED AI CHAT项目地址: https://gitcode.com/GitHub_Trending/g0/G0DM0D3G0DM0D3 是一个完全开源的 AI 聊天界面LIBERATED AI CHAT支持多模型竞速、ULTRAPLINIAN 评估引擎与本地模型接入。它的仓库里藏着两个用途完全不同的 Docker 文件Dockerfile 负责构建 API 后端镜像Dockerfile.web 则用经典的多阶段构建打包 Next.js 前端。本文带你快速看懂两者差异以及它们如何配合 docker-compose.yml 组成一套可自托管的完整服务。 先看懂全局两个文件各管什么对比项Dockerfile后端Dockerfile.web前端构建方式单阶段多阶段builder → nginx基础镜像node:20-slimnode:20-slim nginx:alpine产物运行中的 Express API 服务静态页面 nginx 反向代理监听端口786080启动命令npx tsx api/server.tsnginx -g daemon off;入口文件api/server.tsnginx.conf一句话总结后端单阶段跑服务前端多阶段出静态站。⚙️ Dockerfile 解析单阶段 API 镜像后端镜像只做一件事——把 Node 20 跑起来。它的核心步骤精简安装依赖npm ci --omitdev只装生产依赖镜像更小最小化源码只拷贝 api/、src/lib/、src/stm/ 三个目录其余前端代码一概不打包安全加固创建非 root 用户app运行符合容器安全最佳实践健康检查内置HEALTHCHECK每 30 秒探测/v1/health方便容器编排器判断存活端口 7860这是 Hugging Face Spaces 的默认约定端口。 仓库里的 HF/Dockerfile 是它的孪生兄弟内容几乎一致仅多了两行关于 HF 数据集自动发布的注释专供 HF Space 部署场景参考。️ Dockerfile.web 拆解多阶段构建教科书多阶段构建Multi-stage Build的精髓是前面的阶段负责编译最后一个阶段负责运行构建工具不会带进最终镜像。第一阶段builder——施工队基于node:20-slim AS builderAS builder给阶段起了个名字供后续引用npm ci安装全部依赖含 devDependencies因为构建需要执行 package.json 中的build脚本即next build。第二阶段运行时——交付物基于超轻量的nginx:alpine体积只有几十 MBCOPY --frombuilder /app/out /usr/share/nginx/html是灵魂一行只从 builder 阶段摘取静态导出产物Node、编译器、依赖全部留在上一阶段蒸发了拷入 nginx.conf 替换默认配置对外暴露 80 端口。为什么能生成静态文件关键在 next.config.js 中设置了output: export让 Next.js 在构建时输出纯 HTML/JS/CSS 到out/目录——没有服务端也能托管页面。 docker-compose 把两个镜像串起来docker-compose.yml 定义了完整自托管栈两条要点api 服务用 Dockerfile 构建端口 7860 只在内部网络暴露expose外部访问不到web 服务用 Dockerfile.web 构建宿主端口默认 3000 映射到容器 80 端口并通过depends_on: condition: service_healthy等 API 健康检查通过后才启动。前端如何找到后端答案在 nginx.conf所有/v1/请求被反向代理到http://api:7860/v1/且关闭了缓冲proxy_buffering off以支持流式响应——这正是 ULTRAPLINIAN 多模型竞速场景所需要的。 快速上手三条命令启动git clone https://gitcode.com/GitHub_Trending/g0/G0DM0D3 cd G0DM0D3 docker compose up --build -d打开http://localhost:3000即可访问。别忘了先在.env中填入OPENROUTER_API_KEY它将为所有用户统一提供模型调用额度。❓ 常见疑问Q为什么后端不用多阶段构建A后端运行的是 TypeScript 源码tsx直接执行没有编译产物可剥离单阶段已经足够精简。Q改前端代码后镜像会不会很大A不会。builder 阶段只是构建临时车间最终镜像只有 nginx 静态文件源码和依赖都不会进入镜像层。Q两个 Dockerfile 能合并成一个吗A技术上可以但拆开后前后端可独立构建、独立部署、独立扩容是更工程化的选择。✅ 小结你学到的关键点Dockerfile单阶段、--omitdev、非 root 用户、健康检查Dockerfile.web多阶段builder 编译 → nginx 交付COPY --frombuilder只取产物docker-compose.yml前后端联动、健康检查依赖、端口隔离这套Dockerfile Dockerfile.web compose的组合拳是学习Docker 多阶段构建与前后端分离部署的绝佳范本。动手改改 nginx.conf 或换换基础镜像你就能彻底掌握它。【免费下载链接】G0DM0D3LIBERATED AI CHAT项目地址: https://gitcode.com/GitHub_Trending/g0/G0DM0D3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考