Files
chinese-family-tree-2/部署说明.md
T
freedakgmail 3b0d8255f6 0.0.8.1
2025-11-23 19:38:51 +08:00

5.3 KiB
Raw Blame History

部署说明

免密登录已配置成功

SSH免密登录已成功配置到服务器 115.190.235.230

📋 配置信息

  • 服务器IP: 115.190.235.230
  • SSH端口: 22(标准SSH端口)
  • 应用端口: 8006Next.js应用对外访问端口)
  • SSH用户: root
  • 部署目录: /var/www/chinese-family-tree

🚀 一键部署

现在可以直接运行部署脚本,无需输入密码:

./deploy.sh

📝 部署流程

脚本会自动完成以下步骤:

  1. ✓ 检查SSH密钥
  2. ✓ 测试服务器连接
  3. ✓ 配置免密登录(已完成)
  4. ✓ 本地构建项目
  5. ✓ 配置服务器环境(安装Node.js、pnpm、PM2
  6. ✓ 上传文件到服务器
  7. ✓ 启动应用(监听8006端口)

🌐 访问地址

部署成功后,应用访问地址:

http://115.190.235.230:8006

🔧 常用管理命令

查看应用状态

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 'pm2 logs chinese-family-tree --lines 100'

⚙️ 服务器环境变量配置

在首次部署前,需要在服务器上配置 .env 文件:

# 登录服务器
ssh root@115.190.235.230

# 进入部署目录
cd /var/www/chinese-family-tree

# 创建环境变量文件
nano .env

添加以下内容(根据实际情况修改):

# 数据库配置
DATABASE_URL="postgresql://user:password@localhost:5432/family_tree"

# NextAuth 配置
NEXTAUTH_URL="http://115.190.235.230:8006"
NEXTAUTH_SECRET="your-production-secret-key-change-this"

# 邮箱服务器配置
SMTP_HOST="smtp.163.com"
SMTP_PORT="465"
SMTP_USER="cftservice@163.com"
SMTP_PASS="SChncqpqS9TDPUD2"
SMTP_FROM="cftservice@163.com"

# 生产环境
NODE_ENV="production"

🗄️ 数据库配置

安装PostgreSQL

# 登录服务器
ssh root@115.190.235.230

# 安装PostgreSQL
apt-get update
apt-get install -y postgresql postgresql-contrib

# 创建数据库和用户
sudo -u postgres psql << EOF
CREATE DATABASE family_tree;
CREATE USER family_tree_user WITH PASSWORD 'your_secure_password';
GRANT ALL PRIVILEGES ON DATABASE family_tree TO family_tree_user;
\q
EOF

更新数据库连接字符串

修改 .env 文件中的 DATABASE_URL

DATABASE_URL="postgresql://family_tree_user:your_secure_password@localhost:5432/family_tree"

🔥 防火墙配置

确保服务器防火墙开放必要端口:

# Ubuntu/Debian
ufw allow 22/tcp    # SSH
ufw allow 8006/tcp  # 应用端口
ufw enable
ufw status

# 或使用 iptables
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 8006 -j ACCEPT
iptables-save

🔄 更新部署

当代码有更新时,直接运行部署脚本即可:

./deploy.sh

脚本会自动:

  1. 构建最新代码
  2. 上传到服务器
  3. 安装依赖
  4. 运行数据库迁移
  5. 重启应用

🐛 故障排查

应用无法启动

# 查看详细日志
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 'cd /var/www/chinese-family-tree && PORT=8006 npm start'

端口被占用

# 查看端口占用
ssh root@115.190.235.230 'lsof -i :8006'

# 或使用 netstat
ssh root@115.190.235.230 'netstat -tulpn | grep 8006'

数据库连接失败

# 测试数据库连接
ssh root@115.190.235.230 'cd /var/www/chinese-family-tree && npx prisma db pull'

# 检查PostgreSQL状态
ssh root@115.190.235.230 'systemctl status postgresql'

📊 性能优化

使用PM2集群模式

ssh root@115.190.235.230
cd /var/www/chinese-family-tree
pm2 delete chinese-family-tree
PORT=8006 pm2 start npm --name "chinese-family-tree" -i max -- start
pm2 save

配置日志轮转

ssh root@115.190.235.230
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7

🔒 安全建议

  1. 修改默认密码:确保服务器root密码足够强
  2. 配置防火墙:只开放必要端口
  3. 定期更新:保持系统和依赖包最新
  4. 使用HTTPS:配置SSL证书(推荐使用Let's Encrypt
  5. 限制SSH访问:考虑使用fail2ban防止暴力破解
  6. 备份数据:定期备份数据库和应用文件

📦 备份方案

数据库备份

# 创建备份
ssh root@115.190.235.230 'pg_dump -U family_tree_user family_tree > /backup/db_$(date +%Y%m%d).sql'

# 下载备份到本地
scp root@115.190.235.230:/backup/db_*.sql ./backups/

应用文件备份

# 创建应用备份
ssh root@115.190.235.230 'tar -czf /backup/app_$(date +%Y%m%d).tar.gz /var/www/chinese-family-tree'

# 下载到本地
scp root@115.190.235.230:/backup/app_*.tar.gz ./backups/

📞 技术支持

如遇到问题,请检查:

  1. 服务器日志:/var/log/syslog/var/log/messages
  2. PM2日志:pm2 logs chinese-family-tree
  3. 应用日志:检查应用目录下的日志文件
  4. 数据库日志:PostgreSQL日志文件

最后更新: 2025-11-23