259 lines
6.4 KiB
Markdown
259 lines
6.4 KiB
Markdown
# 部署脚本检查报告
|
||
|
||
## ✅ 检查完成 - 脚本已优化
|
||
|
||
### 修复的问题
|
||
|
||
#### 1. ✅ 端口配置正确
|
||
- **SSH端口**: 22(标准SSH端口,用于连接服务器)
|
||
- **应用端口**: 8006(Next.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(优化版)
|
||
**状态**: ✅ 已通过检查,可以部署
|