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

5.8 KiB
Raw Blame History

部署指南

快速部署

1. 准备工作

在部署前,请确保:

  1. 服务器要求

    • 操作系统:Ubuntu 20.04+ / CentOS 7+ / Debian 10+
    • 内存:至少 2GB RAM
    • 磁盘:至少 10GB 可用空间
    • 已安装 PostgreSQL 数据库
  2. 本地环境

    • 已安装 Node.js 18+
    • 已安装 pnpm
    • 已配置好 .env 文件

2. 配置服务器信息

编辑 deploy.sh 文件,修改以下配置:

SERVER_IP="115.190.235.230"      # 服务器IP
SERVER_PORT="8006"               # SSH端口
SERVER_USER="root"               # SSH用户名(根据实际情况修改)
REMOTE_DIR="/var/www/chinese-family-tree"  # 部署目录
APP_PORT="3000"                  # 应用端口

3. 配置服务器环境变量

在服务器上创建 .env 文件:

ssh -p 8006 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:3000"
NEXTAUTH_SECRET="your-production-secret-key-here"

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

# 生产环境
NODE_ENV="production"

4. 执行部署

# 给脚本添加执行权限
chmod +x deploy.sh

# 执行部署
./deploy.sh

5. 部署流程说明

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

  1. ✓ 检查并创建SSH密钥
  2. ✓ 配置免密登录(首次需要输入服务器密码)
  3. ✓ 测试SSH连接
  4. ✓ 本地构建项目
  5. ✓ 配置服务器环境(安装Node.js、pnpm、PM2
  6. ✓ 上传文件到服务器
  7. ✓ 启动应用

常用命令

查看应用状态

ssh -p 8006 root@115.190.235.230 'pm2 status'

查看应用日志

ssh -p 8006 root@115.190.235.230 'pm2 logs chinese-family-tree'

重启应用

ssh -p 8006 root@115.190.235.230 'pm2 restart chinese-family-tree'

停止应用

ssh -p 8006 root@115.190.235.230 'pm2 stop chinese-family-tree'

更新部署

# 直接运行部署脚本即可
./deploy.sh

Nginx 反向代理配置(可选)

如果需要使用域名访问或配置HTTPS,可以安装Nginx:

# 在服务器上安装Nginx
apt-get update
apt-get install -y nginx

# 创建配置文件
nano /etc/nginx/sites-available/chinese-family-tree

添加以下配置:

server {
    listen 80;
    server_name your-domain.com;  # 替换为你的域名

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        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;
    }
}

启用配置:

ln -s /etc/nginx/sites-available/chinese-family-tree /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx

防火墙配置

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

# Ubuntu/Debian
ufw allow 8006/tcp  # SSH端口
ufw allow 3000/tcp  # 应用端口
ufw allow 80/tcp    # HTTP(如果使用Nginx
ufw allow 443/tcp   # HTTPS(如果使用Nginx

# CentOS
firewall-cmd --permanent --add-port=8006/tcp
firewall-cmd --permanent --add-port=3000/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload

数据库配置

PostgreSQL 安装和配置

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

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

# 允许远程连接(如果需要)
nano /etc/postgresql/*/main/postgresql.conf
# 修改:listen_addresses = '*'

nano /etc/postgresql/*/main/pg_hba.conf
# 添加:host all all 0.0.0.0/0 md5

# 重启PostgreSQL
systemctl restart postgresql

故障排查

应用无法启动

# 查看详细日志
ssh -p 8006 root@115.190.235.230 'pm2 logs chinese-family-tree --lines 100'

# 检查环境变量
ssh -p 8006 root@115.190.235.230 'cd /var/www/chinese-family-tree && cat .env'

# 手动启动测试
ssh -p 8006 root@115.190.235.230 'cd /var/www/chinese-family-tree && npm start'

数据库连接失败

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

端口被占用

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

# 杀死占用进程
ssh -p 8006 root@115.190.235.230 'kill -9 <PID>'

性能优化建议

  1. 启用 PM2 集群模式

    pm2 start npm --name "chinese-family-tree" -i max -- start
    
  2. 配置日志轮转

    pm2 install pm2-logrotate
    pm2 set pm2-logrotate:max_size 10M
    pm2 set pm2-logrotate:retain 7
    
  3. 监控应用

    pm2 install pm2-server-monit
    

安全建议

  1. 定期更新系统和依赖包
  2. 使用强密码和密钥认证
  3. 配置防火墙规则
  4. 定期备份数据库
  5. 使用 HTTPS(配置 SSL 证书)
  6. 限制 SSH 登录尝试次数

备份和恢复

数据库备份

ssh -p 8006 root@115.190.235.230 'pg_dump -U family_tree_user family_tree > backup_$(date +%Y%m%d).sql'

数据库恢复

ssh -p 8006 root@115.190.235.230 'psql -U family_tree_user family_tree < backup_20240101.sql'

文件备份

ssh -p 8006 root@115.190.235.230 'tar -czf /backup/app_$(date +%Y%m%d).tar.gz /var/www/chinese-family-tree'