📂 项目结构(示例) ssr-app/
├── app.vue
├── composables
├── dist -> /Users/mac/projects/navigations/.output/public
├── dockerfile
├── ecosystem.config.cjs
├── ecosystem.config.js
├── .env.development
├── .env.production
├── .git
├── .gitignore
├── js
├── nuxt.config.ts
├── package.json
├── pages
├── plugins
├── public
├── README.md
├── server
├── tsconfig.json
└── utils
构建build打包后结构
├── app.vue
├── composables
├── dist -> /Users/mac/projects/navigations/.output/public
├── Dockerfile # 容器构建文件
├── ecosystem.config.cjs # PM2配置文件
├── .env.development
├── .env.production
├── .git
├── .gitignore
├── .output
│ └── server # SSR服务端代码
│ └── index.mjs # 服务入口文件
├── js
├── nuxt.config.ts
├── package.json # 项目依赖
├── pages
├── plugins
├── public
├── README.md
├── server
├── tsconfig.json
└── utils
Dockerfile
FROM node:23.10
# ↑ node:23.10 基础镜像,确保最终镜像纯净
WORKDIR /app
# ↑ 设置容器内工作目录为/app
RUN npm install -g pm2@latest
# ↑ 全局安装PM2进程管理器:
# - pm2-runtime专为容器优化
# @latest:明确版本避免缓存问题
COPY . .
# ↑ 复制从远程仓库pull下来的所有文件和目录到容器的工作目录
COPY .env.development ./
COPY .env.production ./
COPY ecosystem.config.cjs ./
# ↑ 复制PM2配置文件
RUN npm install
# ↑ 安装生产依赖(不装devDependencies)
# RUN npm install --production
# --production:仅安装dependencies
RUN npm run build
# ↑ 执行构建命令(假设package.json中有build脚本)
# 典型SSR框架构建命令:
# Next.js: next build
# Nuxt.js: nuxt build
EXPOSE 3117
# ↑ 声明容器监听端口(需与SSR服务端口一致)
# 注意:实际映射需在docker run时用-p参数指定
CMD ["pm2-runtime", "start", "ecosystem.config.cjs"]
# ↑ 容器启动命令:
# pm2-runtime:专为容器设计的PM2模式
# ecosystem.config.cjs:PM2配置文件路径
📜 ecosystem.config.cjs 配置解析 示例
module.exports = {
apps: [{
name: 'ssr-server',
script: './.output/server/index.mjs',
exec_mode: 'fork',
autorestart: true,
watch: false,
max_memory_restart: '1G',
env: {
NODE_ENV: 'prod',
PORT: 3117
},
args: 'start',
cwd: '/app'
}]
}
🛠️ 构建与运行命令详解
-
构建镜像 docker build -t ssr-app . -t ssr-app:给镜像打标签(名称) . :基于当前目录的Dockerfile构建
-
运行容器
docker run -d \
-p 3000:3000 \
--name ssr-container \
--memory=1g \
--cpus=2 \
ssr-app \
-d:后台运行
-p 主机端口:容器端口
--name:容器名称
--memory:限制内存1GB
--cpus:限制2核CPU\
- 常用运维命令
查看实时日志
docker logs -f ssr-container
进入容器shell(调试用)
docker exec -it ssr-container sh
查看PM2管理的进程状态
docker exec ssr-container pm2 list
优雅停止容器
docker stop ssr-container
🔧 关键配置说明表
配置项 作用 典型值
pm2-runtime 容器优化的PM2运行模式 必用
instances: 'max' 最大化利用CPU核心 适合SSR高并发
exec_mode: 'cluster' 启用集群模式 需配合instances
autorestart: true 异常退出自动恢复 生产环境必备
NODE_ENV: production 启用生产模式 优化性能
max_memory_restart 防止内存泄漏 建议1G\
💡 最佳实践建议
安全加固
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
↑ 避免以root运行
健康检查
HEALTHCHECK --interval=30s --timeout=3s
CMD curl -f http://localhost:3000/health || exit 1
多环境配置
// ecosystem.config.js
env_development: {
NODE_ENV: 'development'
}
镜像优化
RUN npm cache clean --force
↑ 构建完成后清理缓存
通过以上配置,你将获得:
生产级SSR服务的Docker化部署
PM2提供的进程守护和集群支持
优化的容器资源管理
完善的日志和监控能力