MERN Starter项目生产环境Docker Compose部署指南
2025-07-08 03:14:49作者:晏闻田Solitary
前言
在现代Web应用开发中,容器化部署已成为标准实践。本文将深入解析MERN Starter项目中的docker-compose-production.yml
文件,帮助开发者理解如何将MERN (MongoDB, Express, React, Node.js) 技术栈应用部署到生产环境。
文件结构解析
这个Docker Compose文件定义了两个主要服务:
- web服务:包含Node.js后端和React前端的应用容器
- db服务:MongoDB数据库容器
核心配置详解
1. 版本声明
version: '3.4'
使用Docker Compose 3.4版本,这是一个稳定且功能丰富的版本,支持大多数现代Docker功能。
2. web服务配置
web:
build:
context: ./
dockerfile: Dockerfile
target: production
depends_on:
- db
ports:
- "${WEB_PORT:-80}:8000"
environment:
NODE_ENV: production
MONGO_URL: mongodb://db:27017/mern-starter
关键点解析:
- 多阶段构建:通过
target: production
指定使用Dockerfile中的生产环境构建阶段 - 端口映射:使用环境变量
WEB_PORT
灵活配置外部端口,默认80映射到内部8000端口 - 环境变量:
NODE_ENV=production
确保应用以生产模式运行MONGO_URL
配置MongoDB连接字符串,使用服务名称db
作为主机名
3. db服务配置
db:
image: mongo:latest
volumes:
- dbdata:/data/db
关键点解析:
- 最新版MongoDB:直接使用官方mongo镜像的最新版
- 数据持久化:通过命名卷
dbdata
将数据库文件持久化存储
4. 卷声明
volumes:
dbdata:
定义了一个名为dbdata
的Docker卷,用于持久化MongoDB数据。
生产环境部署最佳实践
-
环境变量管理:
- 建议将敏感信息(如数据库凭证)通过外部环境变量或secrets管理
- 可创建
.env
文件配合env_file
配置项使用
-
资源限制:
- 生产环境应添加CPU和内存限制
- 示例:
web: deploy: resources: limits: cpus: '0.5' memory: 512M
-
健康检查:
- 添加健康检查确保服务可用性
- 示例:
healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/health"] interval: 30s timeout: 10s retries: 3
-
日志配置:
- 配置日志驱动和选项便于集中管理
- 示例:
logging: driver: "json-file" options: max-size: "10m" max-file: "3"
部署流程
-
构建生产镜像:
docker-compose -f docker-compose-production.yml build
-
启动服务:
docker-compose -f docker-compose-production.yml up -d
-
查看运行状态:
docker-compose ps
-
停止服务:
docker-compose down
常见问题解决方案
-
端口冲突:
- 通过修改
WEB_PORT
环境变量解决 - 示例:
WEB_PORT=8080 docker-compose up
- 通过修改
-
构建缓存问题:
- 使用
--no-cache
选项重建镜像 docker-compose build --no-cache
- 使用
-
数据库初始化:
- 首次启动可能需要初始化脚本
- 可通过自定义entrypoint或mongo初始化脚本实现
总结
这份docker-compose-production.yml
文件为MERN Starter项目提供了完整的生产环境部署方案,涵盖了应用服务、数据库服务和数据持久化等核心需求。开发者可以根据实际项目需求进一步扩展配置,如添加反向代理、监控服务等组件,构建更完善的生产环境部署方案。