DEPLOY.md 4.5 KB

部署指南 - 有声书项目

部署信息

  • 服务器: 8.159.134.106
  • 部署路径: /data/ai
  • 后端域名: bookapi.rrbrr.com
  • 前端域名: book.rrbrr.com

第一步:准备部署包

从本地上传部署包到服务器:

# 在本地执行
scp -r deploy-package root@8.159.134.106:/tmp/

第二步:在服务器上执行部署

SSH 连接到服务器:

ssh root@8.159.134.106

2.1 备份旧文件

cd /data/ai
BACKUP_DIR="/data/ai/backup_$(date +%Y%m%d_%H%M%S)"
mkdir -p $BACKUP_DIR

# 备份现有文件
if [ -d "server" ]; then cp -r server $BACKUP_DIR/; fi
if [ -d "frontend" ]; then cp -r frontend $BACKUP_DIR/; fi

echo "备份完成: $BACKUP_DIR"

2.2 部署新文件

cd /data/ai

# 移动临时文件到目标位置
rm -rf server frontend
mv /tmp/deploy-package/server .
mv /tmp/deploy-package/frontend .

# 安装依赖
cd server
npm install --production

# 生成 Prisma Client
npx prisma generate

echo "文件部署完成!"

2.3 配置 Nginx

# 后端 API 反向代理 (bookapi.rrbrr.com)
cat > /etc/nginx/sites-available/book-api << 'EOF'
server {
    listen 80;
    server_name bookapi.rrbrr.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
    }
}
EOF

# 前端静态文件 (book.rrbrr.com)
cat > /etc/nginx/sites-available/book-frontend << 'EOF'
server {
    listen 80;
    server_name book.rrbrr.com;

    root /data/ai/frontend;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
}
EOF

# 启用站点
ln -sf /etc/nginx/sites-available/book-api /etc/nginx/sites-enabled/
ln -sf /etc/nginx/sites-available/book-frontend /etc/nginx/sites-enabled/

# 移除默认站点
rm -f /etc/nginx/sites-enabled/default

# 测试并重载
nginx -t
systemctl reload nginx

echo "Nginx 配置完成!"

2.4 启动后端服务

cd /data/ai/server

# 安装 PM2
npm install -g pm2

# 停止旧服务
pm2 delete server 2>/dev/null || true

# 启动服务
pm2 start dist/app.js --name server

# 保存并设置开机启动
pm2 save
pm2 startup

# 查看服务状态
pm2 status

2.5 配置域名 DNS

在域名管理后台添加 DNS 记录:

  • bookapi.rrbrr.com → A 记录 → 8.159.134.106
  • book.rrbrr.com → A 记录 → 8.159.134.106

2.6 验证部署

# 检查后端服务状态
pm2 status
curl http://localhost:3000/api/health

# 检查前端
curl http://localhost/

# 检查 nginx 状态
systemctl status nginx

常用命令

后端管理

# 查看日志
pm2 logs server

# 重启服务
pm2 restart server

# 停止服务
pm2 stop server

Nginx 管理

# 测试配置
nginx -t

# 重载配置
systemctl reload nginx

# 重启 Nginx
systemctl restart nginx

日志查看

# Nginx 访问日志
tail -f /var/log/nginx/access.log

# Nginx 错误日志
tail -f /var/log/nginx/error.log

# 后端日志
pm2 logs server --lines 50

故障排除

后端无法启动

  1. 检查端口占用: lsof -i:3000
  2. 检查环境变量: 确保 .env 文件存在
  3. 查看错误日志: pm2 logs server

前端无法访问

  1. 检查文件权限: ls -la /data/ai/frontend/
  2. 检查 Nginx 配置: nginx -t
  3. 查看 Nginx 错误日志

数据库连接失败

  1. 检查 MySQL 服务: systemctl status mysql
  2. 检查连接配置: cat /data/ai/server/.env

一键部署脚本

在服务器上创建并执行:

cat > /data/ai/deploy.sh << 'EOFSCRIPT'
#!/bin/bash
set -e

echo "开始部署..."

# 备份
BACKUP_DIR="/data/ai/backup_$(date +%Y%m%d_%H%M%S)"
mkdir -p $BACKUP_DIR
[ -d "server" ] && cp -r server $BACKUP_DIR/
[ -d "frontend" ] && cp -r frontend $BACKUP_DIR/

# 部署
rm -rf server frontend
mv /tmp/deploy-package/server .
mv /tmp/deploy-package/frontend .

# 安装依赖
cd server
npm install --production
npx prisma generate

# 重启服务
pm2 restart server

echo "部署完成!"
EOFSCRIPT

chmod +x /data/ai/deploy.sh
/data/ai/deploy.sh