# 部署说明 ## ✅ 免密登录已配置成功 SSH免密登录已成功配置到服务器 `115.190.235.230` ## 📋 配置信息 - **服务器IP**: 115.190.235.230 - **SSH端口**: 22(标准SSH端口) - **应用端口**: 8006(Next.js应用对外访问端口) - **SSH用户**: root - **部署目录**: /var/www/chinese-family-tree ## 🚀 一键部署 现在可以直接运行部署脚本,无需输入密码: ```bash ./deploy.sh ``` ## 📝 部署流程 脚本会自动完成以下步骤: 1. ✓ 检查SSH密钥 2. ✓ 测试服务器连接 3. ✓ 配置免密登录(已完成) 4. ✓ 本地构建项目 5. ✓ 配置服务器环境(安装Node.js、pnpm、PM2) 6. ✓ 上传文件到服务器 7. ✓ 启动应用(监听8006端口) ## 🌐 访问地址 部署成功后,应用访问地址: ``` http://115.190.235.230:8006 ``` ## 🔧 常用管理命令 ### 查看应用状态 ```bash ssh root@115.190.235.230 'pm2 status' ``` ### 查看应用日志 ```bash ssh root@115.190.235.230 'pm2 logs chinese-family-tree' ``` ### 重启应用 ```bash ssh root@115.190.235.230 'pm2 restart chinese-family-tree' ``` ### 停止应用 ```bash ssh root@115.190.235.230 'pm2 stop chinese-family-tree' ``` ### 查看实时日志 ```bash ssh root@115.190.235.230 'pm2 logs chinese-family-tree --lines 100' ``` ## ⚙️ 服务器环境变量配置 在首次部署前,需要在服务器上配置 `.env` 文件: ```bash # 登录服务器 ssh root@115.190.235.230 # 进入部署目录 cd /var/www/chinese-family-tree # 创建环境变量文件 nano .env ``` 添加以下内容(根据实际情况修改): ```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 ```bash # 登录服务器 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`: ```env DATABASE_URL="postgresql://family_tree_user:your_secure_password@localhost:5432/family_tree" ``` ## 🔥 防火墙配置 确保服务器防火墙开放必要端口: ```bash # 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 ``` ## 🔄 更新部署 当代码有更新时,直接运行部署脚本即可: ```bash ./deploy.sh ``` 脚本会自动: 1. 构建最新代码 2. 上传到服务器 3. 安装依赖 4. 运行数据库迁移 5. 重启应用 ## 🐛 故障排查 ### 应用无法启动 ```bash # 查看详细日志 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' ``` ### 端口被占用 ```bash # 查看端口占用 ssh root@115.190.235.230 'lsof -i :8006' # 或使用 netstat ssh root@115.190.235.230 'netstat -tulpn | grep 8006' ``` ### 数据库连接失败 ```bash # 测试数据库连接 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集群模式 ```bash 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 ``` ### 配置日志轮转 ```bash 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. **备份数据**:定期备份数据库和应用文件 ## 📦 备份方案 ### 数据库备份 ```bash # 创建备份 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/ ``` ### 应用文件备份 ```bash # 创建应用备份 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