部署环境-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 | 自构建 | 6275 | MidwayJS 后端 |
| mysql | mysql:8.0 | 3306 | 数据库 |
| redis | redis:7-alpine | 6379 | 缓存 |
| nginx | nginx:1.25-alpine | 80, 443 | 反向代理 + 前端 |
所有服务通过 mask_net 桥接网络互通,应用通过容器名(mysql、redis)访问数据库和缓存。
数据持久化
| 卷名 | 用途 |
|---|---|
mysql_data | MySQL 数据文件 |
redis_data | Redis 持久化数据 |
mask_file | 应用运行时文件(日志、上传) |
部署步骤
1. 准备配置文件
将以下文件上传到服务器部署目录:
deploy/
├── src/ 源代码
├── assets/ 静态资源
├── bootstrap.js
├── package.json
├── tsconfig.json
├── Dockerfile
├── docker-compose.yaml
2. 配置环境变量
在 docker-compose.yaml 的 environment 中直接修改生产参数,或创建 .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 下静态链接,跨平台部署需重新构建镜像