构建产物(platform/server/dist/、platform/client/dist/)已纳入 Git。服务器只需 git pull 即可获取最新代码和构建产物,无需 scp 或打包。
npm run build # 构建 client + 编译 server
git add .
git commit -m "deploy: build"
git push
# 1. Clone 代码
git clone <repo-url> 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 # 开机自启(按提示执行输出的命令)
cd playableads-platform
git pull
# 如果 package.json 有变动:
npm run install:all
# 重启
pm2 restart playableads-platform
在服务器上配置 post-receive hook,git push 后自动触发更新:
# 服务器上
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
# 本地验证
npm run build && node platform/server/dist/index.js
# 服务器(PM2)
pm2 start ecosystem.config.js
pm2 logs playableads-platform
pm2 list # 查看所有进程
pm2 logs playableads-platform # 查看日志
pm2 restart playableads-platform # 重启
pm2 stop playableads-platform # 停止
pm2 monit # 实时监控 CPU/内存
pm2 save # 保存当前进程列表(重启后恢复)
pm2 startup # 设置开机自启
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 日志