Midwayjs部署环境-Docker

605 阅读3分钟

部署环境-Docker

本文介绍使用 Docker 容器化部署 MidwayJS 后端服务,包含数据库、缓存和反向代理的完整编排。

准备工作

组件说明版本
Docker容器引擎20+
Docker Compose容器编排2+

Dockerfile

script/Dockerfile 采用源码构建方式,在容器内完成依赖安装和 TypeScript 编译:

FROM node:24-alpine
RUN npm config set registry https://registry.npmmirror.com

ENV TZ="Asia/Shanghai"
ENV LANG="en_US.UTF-8"

WORKDIR /app

COPY ./src ./src
COPY ./bootstrap.js ./
COPY ./package.json ./
COPY ./tsconfig.json ./

RUN npm install pm2 -g && npm install
RUN npm run build && npm prune --omit=dev

EXPOSE 6275
CMD ["npm", "run", "start:docker"]
  • 基于 node:24-alpine,构建后镜像约 800MB
  • 使用国内 npm 加速源
  • pm2-runtime 保持前台运行,支持多实例集群
  • npm prune --omit=dev 清除开发依赖减小体积

docker-compose 服务编排

docker-compose.yaml 包含以下服务:

服务镜像端口说明
app自构建6275MidwayJS 后端
mysqlmysql:8.03306数据库
redisredis:7-alpine6379缓存
nginxnginx:1.25-alpine80, 443反向代理 + 前端

所有服务通过 mask_net 桥接网络互通,应用通过容器名(mysqlredis)访问数据库和缓存。

数据持久化

卷名用途
mysql_dataMySQL 数据文件
redis_dataRedis 持久化数据
mask_file应用运行时文件(日志、上传)

部署步骤

1. 准备配置文件

将以下文件上传到服务器部署目录:

deploy/
├── src/                        源代码
├── assets/                     静态资源
├── bootstrap.js
├── package.json
├── tsconfig.json
├── Dockerfile
├── docker-compose.yaml

2. 配置环境变量

docker-compose.yamlenvironment 中直接修改生产参数,或创建 .env 文件:

# .env
JWT_SECRET=your-production-secret
DB_PASSWORD=your-db-password
DB_DATABASE=mask_api
DB_USERNAME=root
REDIS_PASSWORD=your-redis-password

docker-compose 会自动读取 .env 文件,变量通过 ${VAR:-default} 语法注入。

3. 启动服务

# 构建镜像后端API
docker build -f Dockerfile -t mask_api:0.0.1 .

# 构建镜像并启动全部服务
docker-compose up -d

# 查看启动日志
docker-compose logs -f app

首次启动会拉取 MySQL、Redis 镜像并构建应用镜像。

4. 初始化数据库

# 进入 MySQL 容器
docker-compose exec mysql mysql -uroot -p

# 导入初始化脚本(如果有)
docker-compose exec -T mysql -uroot -p mask_api < script/db_init.sql

常用命令

docker-compose up -d                # 启动全部服务
docker-compose down                 # 停止全部服务
docker-compose up -d --build        # 重建镜像并启动(代码更新后)
docker-compose ps                   # 查看服务状态
docker-compose logs -f app          # 查看应用日志
docker-compose logs -f mysql        # 查看数据库日志
docker-compose exec app sh          # 进入应用容器
docker-compose restart app          # 重启应用
docker volume ls                    # 查看数据卷

注意事项

  • 首次部署需等待 MySQL 健康检查通过后应用才会启动,耐心等待
  • 生产环境务必修改 JWT_SECRET、数据库密码、Redis 密码
  • MySQL 和 Redis 端口默认暴露到宿主机,生产环境建议移除 ports 配置仅保留内网访问
  • mask_file 卷用于存放日志和上传文件,确保磁盘空间充足
  • native addon(bcrypt)在 Alpine 下静态链接,跨平台部署需重新构建镜像