Files
AIGC/demo/DEPLOYMENT_CHECKLIST.md
AIGC Developer 1e71ae6a26 feat: 系统优化和功能完善
主要更新:
- 调整并发配置为50人(数据库连接池30,Tomcat线程150,异步线程池5/20)
- 实现无界阻塞队列(LinkedBlockingQueue)任务处理
- 实现分镜视频保存功能(保存到uploads目录)
- 统一管理页面导航栏和右上角样式
- 添加日活用户统计功能
- 优化视频拼接和保存逻辑
- 添加部署文档和快速部署指南
- 更新.gitignore排除敏感配置文件
2025-11-07 19:09:50 +08:00

673 lines
14 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.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点已配置定时任务
---
**祝部署顺利!** 🎉