691 lines
14 KiB
Markdown
691 lines
14 KiB
Markdown
# 🚀 AI 女友项目部署指南
|
||
|
||
## 📋 项目架构
|
||
|
||
- **PHP 后端**:FastAdmin + ThinkPHP(用户管理、基础功能)
|
||
- **Python 后端**:FastAPI(AI 功能、唱歌、跳舞等)
|
||
- **前端**:uni-app(H5/小程序/APP)
|
||
- **数据库**:MySQL
|
||
- **文件存储**:阿里云 OSS
|
||
|
||
## 🖥️ 服务器要求
|
||
|
||
### 最低配置
|
||
- CPU: 2核
|
||
- 内存: 4GB
|
||
- 硬盘: 40GB
|
||
- 带宽: 5Mbps
|
||
|
||
### 推荐配置
|
||
- CPU: 4核
|
||
- 内存: 8GB
|
||
- 硬盘: 100GB
|
||
- 带宽: 10Mbps
|
||
|
||
### 操作系统
|
||
- Ubuntu 20.04/22.04 LTS(推荐)
|
||
- CentOS 7/8
|
||
- Debian 10/11
|
||
|
||
---
|
||
|
||
## 📦 第一步:准备服务器环境
|
||
|
||
### 1.1 更新系统
|
||
```bash
|
||
# Ubuntu/Debian
|
||
sudo apt update && sudo apt upgrade -y
|
||
|
||
# CentOS
|
||
sudo yum update -y
|
||
```
|
||
|
||
### 1.2 安装必要软件
|
||
```bash
|
||
# Ubuntu/Debian
|
||
sudo apt install -y git curl wget vim unzip
|
||
|
||
# CentOS
|
||
sudo yum install -y git curl wget vim unzip
|
||
```
|
||
|
||
---
|
||
|
||
## 🐘 第二步:安装 PHP 环境
|
||
|
||
### 2.1 安装 PHP 8.0
|
||
```bash
|
||
# Ubuntu/Debian
|
||
sudo apt install -y software-properties-common
|
||
sudo add-apt-repository ppa:ondrej/php -y
|
||
sudo apt update
|
||
sudo apt install -y php8.0 php8.0-fpm php8.0-mysql php8.0-xml php8.0-mbstring \
|
||
php8.0-curl php8.0-zip php8.0-gd php8.0-bcmath php8.0-json
|
||
|
||
# CentOS
|
||
sudo yum install -y epel-release
|
||
sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
|
||
sudo yum module reset php -y
|
||
sudo yum module enable php:remi-8.0 -y
|
||
sudo yum install -y php php-fpm php-mysql php-xml php-mbstring \
|
||
php-curl php-zip php-gd php-bcmath php-json
|
||
```
|
||
|
||
### 2.2 配置 PHP
|
||
```bash
|
||
# 编辑 php.ini
|
||
sudo vim /etc/php/8.0/fpm/php.ini
|
||
|
||
# 修改以下配置
|
||
upload_max_filesize = 100M
|
||
post_max_size = 100M
|
||
max_execution_time = 300
|
||
memory_limit = 256M
|
||
```
|
||
|
||
### 2.3 启动 PHP-FPM
|
||
```bash
|
||
# Ubuntu/Debian
|
||
sudo systemctl start php8.0-fpm
|
||
sudo systemctl enable php8.0-fpm
|
||
|
||
# CentOS
|
||
sudo systemctl start php-fpm
|
||
sudo systemctl enable php-fpm
|
||
```
|
||
|
||
---
|
||
|
||
## 🐍 第三步:安装 Python 环境
|
||
|
||
### 3.1 安装 Python 3.10+
|
||
```bash
|
||
# Ubuntu/Debian
|
||
sudo apt install -y python3.10 python3.10-venv python3-pip
|
||
|
||
# CentOS
|
||
sudo yum install -y python3 python3-pip python3-devel
|
||
```
|
||
|
||
### 3.2 创建虚拟环境
|
||
```bash
|
||
cd /var/www/AI_GirlFriend
|
||
python3 -m venv venv
|
||
source venv/bin/activate
|
||
```
|
||
|
||
### 3.3 安装 Python 依赖
|
||
```bash
|
||
cd lover
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
---
|
||
|
||
## 🗄️ 第四步:安装和配置 MySQL
|
||
|
||
### 4.1 安装 MySQL 8.0
|
||
```bash
|
||
# Ubuntu/Debian
|
||
sudo apt install -y mysql-server
|
||
|
||
# CentOS
|
||
sudo yum install -y mysql-server
|
||
```
|
||
|
||
### 4.2 启动 MySQL
|
||
```bash
|
||
sudo systemctl start mysql
|
||
sudo systemctl enable mysql
|
||
```
|
||
|
||
### 4.3 安全配置
|
||
```bash
|
||
sudo mysql_secure_installation
|
||
```
|
||
|
||
### 4.4 创建数据库和用户
|
||
```bash
|
||
sudo mysql -u root -p
|
||
|
||
# 在 MySQL 中执行
|
||
CREATE DATABASE fastadmin CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
CREATE USER 'aiuser'@'localhost' IDENTIFIED BY '你的强密码';
|
||
GRANT ALL PRIVILEGES ON fastadmin.* TO 'aiuser'@'localhost';
|
||
FLUSH PRIVILEGES;
|
||
EXIT;
|
||
```
|
||
|
||
### 4.5 导入数据库
|
||
```bash
|
||
# 导入 PHP 后端数据库
|
||
mysql -u aiuser -p fastadmin < 归档/xunifriend.sql
|
||
|
||
# 执行音乐库迁移
|
||
mysql -u aiuser -p fastadmin < lover/migrations/add_music_library.sql
|
||
|
||
# 执行邀请码功能迁移
|
||
mysql -u aiuser -p fastadmin < lover/migrations/add_invite_fields.sql
|
||
```
|
||
|
||
---
|
||
|
||
## 🌐 第五步:安装和配置 Nginx
|
||
|
||
### 5.1 安装 Nginx
|
||
```bash
|
||
# Ubuntu/Debian
|
||
sudo apt install -y nginx
|
||
|
||
# CentOS
|
||
sudo yum install -y nginx
|
||
```
|
||
|
||
### 5.2 创建 Nginx 配置
|
||
```bash
|
||
sudo vim /etc/nginx/sites-available/aigirlfriend
|
||
```
|
||
|
||
### 5.3 Nginx 配置内容
|
||
```nginx
|
||
# PHP 后端配置
|
||
server {
|
||
listen 30100;
|
||
server_name your-domain.com; # 改为你的域名或 IP
|
||
|
||
root /var/www/AI_GirlFriend/xunifriend_RaeeC/public;
|
||
index index.php index.html;
|
||
|
||
# 日志
|
||
access_log /var/log/nginx/php_access.log;
|
||
error_log /var/log/nginx/php_error.log;
|
||
|
||
# PHP 处理
|
||
location / {
|
||
try_files $uri $uri/ /index.php?$query_string;
|
||
}
|
||
|
||
location ~ \.php$ {
|
||
fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
|
||
fastcgi_index index.php;
|
||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||
include fastcgi_params;
|
||
}
|
||
|
||
# 静态文件
|
||
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
|
||
expires 30d;
|
||
add_header Cache-Control "public, immutable";
|
||
}
|
||
|
||
# 禁止访问隐藏文件
|
||
location ~ /\. {
|
||
deny all;
|
||
}
|
||
}
|
||
|
||
# Python 后端配置
|
||
server {
|
||
listen 30101;
|
||
server_name your-domain.com; # 改为你的域名或 IP
|
||
|
||
# 日志
|
||
access_log /var/log/nginx/python_access.log;
|
||
error_log /var/log/nginx/python_error.log;
|
||
|
||
# 反向代理到 Python 应用
|
||
location / {
|
||
proxy_pass http://127.0.0.1:8000;
|
||
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;
|
||
|
||
# WebSocket 支持
|
||
proxy_http_version 1.1;
|
||
proxy_set_header Upgrade $http_upgrade;
|
||
proxy_set_header Connection "upgrade";
|
||
|
||
# 超时设置
|
||
proxy_connect_timeout 300s;
|
||
proxy_send_timeout 300s;
|
||
proxy_read_timeout 300s;
|
||
}
|
||
|
||
# 静态文件(如果有)
|
||
location /static/ {
|
||
alias /var/www/AI_GirlFriend/lover/static/;
|
||
}
|
||
}
|
||
```
|
||
|
||
### 5.4 启用配置
|
||
```bash
|
||
# Ubuntu/Debian
|
||
sudo ln -s /etc/nginx/sites-available/aigirlfriend /etc/nginx/sites-enabled/
|
||
sudo nginx -t
|
||
sudo systemctl restart nginx
|
||
|
||
# CentOS
|
||
sudo cp /etc/nginx/sites-available/aigirlfriend /etc/nginx/conf.d/aigirlfriend.conf
|
||
sudo nginx -t
|
||
sudo systemctl restart nginx
|
||
```
|
||
|
||
---
|
||
|
||
## 📁 第六步:上传项目文件
|
||
|
||
### 6.1 创建项目目录
|
||
```bash
|
||
sudo mkdir -p /var/www/AI_GirlFriend
|
||
sudo chown -R $USER:$USER /var/www/AI_GirlFriend
|
||
```
|
||
|
||
### 6.2 上传文件(使用 Git 或 FTP)
|
||
|
||
**方法 1:使用 Git**
|
||
```bash
|
||
cd /var/www
|
||
git clone https://your-repo-url.git AI_GirlFriend
|
||
```
|
||
|
||
**方法 2:使用 SCP**
|
||
```bash
|
||
# 在本地电脑执行
|
||
scp -r C:\Users\Administrator\Desktop\Project\AI_GirlFriend user@server-ip:/var/www/
|
||
```
|
||
|
||
**方法 3:使用 FTP 工具**
|
||
- 使用 FileZilla 或 WinSCP
|
||
- 上传整个项目文件夹
|
||
|
||
### 6.3 设置权限
|
||
```bash
|
||
cd /var/www/AI_GirlFriend
|
||
|
||
# PHP 项目权限
|
||
sudo chown -R www-data:www-data xunifriend_RaeeC/
|
||
sudo chmod -R 755 xunifriend_RaeeC/
|
||
sudo chmod -R 777 xunifriend_RaeeC/runtime/
|
||
sudo chmod -R 777 xunifriend_RaeeC/public/uploads/
|
||
|
||
# Python 项目权限
|
||
sudo chown -R $USER:$USER lover/
|
||
sudo chmod -R 755 lover/
|
||
sudo mkdir -p public/tts public/music
|
||
sudo chmod -R 777 public/
|
||
```
|
||
|
||
---
|
||
|
||
## ⚙️ 第七步:配置环境变量
|
||
|
||
### 7.1 配置 PHP 后端
|
||
```bash
|
||
cd /var/www/AI_GirlFriend/xunifriend_RaeeC
|
||
|
||
# 编辑数据库配置
|
||
vim application/database.php
|
||
```
|
||
|
||
修改数据库配置:
|
||
```php
|
||
return [
|
||
'type' => 'mysql',
|
||
'hostname' => '127.0.0.1',
|
||
'database' => 'fastadmin',
|
||
'username' => 'aiuser',
|
||
'password' => '你的数据库密码',
|
||
'hostport' => '3306',
|
||
'charset' => 'utf8mb4',
|
||
];
|
||
```
|
||
|
||
### 7.2 配置 Python 后端
|
||
```bash
|
||
cd /var/www/AI_GirlFriend/lover
|
||
|
||
# 创建 .env 文件
|
||
vim .env
|
||
```
|
||
|
||
.env 文件内容:
|
||
```env
|
||
# 应用配置
|
||
APP_ENV=production
|
||
DEBUG=False
|
||
|
||
# 数据库配置
|
||
DB_HOST=127.0.0.1
|
||
DB_PORT=3306
|
||
DB_USER=aiuser
|
||
DB_PASSWORD=你的数据库密码
|
||
DB_NAME=fastadmin
|
||
|
||
# JWT 配置
|
||
JWT_SECRET_KEY=你的随机密钥(至少32位)
|
||
JWT_ALGORITHM=HS256
|
||
JWT_EXPIRE_MINUTES=43200
|
||
|
||
# DashScope API(阿里云通义千问)
|
||
DASHSCOPE_API_KEY=sk-2473385fd6d54a58a703ce6b92a62074
|
||
|
||
# 阿里云 OSS 配置
|
||
OSS_ACCESS_KEY_ID=LTAI5tBzjogJDx4JzRYoDyEM
|
||
OSS_ACCESS_KEY_SECRET=43euicRkkzlLjGTYzFYkTupcW7N5w3
|
||
OSS_BUCKET=hello12312312
|
||
OSS_ENDPOINT=https://oss-cn-hangzhou.aliyuncs.com
|
||
CDN_DOMAIN=https://hello12312312.oss-cn-hangzhou.aliyuncs.com
|
||
```
|
||
|
||
---
|
||
|
||
## 🔄 第八步:配置 Systemd 服务(Python 后端)
|
||
|
||
### 8.1 创建 Systemd 服务文件
|
||
```bash
|
||
sudo vim /etc/systemd/system/aigirlfriend-python.service
|
||
```
|
||
|
||
### 8.2 服务文件内容
|
||
```ini
|
||
[Unit]
|
||
Description=AI GirlFriend Python Backend
|
||
After=network.target mysql.service
|
||
|
||
[Service]
|
||
Type=simple
|
||
User=www-data
|
||
Group=www-data
|
||
WorkingDirectory=/var/www/AI_GirlFriend
|
||
Environment="PATH=/var/www/AI_GirlFriend/venv/bin"
|
||
ExecStart=/var/www/AI_GirlFriend/venv/bin/uvicorn lover.main:app --host 0.0.0.0 --port 8000 --workers 4
|
||
Restart=always
|
||
RestartSec=10
|
||
|
||
# 日志
|
||
StandardOutput=append:/var/log/aigirlfriend-python.log
|
||
StandardError=append:/var/log/aigirlfriend-python-error.log
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
```
|
||
|
||
### 8.3 启动服务
|
||
```bash
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl start aigirlfriend-python
|
||
sudo systemctl enable aigirlfriend-python
|
||
sudo systemctl status aigirlfriend-python
|
||
```
|
||
|
||
---
|
||
|
||
## 🔥 第九步:配置防火墙
|
||
|
||
### 9.1 开放端口
|
||
```bash
|
||
# Ubuntu/Debian (UFW)
|
||
sudo ufw allow 30100/tcp
|
||
sudo ufw allow 30101/tcp
|
||
sudo ufw allow 80/tcp
|
||
sudo ufw allow 443/tcp
|
||
sudo ufw enable
|
||
|
||
# CentOS (Firewalld)
|
||
sudo firewall-cmd --permanent --add-port=30100/tcp
|
||
sudo firewall-cmd --permanent --add-port=30101/tcp
|
||
sudo firewall-cmd --permanent --add-port=80/tcp
|
||
sudo firewall-cmd --permanent --add-port=443/tcp
|
||
sudo firewall-cmd --reload
|
||
```
|
||
|
||
---
|
||
|
||
## 📱 第十步:部署前端
|
||
|
||
### 10.1 修改 API 地址
|
||
```bash
|
||
cd /var/www/AI_GirlFriend/xuniYou
|
||
vim utils/request.js
|
||
```
|
||
|
||
修改为生产环境地址:
|
||
```javascript
|
||
// 生产环境
|
||
export const baseURL = 'http://your-domain.com:30100' // 或使用域名
|
||
export const baseURLPy = 'http://your-domain.com:30101'
|
||
```
|
||
|
||
### 10.2 编译 H5 版本
|
||
```bash
|
||
# 在本地开发机器上
|
||
cd xuniYou
|
||
npm install
|
||
npm run build:h5
|
||
```
|
||
|
||
### 10.3 上传 H5 文件
|
||
```bash
|
||
# 将 unpackage/dist/build/h5 目录上传到服务器
|
||
scp -r unpackage/dist/build/h5/* user@server-ip:/var/www/AI_GirlFriend/h5/
|
||
```
|
||
|
||
### 10.4 配置 Nginx 服务 H5
|
||
```bash
|
||
sudo vim /etc/nginx/sites-available/aigirlfriend-h5
|
||
```
|
||
|
||
添加配置:
|
||
```nginx
|
||
server {
|
||
listen 80;
|
||
server_name your-domain.com;
|
||
|
||
root /var/www/AI_GirlFriend/h5;
|
||
index index.html;
|
||
|
||
location / {
|
||
try_files $uri $uri/ /index.html;
|
||
}
|
||
|
||
# 静态资源缓存
|
||
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
|
||
expires 30d;
|
||
add_header Cache-Control "public, immutable";
|
||
}
|
||
}
|
||
```
|
||
|
||
启用配置:
|
||
```bash
|
||
sudo ln -s /etc/nginx/sites-available/aigirlfriend-h5 /etc/nginx/sites-enabled/
|
||
sudo nginx -t
|
||
sudo systemctl reload nginx
|
||
```
|
||
|
||
---
|
||
|
||
## 🔒 第十一步:配置 HTTPS(可选但推荐)
|
||
|
||
### 11.1 安装 Certbot
|
||
```bash
|
||
# Ubuntu/Debian
|
||
sudo apt install -y certbot python3-certbot-nginx
|
||
|
||
# CentOS
|
||
sudo yum install -y certbot python3-certbot-nginx
|
||
```
|
||
|
||
### 11.2 获取 SSL 证书
|
||
```bash
|
||
sudo certbot --nginx -d your-domain.com
|
||
```
|
||
|
||
### 11.3 自动续期
|
||
```bash
|
||
sudo certbot renew --dry-run
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 第十二步:监控和日志
|
||
|
||
### 12.1 查看日志
|
||
```bash
|
||
# Nginx 日志
|
||
sudo tail -f /var/log/nginx/php_access.log
|
||
sudo tail -f /var/log/nginx/python_access.log
|
||
|
||
# Python 应用日志
|
||
sudo tail -f /var/log/aigirlfriend-python.log
|
||
|
||
# PHP 日志
|
||
sudo tail -f /var/log/php8.0-fpm.log
|
||
|
||
# 系统日志
|
||
sudo journalctl -u aigirlfriend-python -f
|
||
```
|
||
|
||
### 12.2 性能监控
|
||
```bash
|
||
# 安装监控工具
|
||
sudo apt install -y htop iotop nethogs
|
||
|
||
# 查看资源使用
|
||
htop
|
||
```
|
||
|
||
---
|
||
|
||
## 🧪 第十三步:测试部署
|
||
|
||
### 13.1 测试 PHP 后端
|
||
```bash
|
||
curl http://your-domain.com:30100
|
||
```
|
||
|
||
### 13.2 测试 Python 后端
|
||
```bash
|
||
curl http://your-domain.com:30101/health
|
||
curl http://your-domain.com:30101/docs # API 文档
|
||
```
|
||
|
||
### 13.3 测试前端
|
||
```bash
|
||
# 在浏览器中访问
|
||
http://your-domain.com
|
||
```
|
||
|
||
---
|
||
|
||
## 🔧 常见问题排查
|
||
|
||
### 问题 1:502 Bad Gateway
|
||
```bash
|
||
# 检查 PHP-FPM 状态
|
||
sudo systemctl status php8.0-fpm
|
||
|
||
# 检查 Python 服务状态
|
||
sudo systemctl status aigirlfriend-python
|
||
|
||
# 查看错误日志
|
||
sudo tail -f /var/log/nginx/error.log
|
||
```
|
||
|
||
### 问题 2:数据库连接失败
|
||
```bash
|
||
# 检查 MySQL 状态
|
||
sudo systemctl status mysql
|
||
|
||
# 测试数据库连接
|
||
mysql -u aiuser -p fastadmin
|
||
```
|
||
|
||
### 问题 3:权限问题
|
||
```bash
|
||
# 重新设置权限
|
||
sudo chown -R www-data:www-data /var/www/AI_GirlFriend/xunifriend_RaeeC/
|
||
sudo chmod -R 777 /var/www/AI_GirlFriend/xunifriend_RaeeC/runtime/
|
||
sudo chmod -R 777 /var/www/AI_GirlFriend/public/
|
||
```
|
||
|
||
### 问题 4:Python 依赖问题
|
||
```bash
|
||
# 重新安装依赖
|
||
cd /var/www/AI_GirlFriend
|
||
source venv/bin/activate
|
||
pip install -r lover/requirements.txt --upgrade
|
||
```
|
||
|
||
---
|
||
|
||
## 🚀 性能优化建议
|
||
|
||
### 1. 启用 Gzip 压缩
|
||
在 Nginx 配置中添加:
|
||
```nginx
|
||
gzip on;
|
||
gzip_vary on;
|
||
gzip_min_length 1024;
|
||
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml+rss application/json;
|
||
```
|
||
|
||
### 2. 配置 Redis 缓存
|
||
```bash
|
||
# 安装 Redis
|
||
sudo apt install -y redis-server
|
||
sudo systemctl start redis
|
||
sudo systemctl enable redis
|
||
```
|
||
|
||
### 3. 使用 CDN
|
||
- 将静态资源上传到阿里云 OSS
|
||
- 配置 CDN 加速
|
||
|
||
### 4. 数据库优化
|
||
```sql
|
||
-- 添加索引
|
||
ALTER TABLE nf_user ADD INDEX idx_token (token);
|
||
ALTER TABLE nf_chat_message ADD INDEX idx_user_session (user_id, session_id);
|
||
```
|
||
|
||
---
|
||
|
||
## 📋 部署检查清单
|
||
|
||
- [ ] 服务器环境准备完成
|
||
- [ ] PHP 8.0 安装并配置
|
||
- [ ] Python 3.10+ 安装并配置
|
||
- [ ] MySQL 8.0 安装并配置
|
||
- [ ] Nginx 安装并配置
|
||
- [ ] 项目文件上传完成
|
||
- [ ] 数据库导入完成
|
||
- [ ] 环境变量配置完成
|
||
- [ ] Systemd 服务配置完成
|
||
- [ ] 防火墙端口开放
|
||
- [ ] 前端编译并部署
|
||
- [ ] HTTPS 证书配置(可选)
|
||
- [ ] 所有服务测试通过
|
||
- [ ] 日志监控配置完成
|
||
|
||
---
|
||
|
||
## 📞 技术支持
|
||
|
||
如遇到问题,请检查:
|
||
1. 服务器日志:`/var/log/nginx/`, `/var/log/aigirlfriend-python.log`
|
||
2. 系统日志:`sudo journalctl -xe`
|
||
3. 服务状态:`sudo systemctl status [service-name]`
|
||
|
||
---
|
||
|
||
**部署完成!** 🎉
|
||
|
||
访问地址:
|
||
- 前端:http://your-domain.com
|
||
- PHP 后端:http://your-domain.com:30100
|
||
- Python 后端:http://your-domain.com:30101
|
||
- API 文档:http://your-domain.com:30101/docs
|