# 部署指南 ## 概述 构建产物(`platform/server/dist/`、`platform/client/dist/`)已纳入 Git。服务器只需 `git pull` 即可获取最新代码和构建产物,无需 scp 或打包。 ## 本地:构建 + 推送 ```bash npm run build # 构建 client + 编译 server git add . git commit -m "deploy: build" git push ``` ## 服务器首次部署 ```bash # 1. Clone 代码 git clone playableads-platform cd playableads-platform # 2. 安装依赖 npm run install:all # 3. 创建日志目录 mkdir -p logs # 4. 启动(PM2) pm2 start ecosystem.config.js pm2 save pm2 startup # 开机自启(按提示执行输出的命令) ``` ## 服务器更新 ```bash cd playableads-platform git pull # 如果 package.json 有变动: npm run install:all # 重启 pm2 restart playableads-platform ``` ## 自动化部署(Git Hook,可选) 在服务器上配置 post-receive hook,`git push` 后自动触发更新: ```bash # 服务器上 cd playableads-platform cat > .git/hooks/post-receive << 'EOF' #!/bin/bash unset GIT_DIR cd /path/to/playableads-platform git pull origin master # 只在 package 有变动时安装 if git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD | grep -q "package.json"; then npm run install:all fi pm2 restart playableads-platform EOF chmod +x .git/hooks/post-receive ``` ## 生产启动 ```bash # 本地验证 npm run build && node platform/server/dist/index.js # 服务器(PM2) pm2 start ecosystem.config.js pm2 logs playableads-platform ``` ## PM2 常用命令 ```bash pm2 list # 查看所有进程 pm2 logs playableads-platform # 查看日志 pm2 restart playableads-platform # 重启 pm2 stop playableads-platform # 停止 pm2 monit # 实时监控 CPU/内存 pm2 save # 保存当前进程列表(重启后恢复) pm2 startup # 设置开机自启 ``` ## Docker 部署(备选) ```bash npm run docker:build # 构建镜像 npm run docker:run # 启动容器(:3001,storage 挂载) # ECS docker save playableads-platform | gzip > playableads-platform.tar.gz scp playableads-platform.tar.gz ecs:~/ ssh ecs docker load < playableads-platform.tar.gz mkdir -p ~/playableads-storage docker run -d -p 3001:3001 \ -v ~/playableads-storage:/app/storage \ --restart unless-stopped \ --name playableads playableads-platform ``` ## 环境变量 | 变量 | 默认值 | 说明 | |------|--------|------| | `PORT` | `3001` | 服务端口 | | `NODE_ENV` | `production` | pm2 中通过 ecosystem.config.js 设置 | ## 运行时目录结构 ``` playableads-platform/ ├── platform/server/dist/ ← 编译产物(git 跟踪) ├── platform/client/dist/ ← 前端构建(git 跟踪) ├── storage/ ← 运行时数据(gitignore) │ ├── data.db │ └── creatives/ └── logs/ ← PM2 日志 ```