14 KiB
14 KiB
🚀 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 更新系统
# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y
# CentOS
sudo yum update -y
1.2 安装必要软件
# 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
# 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
# 编辑 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
# 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+
# 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 创建虚拟环境
cd /var/www/AI_GirlFriend
python3 -m venv venv
source venv/bin/activate
3.3 安装 Python 依赖
cd lover
pip install -r requirements.txt
🗄️ 第四步:安装和配置 MySQL
4.1 安装 MySQL 8.0
# Ubuntu/Debian
sudo apt install -y mysql-server
# CentOS
sudo yum install -y mysql-server
4.2 启动 MySQL
sudo systemctl start mysql
sudo systemctl enable mysql
4.3 安全配置
sudo mysql_secure_installation
4.4 创建数据库和用户
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 导入数据库
# 导入 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
# Ubuntu/Debian
sudo apt install -y nginx
# CentOS
sudo yum install -y nginx
5.2 创建 Nginx 配置
sudo vim /etc/nginx/sites-available/aigirlfriend
5.3 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 启用配置
# 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 创建项目目录
sudo mkdir -p /var/www/AI_GirlFriend
sudo chown -R $USER:$USER /var/www/AI_GirlFriend
6.2 上传文件(使用 Git 或 FTP)
方法 1:使用 Git
cd /var/www
git clone https://your-repo-url.git AI_GirlFriend
方法 2:使用 SCP
# 在本地电脑执行
scp -r C:\Users\Administrator\Desktop\Project\AI_GirlFriend user@server-ip:/var/www/
方法 3:使用 FTP 工具
- 使用 FileZilla 或 WinSCP
- 上传整个项目文件夹
6.3 设置权限
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 后端
cd /var/www/AI_GirlFriend/xunifriend_RaeeC
# 编辑数据库配置
vim application/database.php
修改数据库配置:
return [
'type' => 'mysql',
'hostname' => '127.0.0.1',
'database' => 'fastadmin',
'username' => 'aiuser',
'password' => '你的数据库密码',
'hostport' => '3306',
'charset' => 'utf8mb4',
];
7.2 配置 Python 后端
cd /var/www/AI_GirlFriend/lover
# 创建 .env 文件
vim .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 服务文件
sudo vim /etc/systemd/system/aigirlfriend-python.service
8.2 服务文件内容
[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 启动服务
sudo systemctl daemon-reload
sudo systemctl start aigirlfriend-python
sudo systemctl enable aigirlfriend-python
sudo systemctl status aigirlfriend-python
🔥 第九步:配置防火墙
9.1 开放端口
# 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 地址
cd /var/www/AI_GirlFriend/xuniYou
vim utils/request.js
修改为生产环境地址:
// 生产环境
export const baseURL = 'http://your-domain.com:30100' // 或使用域名
export const baseURLPy = 'http://your-domain.com:30101'
10.2 编译 H5 版本
# 在本地开发机器上
cd xuniYou
npm install
npm run build:h5
10.3 上传 H5 文件
# 将 unpackage/dist/build/h5 目录上传到服务器
scp -r unpackage/dist/build/h5/* user@server-ip:/var/www/AI_GirlFriend/h5/
10.4 配置 Nginx 服务 H5
sudo vim /etc/nginx/sites-available/aigirlfriend-h5
添加配置:
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";
}
}
启用配置:
sudo ln -s /etc/nginx/sites-available/aigirlfriend-h5 /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
🔒 第十一步:配置 HTTPS(可选但推荐)
11.1 安装 Certbot
# Ubuntu/Debian
sudo apt install -y certbot python3-certbot-nginx
# CentOS
sudo yum install -y certbot python3-certbot-nginx
11.2 获取 SSL 证书
sudo certbot --nginx -d your-domain.com
11.3 自动续期
sudo certbot renew --dry-run
📊 第十二步:监控和日志
12.1 查看日志
# 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 性能监控
# 安装监控工具
sudo apt install -y htop iotop nethogs
# 查看资源使用
htop
🧪 第十三步:测试部署
13.1 测试 PHP 后端
curl http://your-domain.com:30100
13.2 测试 Python 后端
curl http://your-domain.com:30101/health
curl http://your-domain.com:30101/docs # API 文档
13.3 测试前端
# 在浏览器中访问
http://your-domain.com
🔧 常见问题排查
问题 1:502 Bad Gateway
# 检查 PHP-FPM 状态
sudo systemctl status php8.0-fpm
# 检查 Python 服务状态
sudo systemctl status aigirlfriend-python
# 查看错误日志
sudo tail -f /var/log/nginx/error.log
问题 2:数据库连接失败
# 检查 MySQL 状态
sudo systemctl status mysql
# 测试数据库连接
mysql -u aiuser -p fastadmin
问题 3:权限问题
# 重新设置权限
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 依赖问题
# 重新安装依赖
cd /var/www/AI_GirlFriend
source venv/bin/activate
pip install -r lover/requirements.txt --upgrade
🚀 性能优化建议
1. 启用 Gzip 压缩
在 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 缓存
# 安装 Redis
sudo apt install -y redis-server
sudo systemctl start redis
sudo systemctl enable redis
3. 使用 CDN
- 将静态资源上传到阿里云 OSS
- 配置 CDN 加速
4. 数据库优化
-- 添加索引
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 证书配置(可选)
- 所有服务测试通过
- 日志监控配置完成
📞 技术支持
如遇到问题,请检查:
- 服务器日志:
/var/log/nginx/,/var/log/aigirlfriend-python.log - 系统日志:
sudo journalctl -xe - 服务状态:
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