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

259 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 部署脚本检查报告
## ✅ 检查完成 - 脚本已优化
### 修复的问题
#### 1. ✅ 端口配置正确
- **SSH端口**: 22(标准SSH端口,用于连接服务器)
- **应用端口**: 8006Next.js应用对外访问端口)
- 所有SSH命令使用 `$SSH_PORT`22
- PM2启动时使用 `PORT=$APP_PORT`8006
#### 2. ✅ PostgreSQL权限完善
增强了数据库权限配置,兼容PostgreSQL 15+
```sql
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启动优化
```bash
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端口)
- 配置开机自启动
## 🔧 配置信息
### 服务器配置
```bash
SERVER_IP="115.190.235.230"
SSH_PORT="22" # SSH连接端口
SERVER_USER="root"
REMOTE_DIR="/var/www/chinese-family-tree"
APP_PORT="8006" # 应用访问端口
```
### 数据库配置
```bash
DB_NAME="family_tree"
DB_USER="family_tree_user"
DB_PASSWORD="FamilyTree2024!@#" # 建议修改
```
### 自动生成的.env文件
```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. 部署前检查
```bash
# 检查本地环境
pnpm --version
node --version
# 测试SSH连接
ssh root@115.190.235.230
# 检查免密登录
ssh -o BatchMode=yes root@115.190.235.230 "echo OK"
```
### 2. 执行部署
```bash
./deploy.sh
```
### 3. 访问应用
```
http://115.190.235.230:8006
```
## ⚠️ 重要提示
### 1. 数据库密码安全
**强烈建议**在首次部署前修改数据库密码:
```bash
# 编辑 deploy.sh 第13行
DB_PASSWORD="你的复杂密码"
```
### 2. 防火墙配置
确保服务器防火墙开放端口8006
```bash
# 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'`
## 🛠️ 常用管理命令
```bash
# 查看应用状态
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进程管理
- ✅ 免密登录已配置
### 🎯 下一步
直接运行部署:
```bash
./deploy.sh
```
---
**检查时间**: 2025-11-23 18:20
**脚本版本**: v1.0(优化版)
**状态**: ✅ 已通过检查,可以部署