6.4 KiB
6.4 KiB
部署脚本检查报告
✅ 检查完成 - 脚本已优化
修复的问题
1. ✅ 端口配置正确
- SSH端口: 22(标准SSH端口,用于连接服务器)
- 应用端口: 8006(Next.js应用对外访问端口)
- 所有SSH命令使用
$SSH_PORT(22) - PM2启动时使用
PORT=$APP_PORT(8006)
2. ✅ PostgreSQL权限完善
增强了数据库权限配置,兼容PostgreSQL 15+:
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启动优化
PORT=$APP_PORT pm2 start npm --name "chinese-family-tree" -- start
pm2 save
pm2 startup systemd -u root --hp /root
📋 脚本完整流程
9个部署步骤
-
[1/9] 检查SSH密钥
- 检查
~/.ssh/id_rsa是否存在 - 不存在则自动创建4096位RSA密钥
- 检查
-
[2/9] 测试服务器连接
- 使用
nc测试SSH端口22是否开放 - 验证服务器可访问性
- 使用
-
[3/9] 配置免密登录
- 检查是否已配置免密登录
- 未配置则使用
ssh-copy-id配置 - ✅ 已完成
-
[4/9] 本地构建项目
pnpm install- 安装依赖npx prisma generate- 生成Prisma客户端pnpm build- 构建Next.js应用
-
[5/9] 配置服务器环境
- 安装Node.js 20.x(如未安装)
- 安装pnpm(如未安装)
- 安装PM2(如未安装)
- 创建部署目录
-
[6/9] 配置PostgreSQL数据库
- 检查PostgreSQL是否安装(未安装则自动安装)
- 检查数据库是否存在
- 创建数据库和用户(如不存在)
- 配置完整权限
-
[7/9] 上传文件到服务器
- 使用rsync同步文件
- 排除不必要的文件
- 显示上传进度
-
[8/9] 配置环境变量
- 检查.env文件是否存在
- 不存在则自动创建
- 配置数据库连接、NextAuth、SMTP等
-
[9/9] 启动应用
- 安装生产依赖
- 生成Prisma客户端
- 运行数据库迁移
- 使用PM2启动应用(监听8006端口)
- 配置开机自启动
🔧 配置信息
服务器配置
SERVER_IP="115.190.235.230"
SSH_PORT="22" # SSH连接端口
SERVER_USER="root"
REMOTE_DIR="/var/www/chinese-family-tree"
APP_PORT="8006" # 应用访问端口
数据库配置
DB_NAME="family_tree"
DB_USER="family_tree_user"
DB_PASSWORD="FamilyTree2024!@#" # 建议修改
自动生成的.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. 部署前检查
# 检查本地环境
pnpm --version
node --version
# 测试SSH连接
ssh root@115.190.235.230
# 检查免密登录
ssh -o BatchMode=yes root@115.190.235.230 "echo OK"
2. 执行部署
./deploy.sh
3. 访问应用
http://115.190.235.230:8006
⚠️ 重要提示
1. 数据库密码安全
强烈建议在首次部署前修改数据库密码:
# 编辑 deploy.sh 第13行
DB_PASSWORD="你的复杂密码"
2. 防火墙配置
确保服务器防火墙开放端口8006:
# 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'
🛠️ 常用管理命令
# 查看应用状态
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进程管理
- ✅ 免密登录已配置
🎯 下一步
直接运行部署:
./deploy.sh
检查时间: 2025-11-23 18:20 脚本版本: v1.0(优化版) 状态: ✅ 已通过检查,可以部署