首页
/ Node-Express-Mongoose项目Docker容器化部署指南

Node-Express-Mongoose项目Docker容器化部署指南

2025-07-08 03:29:28作者:秋泉律Samson

项目概述

Node-Express-Mongoose项目是一个典型的现代Web应用开发模板,它整合了Node.js运行时、Express框架和Mongoose ODM(对象文档映射)工具,为开发者提供了一个完整的MERN(MongoDB, Express, React, Node.js)或MEAN(MongoDB, Express, Angular, Node.js)技术栈基础架构。

Docker Compose配置解析

整体架构设计

该项目的Docker Compose配置采用了两服务架构:

  1. Node应用服务:运行基于Express的Web应用
  2. MongoDB服务:作为应用的数据存储

这种分离式设计符合现代微服务架构理念,使得数据库和应用可以独立扩展和维护。

服务配置详解

Node应用服务

node:
  build:
    context: .
    dockerfile: ./docker/node/Dockerfile
  volumes:
    - .:/app
    - /app/node_modules
  command: /usr/local/wait-for-it.sh mongo:27017 -- npm start
  env_file:
    - .env
  ports:
    - 3000:3000
  networks:
    - webnet
  depends_on:
    - mongo

关键配置分析:

  1. 构建配置

    • 使用项目根目录作为构建上下文
    • 指定了自定义的Dockerfile路径,通常这个Dockerfile会包含Node.js环境的安装和项目依赖的配置
  2. 卷挂载

    • 将宿主机当前目录映射到容器内的/app目录,实现代码热更新
    • 单独挂载node_modules目录,避免宿主机与容器间的模块冲突
  3. 启动命令

    • 使用wait-for-it脚本确保MongoDB服务就绪后才启动应用
    • 执行npm start启动应用
  4. 网络与依赖

    • 加入自定义的webnet网络
    • 明确声明对mongo服务的依赖

MongoDB服务

mongo:
  image: mongo:5
  restart: always
  networks:
    - webnet
  volumes:
    - ./data:/data/db

关键配置分析:

  1. 镜像选择

    • 直接使用官方MongoDB 5.x版本镜像
  2. 数据持久化

    • 将容器内的/data/db映射到宿主机的./data目录
    • 确保数据库数据在容器重启后不会丢失
  3. 高可用性

    • 设置restart: always保证服务意外停止后自动重启

网络配置

networks:
  webnet:

创建了一个名为webnet的默认网络,使两个服务能够相互通信,同时隔离于外部网络。

部署实践指南

准备工作

  1. 确保已安装Docker和Docker Compose
  2. 克隆项目代码到本地
  3. 准备.env环境变量文件(可根据项目提供的示例模板创建)

启动流程

  1. 构建并启动服务

    docker-compose up -d
    
  2. 查看运行状态

    docker-compose ps
    
  3. 查看应用日志

    docker-compose logs -f node
    

开发模式建议

  1. 代码修改即时生效

    • 由于配置了卷映射,修改本地代码会自动同步到容器内
    • 配合Nodemon等工具可实现自动重启
  2. 数据库管理

    • 可通过MongoDB客户端工具连接localhost:27017
    • 或使用容器内命令行:
      docker-compose exec mongo mongo
      

常见问题解决方案

  1. 端口冲突

    • 如果3000端口被占用,可修改docker-compose.yml中的端口映射
    • 例如改为"4000:3000"表示将宿主机的4000映射到容器的3000
  2. 依赖安装问题

    • 如果node_modules未正确安装,可尝试:
      docker-compose run --rm node npm install
      
  3. MongoDB连接问题

    • 确保wait-for-it.sh脚本有执行权限
    • 检查.env中的MongoDB连接配置是否正确

生产环境优化建议

  1. 使用专门的Docker网络

    • 可配置更复杂的网络策略,限制不必要的访问
  2. 资源限制

    • 为服务添加CPU和内存限制,防止单一服务占用过多资源
  3. 日志管理

    • 配置日志驱动,将日志集中收集和分析
  4. 镜像优化

    • 使用多阶段构建减小最终镜像体积
    • 选择更精简的基础镜像

总结

通过这份Docker Compose配置,Node-Express-Mongoose项目实现了开发和生产环境的容器化部署方案。这种配置不仅简化了本地开发环境的搭建,也为生产部署提供了可靠的基础架构。开发者可以基于此配置进一步扩展,添加更多服务如Redis缓存、Nginx反向代理等,构建更完整的应用生态系统。