初始化
This commit is contained in:
345
deploy/README.md
Normal file
345
deploy/README.md
Normal file
@@ -0,0 +1,345 @@
|
||||
# WPS Bot Game 部署指南
|
||||
|
||||
## 📋 前置要求
|
||||
|
||||
- Ubuntu 20.04+ 服务器
|
||||
- Python 3.10+(建议使用conda)
|
||||
- 1GB内存 + 单核CPU
|
||||
- sudo权限
|
||||
|
||||
## 🚀 快速部署
|
||||
|
||||
### 1. 上传项目到服务器
|
||||
|
||||
```bash
|
||||
# 方式1: 使用scp
|
||||
scp -r WPSBotGame/ user@server:/opt/wps-bot
|
||||
|
||||
# 方式2: 使用git
|
||||
cd /opt
|
||||
git clone <your-repo-url> wps-bot
|
||||
```
|
||||
|
||||
### 2. 运行安装脚本
|
||||
|
||||
```bash
|
||||
cd /opt/wps-bot
|
||||
chmod +x deploy/install.sh
|
||||
sudo bash deploy/install.sh
|
||||
```
|
||||
|
||||
安装脚本会自动完成:
|
||||
- ✅ 检查环境
|
||||
- ✅ 安装依赖
|
||||
- ✅ 创建数据目录
|
||||
- ✅ 配置systemd服务
|
||||
|
||||
### 3. 配置环境变量
|
||||
|
||||
```bash
|
||||
# 编辑配置文件
|
||||
sudo nano /opt/wps-bot/.env
|
||||
|
||||
# 修改Webhook URL
|
||||
WEBHOOK_URL=https://xz.wps.cn/api/v1/webhook/send?key=你的密钥
|
||||
```
|
||||
|
||||
### 4. 启动服务
|
||||
|
||||
```bash
|
||||
# 使用管理脚本(推荐)
|
||||
chmod +x deploy/manage.sh
|
||||
./deploy/manage.sh start
|
||||
|
||||
# 或直接使用systemctl
|
||||
sudo systemctl start wps-bot
|
||||
sudo systemctl status wps-bot
|
||||
```
|
||||
|
||||
### 5. 配置开机自启
|
||||
|
||||
```bash
|
||||
./deploy/manage.sh enable
|
||||
# 或
|
||||
sudo systemctl enable wps-bot
|
||||
```
|
||||
|
||||
## 🛠️ 服务管理
|
||||
|
||||
### 使用管理脚本(推荐)
|
||||
|
||||
```bash
|
||||
cd /opt/wps-bot
|
||||
|
||||
# 启动服务
|
||||
./deploy/manage.sh start
|
||||
|
||||
# 停止服务
|
||||
./deploy/manage.sh stop
|
||||
|
||||
# 重启服务
|
||||
./deploy/manage.sh restart
|
||||
|
||||
# 查看状态
|
||||
./deploy/manage.sh status
|
||||
|
||||
# 查看实时日志
|
||||
./deploy/manage.sh logs
|
||||
|
||||
# 启用开机自启
|
||||
./deploy/manage.sh enable
|
||||
|
||||
# 禁用开机自启
|
||||
./deploy/manage.sh disable
|
||||
|
||||
# 更新代码并重启
|
||||
./deploy/manage.sh update
|
||||
```
|
||||
|
||||
### 使用systemctl命令
|
||||
|
||||
```bash
|
||||
# 启动服务
|
||||
sudo systemctl start wps-bot
|
||||
|
||||
# 停止服务
|
||||
sudo systemctl stop wps-bot
|
||||
|
||||
# 重启服务
|
||||
sudo systemctl restart wps-bot
|
||||
|
||||
# 查看状态
|
||||
sudo systemctl status wps-bot
|
||||
|
||||
# 启用开机自启
|
||||
sudo systemctl enable wps-bot
|
||||
|
||||
# 禁用开机自启
|
||||
sudo systemctl disable wps-bot
|
||||
|
||||
# 查看日志
|
||||
sudo journalctl -u wps-bot -f
|
||||
|
||||
# 查看最近100行日志
|
||||
sudo journalctl -u wps-bot -n 100
|
||||
|
||||
# 查看今天的日志
|
||||
sudo journalctl -u wps-bot --since today
|
||||
```
|
||||
|
||||
## 📊 监控和调试
|
||||
|
||||
### 查看系统状态
|
||||
|
||||
```bash
|
||||
# 方式1: 通过API
|
||||
curl http://localhost:8000/stats
|
||||
|
||||
# 方式2: 通过日志
|
||||
sudo journalctl -u wps-bot | grep "memory_mb"
|
||||
```
|
||||
|
||||
### 常用调试命令
|
||||
|
||||
```bash
|
||||
# 查看服务是否运行
|
||||
sudo systemctl is-active wps-bot
|
||||
|
||||
# 查看服务是否开机自启
|
||||
sudo systemctl is-enabled wps-bot
|
||||
|
||||
# 查看端口占用
|
||||
sudo netstat -tlnp | grep 8000
|
||||
|
||||
# 查看进程
|
||||
ps aux | grep python
|
||||
|
||||
# 查看数据库
|
||||
sqlite3 /opt/wps-bot/data/bot.db "SELECT * FROM users;"
|
||||
```
|
||||
|
||||
### 日志分析
|
||||
|
||||
```bash
|
||||
# 查看错误日志
|
||||
sudo journalctl -u wps-bot -p err
|
||||
|
||||
# 查看特定时间段的日志
|
||||
sudo journalctl -u wps-bot --since "2025-10-28 10:00:00" --until "2025-10-28 11:00:00"
|
||||
|
||||
# 导出日志到文件
|
||||
sudo journalctl -u wps-bot > /tmp/wps-bot.log
|
||||
```
|
||||
|
||||
## 🔧 配置WPS Callback
|
||||
|
||||
### 获取服务器地址
|
||||
|
||||
```bash
|
||||
# 查看服务器公网IP
|
||||
curl ifconfig.me
|
||||
|
||||
# 或
|
||||
curl icanhazip.com
|
||||
```
|
||||
|
||||
### 在WPS中配置
|
||||
|
||||
1. 进入WPS群聊
|
||||
2. 找到webhook机器人设置
|
||||
3. 配置Callback URL:
|
||||
```
|
||||
http://你的服务器IP:8000/api/callback
|
||||
```
|
||||
4. 保存并验证(WPS会发送GET请求)
|
||||
|
||||
### 测试Callback
|
||||
|
||||
```bash
|
||||
# 从服务器测试
|
||||
curl http://localhost:8000/api/callback
|
||||
|
||||
# 从外部测试
|
||||
curl http://你的服务器IP:8000/api/callback
|
||||
```
|
||||
|
||||
## 🔒 安全建议
|
||||
|
||||
### 防火墙配置
|
||||
|
||||
```bash
|
||||
# 允许8000端口
|
||||
sudo ufw allow 8000/tcp
|
||||
|
||||
# 查看防火墙状态
|
||||
sudo ufw status
|
||||
```
|
||||
|
||||
### 使用Nginx反向代理(可选)
|
||||
|
||||
```bash
|
||||
# 安装Nginx
|
||||
sudo apt update
|
||||
sudo apt install nginx
|
||||
|
||||
# 配置Nginx
|
||||
sudo nano /etc/nginx/sites-available/wps-bot
|
||||
|
||||
# 添加配置(见下方)
|
||||
```
|
||||
|
||||
Nginx配置示例:
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
server_name your-domain.com;
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 📈 性能优化
|
||||
|
||||
### 定期清理数据库
|
||||
|
||||
```bash
|
||||
# 创建清理脚本
|
||||
cat > /opt/wps-bot/cleanup.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
sqlite3 /opt/wps-bot/data/bot.db "DELETE FROM game_states WHERE updated_at < strftime('%s', 'now', '-7 days');"
|
||||
echo "数据库清理完成"
|
||||
EOF
|
||||
|
||||
chmod +x /opt/wps-bot/cleanup.sh
|
||||
|
||||
# 添加定时任务
|
||||
sudo crontab -e
|
||||
# 添加:每天凌晨2点清理
|
||||
0 2 * * * /opt/wps-bot/cleanup.sh
|
||||
```
|
||||
|
||||
### 监控内存使用
|
||||
|
||||
```bash
|
||||
# 创建监控脚本
|
||||
cat > /opt/wps-bot/monitor.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
MEMORY=$(curl -s http://localhost:8000/stats | jq -r '.system.memory_mb')
|
||||
echo "$(date): 内存使用 ${MEMORY}MB"
|
||||
if (( $(echo "$MEMORY > 200" | bc -l) )); then
|
||||
echo "警告:内存使用过高!"
|
||||
fi
|
||||
EOF
|
||||
|
||||
chmod +x /opt/wps-bot/monitor.sh
|
||||
|
||||
# 添加定时任务:每小时检查一次
|
||||
0 * * * * /opt/wps-bot/monitor.sh >> /var/log/wps-bot-monitor.log
|
||||
```
|
||||
|
||||
## 🆘 故障排除
|
||||
|
||||
### 服务启动失败
|
||||
|
||||
```bash
|
||||
# 查看详细错误
|
||||
sudo systemctl status wps-bot -l
|
||||
|
||||
# 查看最新日志
|
||||
sudo journalctl -u wps-bot -n 50
|
||||
|
||||
# 检查配置文件
|
||||
sudo systemctl cat wps-bot
|
||||
|
||||
# 手动测试启动
|
||||
cd /opt/wps-bot
|
||||
sudo -u ubuntu /home/ubuntu/miniconda3/envs/liubai/bin/python app.py
|
||||
```
|
||||
|
||||
### 端口被占用
|
||||
|
||||
```bash
|
||||
# 查看占用进程
|
||||
sudo lsof -i :8000
|
||||
|
||||
# 杀死占用进程
|
||||
sudo kill -9 <PID>
|
||||
```
|
||||
|
||||
### 内存不足
|
||||
|
||||
```bash
|
||||
# 查看内存使用
|
||||
free -h
|
||||
|
||||
# 清理缓存
|
||||
sudo sync && sudo sysctl -w vm.drop_caches=3
|
||||
|
||||
# 重启服务
|
||||
./deploy/manage.sh restart
|
||||
```
|
||||
|
||||
### 数据库锁定
|
||||
|
||||
```bash
|
||||
# 检查数据库
|
||||
sqlite3 /opt/wps-bot/data/bot.db "PRAGMA integrity_check;"
|
||||
|
||||
# 如果损坏,恢复数据库
|
||||
mv /opt/wps-bot/data/bot.db /opt/wps-bot/data/bot.db.backup
|
||||
# 重启服务会自动创建新数据库
|
||||
./deploy/manage.sh restart
|
||||
```
|
||||
|
||||
## 📞 技术支持
|
||||
|
||||
如有问题,请查看:
|
||||
- 应用日志:`sudo journalctl -u wps-bot -f`
|
||||
- 系统状态:`curl http://localhost:8000/stats`
|
||||
- README:`/opt/wps-bot/README.md`
|
||||
|
||||
98
deploy/install.sh
Normal file
98
deploy/install.sh
Normal file
@@ -0,0 +1,98 @@
|
||||
#!/bin/bash
|
||||
# WPS Bot Game 安装脚本
|
||||
# 用于Ubuntu服务器部署
|
||||
|
||||
set -e
|
||||
|
||||
echo "================================"
|
||||
echo "WPS Bot Game 部署脚本"
|
||||
echo "================================"
|
||||
echo ""
|
||||
|
||||
# 检查是否为root用户
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo "❌ 请使用sudo运行此脚本"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 配置变量
|
||||
PROJECT_DIR="/opt/wps-bot"
|
||||
SERVICE_USER="ubuntu"
|
||||
PYTHON_ENV="/home/${SERVICE_USER}/miniconda3/envs/liubai"
|
||||
SERVICE_FILE="wps-bot.service"
|
||||
|
||||
echo "📦 配置信息:"
|
||||
echo " 项目目录: ${PROJECT_DIR}"
|
||||
echo " 运行用户: ${SERVICE_USER}"
|
||||
echo " Python环境: ${PYTHON_ENV}"
|
||||
echo ""
|
||||
|
||||
# 1. 检查项目目录
|
||||
if [ ! -d "${PROJECT_DIR}" ]; then
|
||||
echo "❌ 项目目录不存在: ${PROJECT_DIR}"
|
||||
echo "请先上传项目文件到该目录"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ 项目目录存在"
|
||||
|
||||
# 2. 检查Python环境
|
||||
if [ ! -f "${PYTHON_ENV}/bin/python" ]; then
|
||||
echo "❌ Python环境不存在: ${PYTHON_ENV}"
|
||||
echo "请先创建conda环境: conda create -n liubai python=3.10"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Python环境存在"
|
||||
|
||||
# 3. 安装依赖
|
||||
echo ""
|
||||
echo "📦 安装Python依赖..."
|
||||
cd "${PROJECT_DIR}"
|
||||
sudo -u ${SERVICE_USER} ${PYTHON_ENV}/bin/pip install -r requirements.txt
|
||||
|
||||
echo "✅ 依赖安装完成"
|
||||
|
||||
# 4. 创建数据目录
|
||||
echo ""
|
||||
echo "📁 创建数据目录..."
|
||||
mkdir -p "${PROJECT_DIR}/data"
|
||||
chown -R ${SERVICE_USER}:${SERVICE_USER} "${PROJECT_DIR}/data"
|
||||
|
||||
echo "✅ 数据目录创建完成"
|
||||
|
||||
# 5. 配置环境变量
|
||||
if [ ! -f "${PROJECT_DIR}/.env" ]; then
|
||||
echo ""
|
||||
echo "⚙️ 配置环境变量..."
|
||||
cp "${PROJECT_DIR}/env.example" "${PROJECT_DIR}/.env"
|
||||
echo "⚠️ 请编辑 ${PROJECT_DIR}/.env 文件配置Webhook URL"
|
||||
fi
|
||||
|
||||
# 6. 复制systemd服务文件
|
||||
echo ""
|
||||
echo "📝 配置systemd服务..."
|
||||
cp "${PROJECT_DIR}/deploy/systemd/${SERVICE_FILE}" /etc/systemd/system/
|
||||
|
||||
echo "✅ 服务文件已复制"
|
||||
|
||||
# 7. 重新加载systemd
|
||||
echo ""
|
||||
echo "🔄 重新加载systemd..."
|
||||
systemctl daemon-reload
|
||||
|
||||
echo "✅ systemd已重新加载"
|
||||
|
||||
echo ""
|
||||
echo "================================"
|
||||
echo "✅ 安装完成!"
|
||||
echo "================================"
|
||||
echo ""
|
||||
echo "下一步操作:"
|
||||
echo "1. 编辑配置文件: nano ${PROJECT_DIR}/.env"
|
||||
echo "2. 启动服务: sudo systemctl start wps-bot"
|
||||
echo "3. 查看状态: sudo systemctl status wps-bot"
|
||||
echo "4. 查看日志: sudo journalctl -u wps-bot -f"
|
||||
echo "5. 开机自启: sudo systemctl enable wps-bot"
|
||||
echo ""
|
||||
|
||||
164
deploy/manage.sh
Normal file
164
deploy/manage.sh
Normal file
@@ -0,0 +1,164 @@
|
||||
#!/bin/bash
|
||||
# WPS Bot Game 服务管理脚本
|
||||
|
||||
SERVICE_NAME="wps-bot"
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 显示帮助信息
|
||||
show_help() {
|
||||
echo "WPS Bot Game 服务管理工具"
|
||||
echo ""
|
||||
echo "用法: $0 {start|stop|restart|status|logs|enable|disable|update}"
|
||||
echo ""
|
||||
echo "命令说明:"
|
||||
echo " start - 启动服务"
|
||||
echo " stop - 停止服务"
|
||||
echo " restart - 重启服务"
|
||||
echo " status - 查看服务状态"
|
||||
echo " logs - 查看实时日志"
|
||||
echo " enable - 启用开机自启"
|
||||
echo " disable - 禁用开机自启"
|
||||
echo " update - 更新代码并重启"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# 启动服务
|
||||
start_service() {
|
||||
echo -e "${YELLOW}正在启动服务...${NC}"
|
||||
sudo systemctl start ${SERVICE_NAME}
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}✅ 服务启动成功${NC}"
|
||||
sleep 2
|
||||
sudo systemctl status ${SERVICE_NAME} --no-pager
|
||||
else
|
||||
echo -e "${RED}❌ 服务启动失败${NC}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 停止服务
|
||||
stop_service() {
|
||||
echo -e "${YELLOW}正在停止服务...${NC}"
|
||||
sudo systemctl stop ${SERVICE_NAME}
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}✅ 服务已停止${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ 服务停止失败${NC}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 重启服务
|
||||
restart_service() {
|
||||
echo -e "${YELLOW}正在重启服务...${NC}"
|
||||
sudo systemctl restart ${SERVICE_NAME}
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}✅ 服务重启成功${NC}"
|
||||
sleep 2
|
||||
sudo systemctl status ${SERVICE_NAME} --no-pager
|
||||
else
|
||||
echo -e "${RED}❌ 服务重启失败${NC}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 查看状态
|
||||
show_status() {
|
||||
sudo systemctl status ${SERVICE_NAME}
|
||||
}
|
||||
|
||||
# 查看日志
|
||||
show_logs() {
|
||||
echo -e "${YELLOW}实时日志(按Ctrl+C退出):${NC}"
|
||||
sudo journalctl -u ${SERVICE_NAME} -f
|
||||
}
|
||||
|
||||
# 启用开机自启
|
||||
enable_service() {
|
||||
echo -e "${YELLOW}启用开机自启...${NC}"
|
||||
sudo systemctl enable ${SERVICE_NAME}
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}✅ 已启用开机自启${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ 启用失败${NC}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 禁用开机自启
|
||||
disable_service() {
|
||||
echo -e "${YELLOW}禁用开机自启...${NC}"
|
||||
sudo systemctl disable ${SERVICE_NAME}
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}✅ 已禁用开机自启${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ 禁用失败${NC}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 更新代码
|
||||
update_service() {
|
||||
echo -e "${YELLOW}正在更新代码...${NC}"
|
||||
|
||||
# 停止服务
|
||||
stop_service
|
||||
|
||||
# 进入项目目录
|
||||
cd /opt/wps-bot
|
||||
|
||||
# 拉取最新代码(如果使用git)
|
||||
if [ -d ".git" ]; then
|
||||
echo -e "${YELLOW}从Git拉取最新代码...${NC}"
|
||||
sudo -u ubuntu git pull
|
||||
fi
|
||||
|
||||
# 更新依赖
|
||||
echo -e "${YELLOW}更新依赖...${NC}"
|
||||
sudo -u ubuntu /home/ubuntu/miniconda3/envs/liubai/bin/pip install -r requirements.txt
|
||||
|
||||
# 重启服务
|
||||
start_service
|
||||
|
||||
echo -e "${GREEN}✅ 更新完成${NC}"
|
||||
}
|
||||
|
||||
# 主逻辑
|
||||
case "$1" in
|
||||
start)
|
||||
start_service
|
||||
;;
|
||||
stop)
|
||||
stop_service
|
||||
;;
|
||||
restart)
|
||||
restart_service
|
||||
;;
|
||||
status)
|
||||
show_status
|
||||
;;
|
||||
logs)
|
||||
show_logs
|
||||
;;
|
||||
enable)
|
||||
enable_service
|
||||
;;
|
||||
disable)
|
||||
disable_service
|
||||
;;
|
||||
update)
|
||||
update_service
|
||||
;;
|
||||
*)
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
29
deploy/systemd/wps-bot.service
Normal file
29
deploy/systemd/wps-bot.service
Normal file
@@ -0,0 +1,29 @@
|
||||
[Unit]
|
||||
Description=WPS Bot Game Service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=ubuntu
|
||||
WorkingDirectory=/opt/wps-bot
|
||||
Environment="PATH=/home/ubuntu/miniconda3/envs/liubai/bin"
|
||||
ExecStart=/home/ubuntu/miniconda3/envs/liubai/bin/uvicorn app:app --host 0.0.0.0 --port 8000 --workers 1 --limit-concurrency 5
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
|
||||
# 安全选项
|
||||
NoNewPrivileges=true
|
||||
PrivateTmp=true
|
||||
|
||||
# 资源限制
|
||||
MemoryLimit=512M
|
||||
CPUQuota=100%
|
||||
|
||||
# 日志
|
||||
StandardOutput=journal
|
||||
StandardError=journal
|
||||
SyslogIdentifier=wps-bot
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
Reference in New Issue
Block a user