# 部署脚本检查报告 ## ✅ 检查完成 - 脚本已优化 ### 修复的问题 #### 1. ✅ 端口配置正确 - **SSH端口**: 22(标准SSH端口,用于连接服务器) - **应用端口**: 8006(Next.js应用对外访问端口) - 所有SSH命令使用 `$SSH_PORT`(22) - PM2启动时使用 `PORT=$APP_PORT`(8006) #### 2. ✅ PostgreSQL权限完善 增强了数据库权限配置,兼容PostgreSQL 15+: ```sql ALTER DATABASE family_tree OWNER TO family_tree_user; GRANT ALL ON SCHEMA public TO family_tree_user; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO family_tree_user; GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO family_tree_user; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO family_tree_user; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO family_tree_user; ``` #### 3. ✅ 环境变量配置优化 - 使用 `ENVEOF` 作为heredoc结束符,避免与EOF冲突 - 正确传递数据库配置变量到远程服务器 - 自动生成安全的 `NEXTAUTH_SECRET` #### 4. ✅ rsync排除文件优化 新增排除项: - `.env` - 避免覆盖服务器环境变量 - `check-server.sh` - 诊断脚本 - `deploy-manual.sh` - 手动部署脚本 - `setup-ssh-key.sh` - SSH配置脚本 - `*.tar.gz` - 打包文件 #### 5. ✅ PM2启动优化 ```bash PORT=$APP_PORT pm2 start npm --name "chinese-family-tree" -- start pm2 save pm2 startup systemd -u root --hp /root ``` ## 📋 脚本完整流程 ### 9个部署步骤 1. **[1/9] 检查SSH密钥** - 检查 `~/.ssh/id_rsa` 是否存在 - 不存在则自动创建4096位RSA密钥 2. **[2/9] 测试服务器连接** - 使用 `nc` 测试SSH端口22是否开放 - 验证服务器可访问性 3. **[3/9] 配置免密登录** - 检查是否已配置免密登录 - 未配置则使用 `ssh-copy-id` 配置 - ✅ 已完成 4. **[4/9] 本地构建项目** - `pnpm install` - 安装依赖 - `npx prisma generate` - 生成Prisma客户端 - `pnpm build` - 构建Next.js应用 5. **[5/9] 配置服务器环境** - 安装Node.js 20.x(如未安装) - 安装pnpm(如未安装) - 安装PM2(如未安装) - 创建部署目录 6. **[6/9] 配置PostgreSQL数据库** - 检查PostgreSQL是否安装(未安装则自动安装) - 检查数据库是否存在 - 创建数据库和用户(如不存在) - 配置完整权限 7. **[7/9] 上传文件到服务器** - 使用rsync同步文件 - 排除不必要的文件 - 显示上传进度 8. **[8/9] 配置环境变量** - 检查.env文件是否存在 - 不存在则自动创建 - 配置数据库连接、NextAuth、SMTP等 9. **[9/9] 启动应用** - 安装生产依赖 - 生成Prisma客户端 - 运行数据库迁移 - 使用PM2启动应用(监听8006端口) - 配置开机自启动 ## 🔧 配置信息 ### 服务器配置 ```bash SERVER_IP="115.190.235.230" SSH_PORT="22" # SSH连接端口 SERVER_USER="root" REMOTE_DIR="/var/www/chinese-family-tree" APP_PORT="8006" # 应用访问端口 ``` ### 数据库配置 ```bash DB_NAME="family_tree" DB_USER="family_tree_user" DB_PASSWORD="FamilyTree2024!@#" # 建议修改 ``` ### 自动生成的.env文件 ```env DATABASE_URL="postgresql://family_tree_user:FamilyTree2024!@#@localhost:5432/family_tree" NEXTAUTH_URL="http://115.190.235.230:8006" NEXTAUTH_SECRET="<自动生成的32字节随机字符串>" SMTP_HOST="smtp.163.com" SMTP_PORT="465" SMTP_USER="cftservice@163.com" SMTP_PASS="SChncqpqS9TDPUD2" SMTP_FROM="cftservice@163.com" NODE_ENV="production" ``` ## 🚀 使用方法 ### 1. 部署前检查 ```bash # 检查本地环境 pnpm --version node --version # 测试SSH连接 ssh root@115.190.235.230 # 检查免密登录 ssh -o BatchMode=yes root@115.190.235.230 "echo OK" ``` ### 2. 执行部署 ```bash ./deploy.sh ``` ### 3. 访问应用 ``` http://115.190.235.230:8006 ``` ## ⚠️ 重要提示 ### 1. 数据库密码安全 **强烈建议**在首次部署前修改数据库密码: ```bash # 编辑 deploy.sh 第13行 DB_PASSWORD="你的复杂密码" ``` ### 2. 防火墙配置 确保服务器防火墙开放端口8006: ```bash # Ubuntu/Debian sudo ufw allow 8006/tcp sudo ufw status # CentOS sudo firewall-cmd --permanent --add-port=8006/tcp sudo firewall-cmd --reload ``` ### 3. 云服务器安全组 如果使用云服务器(阿里云、腾讯云等),需要在控制台配置安全组规则: - 入站规则:允许TCP 8006端口 - 源地址:0.0.0.0/0(或指定IP) ### 4. .env文件管理 - 脚本会自动创建.env文件 - 如果.env已存在,不会覆盖 - 可以手动修改服务器上的.env文件后重启应用 ## 📊 部署时间估算 ### 首次部署 - 本地构建:3-5分钟 - 服务器环境配置:5-10分钟(需要安装软件) - 文件上传:2-5分钟(取决于网速) - 数据库配置:1-2分钟 - 应用启动:1-2分钟 - **总计:12-24分钟** ### 后续更新 - 本地构建:3-5分钟 - 文件上传:1-3分钟 - 应用重启:1分钟 - **总计:5-9分钟** ## 🔍 验证清单 部署完成后,请验证: - [ ] 应用可以访问:http://115.190.235.230:8006 - [ ] 数据库连接正常 - [ ] 用户注册功能正常 - [ ] 邮件发送功能正常 - [ ] PM2进程运行中:`ssh root@115.190.235.230 'pm2 status'` - [ ] 应用日志无错误:`ssh root@115.190.235.230 'pm2 logs chinese-family-tree --lines 50'` ## 🛠️ 常用管理命令 ```bash # 查看应用状态 ssh root@115.190.235.230 'pm2 status' # 查看实时日志 ssh root@115.190.235.230 'pm2 logs chinese-family-tree' # 重启应用 ssh root@115.190.235.230 'pm2 restart chinese-family-tree' # 停止应用 ssh root@115.190.235.230 'pm2 stop chinese-family-tree' # 查看数据库 ssh root@115.190.235.230 'sudo -u postgres psql -d family_tree -c "\dt"' # 查看.env文件 ssh root@115.190.235.230 'cat /var/www/chinese-family-tree/.env' ``` ## 📝 总结 ### ✅ 脚本已完成优化,可以直接使用 主要特点: - ✅ 端口配置正确(SSH:22, APP:8006) - ✅ 自动化程度高(9个步骤全自动) - ✅ 错误处理完善 - ✅ 数据库权限完整 - ✅ 环境变量自动配置 - ✅ PM2进程管理 - ✅ 免密登录已配置 ### 🎯 下一步 直接运行部署: ```bash ./deploy.sh ``` --- **检查时间**: 2025-11-23 18:20 **脚本版本**: v1.0(优化版) **状态**: ✅ 已通过检查,可以部署