Files
AIGC/demo/DEPLOYMENT_CHECKLIST.md

673 lines
14 KiB
Markdown
Raw Normal View History

# 🚀 项目上线部署准备清单
本文档提供了项目上线前的完整准备清单和部署步骤。
## 📋 一、服务器环境准备
### 1.1 服务器要求
**最低配置:**
- CPU: 4核
- 内存: 8GB
- 磁盘: 100GB SSD
- 带宽: 10Mbps
**推荐配置支持50人并发**
- CPU: 4核
- 内存: 8GB
- 磁盘: 100GB+ SSD
- 带宽: 20Mbps
### 1.2 操作系统
- **Linux**: Ubuntu 20.04+ / CentOS 7+ / Debian 11+
- **Windows Server**: Windows Server 2019+
### 1.3 必需软件安装
```bash
# Java 21 (必需)
sudo apt update
sudo apt install openjdk-21-jdk
# 验证安装
java -version
# MySQL 8.0+ (必需)
sudo apt install mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql
# FFmpeg (视频拼接功能需要)
# Ubuntu/Debian
sudo apt install ffmpeg
# CentOS/RHEL
sudo yum install epel-release
sudo yum install ffmpeg
# 验证安装
ffmpeg -version
# Nginx (反向代理,推荐)
sudo apt install nginx
# Maven (构建项目)
sudo apt install maven
```
### 1.4 目录结构准备
```bash
# 创建应用目录
sudo mkdir -p /app/aigc-platform
sudo mkdir -p /app/aigc-platform/logs
sudo mkdir -p /app/aigc-platform/uploads
sudo mkdir -p /app/aigc-platform/temp
sudo mkdir -p /app/aigc-platform/config
# 设置权限
sudo chown -R $USER:$USER /app/aigc-platform
chmod -R 755 /app/aigc-platform
```
---
## 🗄️ 二、数据库准备
### 2.1 创建数据库
```sql
-- 登录MySQL
mysql -u root -p
-- 创建数据库
CREATE DATABASE aigc_platform CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建用户(推荐)
CREATE USER 'aigc_user'@'localhost' IDENTIFIED BY '强密码';
GRANT ALL PRIVILEGES ON aigc_platform.* TO 'aigc_user'@'localhost';
FLUSH PRIVILEGES;
-- 退出
EXIT;
```
### 2.2 数据库配置优化
编辑 `/etc/mysql/mysql.conf.d/mysqld.cnf`:
```ini
[mysqld]
# 字符集
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 连接数
max_connections=500
max_user_connections=400
# 缓冲池根据内存调整建议为内存的50-70%
# 8GB内存服务器建议设置为2-4G
innodb_buffer_pool_size=2G
# 日志
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow-query.log
long_query_time=2
```
重启MySQL:
```bash
sudo systemctl restart mysql
```
---
## ⚙️ 三、环境变量配置
### 3.1 创建环境变量文件
创建 `/app/aigc-platform/config/.env`:
```bash
# 数据库配置
export DB_URL="jdbc:mysql://localhost:3306/aigc_platform?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true"
export DB_USERNAME="aigc_user"
export DB_PASSWORD="你的数据库密码"
# JWT配置
export JWT_SECRET="生成一个至少128位的随机字符串"
export JWT_EXPIRATION="604800000"
# AI API配置可通过管理页面修改但建议先配置
export AI_API_BASE_URL="https://ai.comfly.chat"
export AI_API_KEY="你的Comfly API密钥"
export AI_IMAGE_API_BASE_URL="https://ai.comfly.chat"
export AI_IMAGE_API_KEY="你的Comfly API密钥文生图"
# 支付宝配置(如需支付功能)
export ALIPAY_APP_ID="你的支付宝应用ID"
export ALIPAY_PRIVATE_KEY="你的应用私钥RSA2格式完整内容"
export ALIPAY_PUBLIC_KEY="支付宝公钥RSA2格式完整内容"
export ALIPAY_NOTIFY_URL="https://yourdomain.com/api/payments/alipay/notify"
export ALIPAY_RETURN_URL="https://yourdomain.com/api/payments/alipay/return"
# 腾讯云SES配置如需邮件功能
export TENCENT_SES_SECRET_ID="你的SecretId"
export TENCENT_SES_SECRET_KEY="你的SecretKey"
export TENCENT_SES_FROM_EMAIL="你的发件邮箱"
export TENCENT_SES_TEMPLATE_ID="你的邮件模板ID"
# 文件路径配置
export FFMPEG_PATH="/usr/bin/ffmpeg"
export TEMP_DIR="/app/aigc-platform/temp"
export UPLOAD_PATH="/app/aigc-platform/uploads"
export LOG_FILE_PATH="/app/aigc-platform/logs/application.log"
```
### 3.2 生成JWT密钥
```bash
# 方法1使用OpenSSL
openssl rand -base64 64
# 方法2使用Python
python3 -c "import secrets; print(secrets.token_urlsafe(64))"
# 方法3在线生成
# 访问 https://www.random.org/strings/
```
### 3.3 加载环境变量
```bash
# 编辑 ~/.bashrc 或 ~/.profile
echo "source /app/aigc-platform/config/.env" >> ~/.bashrc
source ~/.bashrc
# 或创建 systemd service 时直接加载
```
---
## 📦 四、项目构建与部署
### 4.1 构建项目
```bash
# 进入项目目录
cd /path/to/AIGC/demo
# 清理并打包(跳过测试)
./mvnw clean package -DskipTests
# 或使用Maven
mvn clean package -DskipTests
# 打包后的JAR文件位置
# target/demo-0.0.1-SNAPSHOT.jar
```
### 4.2 上传文件到服务器
```bash
# 使用SCP上传
scp target/demo-0.0.1-SNAPSHOT.jar user@server:/app/aigc-platform/
# 或使用FTP/SFTP工具
```
### 4.3 前端构建
```bash
# 进入前端目录
cd frontend
# 安装依赖(如果还没有)
npm install
# 构建生产版本
npm run build
# 构建后的文件在 dist/ 目录
# 需要配置Nginx指向 dist/ 目录
```
---
## 🔧 五、应用配置
### 5.1 创建生产环境配置文件
在服务器上创建 `/app/aigc-platform/config/application-prod.properties`:
```properties
# 激活生产环境配置
spring.profiles.active=prod
# 数据库配置(使用环境变量)
spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}
# JWT配置
jwt.secret=${JWT_SECRET}
jwt.expiration=${JWT_EXPIRATION:604800000}
# 支付宝配置
alipay.app-id=${ALIPAY_APP_ID}
alipay.private-key=${ALIPAY_PRIVATE_KEY}
alipay.public-key=${ALIPAY_PUBLIC_KEY}
alipay.gateway-url=https://openapi.alipay.com/gateway.do
alipay.notify-url=${ALIPAY_NOTIFY_URL}
alipay.return-url=${ALIPAY_RETURN_URL}
# 腾讯云SES配置
tencent.ses.secret-id=${TENCENT_SES_SECRET_ID}
tencent.ses.secret-key=${TENCENT_SES_SECRET_KEY}
tencent.ses.from-email=${TENCENT_SES_FROM_EMAIL}
tencent.ses.template-id=${TENCENT_SES_TEMPLATE_ID}
# 文件路径
app.ffmpeg.path=${FFMPEG_PATH:ffmpeg}
app.temp.dir=${TEMP_DIR:./temp}
app.upload.path=${UPLOAD_PATH:./uploads}
# 日志
logging.file.name=${LOG_FILE_PATH:./logs/application.log}
```
### 5.2 创建Systemd服务Linux
创建 `/etc/systemd/system/aigc-platform.service`:
```ini
[Unit]
Description=AIGC Platform Application
After=network.target mysql.service
[Service]
Type=simple
User=your-user
WorkingDirectory=/app/aigc-platform
EnvironmentFile=/app/aigc-platform/config/.env
ExecStart=/usr/bin/java -jar \
-Xms1g \
-Xmx4g \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-Dspring.profiles.active=prod \
-Dspring.config.location=file:/app/aigc-platform/config/application-prod.properties \
/app/aigc-platform/demo-0.0.1-SNAPSHOT.jar
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=aigc-platform
[Install]
WantedBy=multi-user.target
```
启动服务:
```bash
sudo systemctl daemon-reload
sudo systemctl enable aigc-platform
sudo systemctl start aigc-platform
sudo systemctl status aigc-platform
```
查看日志:
```bash
sudo journalctl -u aigc-platform -f
```
---
## 🌐 六、Nginx反向代理配置
### 6.1 创建Nginx配置
创建 `/etc/nginx/sites-available/aigc-platform`:
```nginx
upstream aigc_backend {
server localhost:8080;
keepalive 32;
}
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
# 重定向到HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name yourdomain.com www.yourdomain.com;
# SSL证书配置
ssl_certificate /path/to/your/cert.pem;
ssl_certificate_key /path/to/your/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# 前端静态文件
root /path/to/frontend/dist;
index index.html;
# 前端路由
location / {
try_files $uri $uri/ /index.html;
}
# 后端API代理
location /api/ {
proxy_pass http://aigc_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
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;
proxy_cache_bypass $http_upgrade;
# 超时设置
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
# 文件上传代理(支持大文件)
location /uploads/ {
proxy_pass http://aigc_backend;
proxy_request_buffering off;
client_max_body_size 500M;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
# 日志
access_log /var/log/nginx/aigc-platform-access.log;
error_log /var/log/nginx/aigc-platform-error.log;
}
```
启用配置:
```bash
sudo ln -s /etc/nginx/sites-available/aigc-platform /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
```
### 6.2 SSL证书Let's Encrypt
```bash
# 安装Certbot
sudo apt install certbot python3-certbot-nginx
# 获取证书
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
# 自动续期
sudo certbot renew --dry-run
```
---
## 🔒 七、安全配置
### 7.1 防火墙配置
```bash
# UFW (Ubuntu)
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
# Firewalld (CentOS)
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
```
### 7.2 数据库安全
```sql
-- 删除匿名用户
DELETE FROM mysql.user WHERE User='';
-- 禁止root远程登录如果不需要
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
-- 刷新权限
FLUSH PRIVILEGES;
```
### 7.3 文件权限
```bash
# 配置文件权限
chmod 600 /app/aigc-platform/config/.env
chmod 600 /app/aigc-platform/config/application-prod.properties
# 日志目录权限
chmod 755 /app/aigc-platform/logs
```
---
## 📊 八、监控与日志
### 8.1 日志管理
```bash
# 配置日志轮转
sudo nano /etc/logrotate.d/aigc-platform
# 内容:
/app/aigc-platform/logs/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 0644 your-user your-user
}
```
### 8.2 监控脚本
创建 `/app/aigc-platform/scripts/health-check.sh`:
```bash
#!/bin/bash
HEALTH_URL="http://localhost:8080/api/health"
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" $HEALTH_URL)
if [ $RESPONSE -ne 200 ]; then
echo "Health check failed: $RESPONSE"
systemctl restart aigc-platform
fi
```
添加到crontab:
```bash
# 每5分钟检查一次
*/5 * * * * /app/aigc-platform/scripts/health-check.sh
```
---
## ✅ 九、上线前检查清单
### 9.1 配置检查
- [ ] 数据库连接配置正确
- [ ] JWT密钥已生成并配置
- [ ] AI API密钥已配置
- [ ] 支付宝配置(如需要)
- [ ] 腾讯云SES配置如需要
- [ ] FFmpeg路径正确
- [ ] 文件上传目录权限正确
- [ ] 日志目录权限正确
### 9.2 功能测试
- [ ] 用户注册/登录
- [ ] 文生视频功能
- [ ] 图生视频功能
- [ ] 分镜视频功能
- [ ] 支付功能(如需要)
- [ ] 邮件发送(如需要)
- [ ] 文件上传/下载
- [ ] 视频拼接功能
### 9.3 性能测试
- [ ] 并发测试建议使用JMeter
- [ ] 数据库连接池测试
- [ ] 内存使用监控
- [ ] CPU使用监控
- [ ] 磁盘空间监控
### 9.4 安全检查
- [ ] 防火墙已配置
- [ ] SSL证书已安装
- [ ] 敏感信息使用环境变量
- [ ] 数据库用户权限最小化
- [ ] 文件权限已设置
### 9.5 备份策略
- [ ] 数据库自动备份脚本
- [ ] 文件上传目录备份
- [ ] 配置文件备份
- [ ] 备份恢复测试
---
## 🔄 十、部署流程
### 10.1 首次部署
```bash
# 1. 准备服务器环境
# 2. 安装必需软件
# 3. 配置数据库
# 4. 配置环境变量
# 5. 构建项目
# 6. 上传文件
# 7. 配置Nginx
# 8. 启动服务
# 9. 测试功能
# 10. 配置监控
```
### 10.2 更新部署
```bash
# 1. 备份当前版本
cp demo-0.0.1-SNAPSHOT.jar demo-0.0.1-SNAPSHOT.jar.backup
# 2. 停止服务
sudo systemctl stop aigc-platform
# 3. 上传新版本
scp target/demo-0.0.1-SNAPSHOT.jar user@server:/app/aigc-platform/
# 4. 启动服务
sudo systemctl start aigc-platform
# 5. 检查状态
sudo systemctl status aigc-platform
sudo journalctl -u aigc-platform -f
```
---
## 🆘 十一、常见问题排查
### 11.1 应用无法启动
```bash
# 查看日志
sudo journalctl -u aigc-platform -n 100
# 检查Java版本
java -version
# 检查端口占用
sudo netstat -tlnp | grep 8080
# 检查环境变量
env | grep DB_
```
### 11.2 数据库连接失败
```bash
# 测试数据库连接
mysql -h localhost -u aigc_user -p aigc_platform
# 检查MySQL服务
sudo systemctl status mysql
# 检查防火墙
sudo ufw status
```
### 11.3 文件上传失败
```bash
# 检查目录权限
ls -la /app/aigc-platform/uploads
# 检查磁盘空间
df -h
# 检查Nginx配置
sudo nginx -t
```
---
## 📞 十二、技术支持
如遇到问题,请检查:
1. 应用日志:`/app/aigc-platform/logs/application.log`
2. 系统日志:`sudo journalctl -u aigc-platform`
3. Nginx日志`/var/log/nginx/aigc-platform-error.log`
4. MySQL日志`/var/log/mysql/error.log`
---
## 📝 十三、维护计划
### 日常维护
- **每日**: 检查日志、监控系统资源
- **每周**: 检查备份、清理临时文件
- **每月**: 更新依赖、安全补丁
### 定期任务
- **数据库备份**: 每天凌晨2点
- **日志清理**: 每天凌晨4点
- **任务清理**: 每天凌晨4点已配置定时任务
---
**祝部署顺利!** 🎉