首页
/ MERN Starter项目生产环境Docker Compose部署指南

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文件定义了两个主要服务:

  1. web服务:包含Node.js后端和React前端的应用容器
  2. 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数据。

生产环境部署最佳实践

  1. 环境变量管理

    • 建议将敏感信息(如数据库凭证)通过外部环境变量或secrets管理
    • 可创建.env文件配合env_file配置项使用
  2. 资源限制

    • 生产环境应添加CPU和内存限制
    • 示例:
      web:
        deploy:
          resources:
            limits:
              cpus: '0.5'
              memory: 512M
      
  3. 健康检查

    • 添加健康检查确保服务可用性
    • 示例:
      healthcheck:
        test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
        interval: 30s
        timeout: 10s
        retries: 3
      
  4. 日志配置

    • 配置日志驱动和选项便于集中管理
    • 示例:
      logging:
        driver: "json-file"
        options:
          max-size: "10m"
          max-file: "3"
      

部署流程

  1. 构建生产镜像:

    docker-compose -f docker-compose-production.yml build
    
  2. 启动服务:

    docker-compose -f docker-compose-production.yml up -d
    
  3. 查看运行状态:

    docker-compose ps
    
  4. 停止服务:

    docker-compose down
    

常见问题解决方案

  1. 端口冲突

    • 通过修改WEB_PORT环境变量解决
    • 示例:WEB_PORT=8080 docker-compose up
  2. 构建缓存问题

    • 使用--no-cache选项重建镜像
    • docker-compose build --no-cache
  3. 数据库初始化

    • 首次启动可能需要初始化脚本
    • 可通过自定义entrypoint或mongo初始化脚本实现

总结

这份docker-compose-production.yml文件为MERN Starter项目提供了完整的生产环境部署方案,涵盖了应用服务、数据库服务和数据持久化等核心需求。开发者可以根据实际项目需求进一步扩展配置,如添加反向代理、监控服务等组件,构建更完善的生产环境部署方案。