Files
chinese-family-tree-2/部署脚本检查报告.md
T
freedakgmail 3b0d8255f6 0.0.8.1
2025-11-23 19:38:51 +08:00

6.4 KiB
Raw Blame History

部署脚本检查报告

检查完成 - 脚本已优化

修复的问题

1. 端口配置正确

  • SSH端口: 22(标准SSH端口,用于连接服务器)
  • 应用端口: 8006Next.js应用对外访问端口)
  • 所有SSH命令使用 $SSH_PORT22
  • PM2启动时使用 PORT=$APP_PORT8006

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. [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端口)
    • 配置开机自启动

🔧 配置信息

服务器配置

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(优化版) 状态: 已通过检查,可以部署