# 部署指南 - 有声书项目 ## 部署信息 - **服务器**: 8.159.134.106 - **部署路径**: /data/ai - **后端域名**: bookapi.rrbrr.com - **前端域名**: book.rrbrr.com ## 第一步:准备部署包 从本地上传部署包到服务器: ```bash # 在本地执行 scp -r deploy-package root@8.159.134.106:/tmp/ ``` ## 第二步:在服务器上执行部署 SSH 连接到服务器: ```bash ssh root@8.159.134.106 ``` ### 2.1 备份旧文件 ```bash 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 部署新文件 ```bash 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 ```bash # 后端 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 启动后端服务 ```bash 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 验证部署 ```bash # 检查后端服务状态 pm2 status curl http://localhost:3000/api/health # 检查前端 curl http://localhost/ # 检查 nginx 状态 systemctl status nginx ``` ## 常用命令 ### 后端管理 ```bash # 查看日志 pm2 logs server # 重启服务 pm2 restart server # 停止服务 pm2 stop server ``` ### Nginx 管理 ```bash # 测试配置 nginx -t # 重载配置 systemctl reload nginx # 重启 Nginx systemctl restart nginx ``` ### 日志查看 ```bash # 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` ## 一键部署脚本 在服务器上创建并执行: ```bash 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 ```