This commit is contained in:
ChuXun
2026-01-18 18:48:20 +08:00
commit 609b2334e8
13 changed files with 2220 additions and 0 deletions

516
部署.md Normal file
View File

@@ -0,0 +1,516 @@
# 服务器部署指南
本文档详细说明如何将成绩监控系统部署到Linux服务器上。
## 📋 前置要求
- Linux服务器Debian/Ubuntu/CentOS等
- Python 3.7+
- 服务器能访问外网
- SSH访问权限
## 📦 准备文件
### 需要上传的文件
```
grade_monitor/
├── monitor.py # 主程序(必需)
├── config.ini # 配置文件(必需)
├── requirements.txt # Python依赖必需
├── setup_python.sh # 安装脚本(必需)
└── readme.md # 说明文档(可选)
```
### 打包文件
在Windows本地执行
```powershell
# 方法1使用tar需要WSL或Git Bash
tar -czf grade_monitor.tar.gz monitor.py config.ini requirements.txt setup_python.sh readme.md
# 方法2使用7-Zip或WinRAR手动打包
```
## 🚀 部署步骤
### 步骤1修改配置文件
**在上传前**,确保 `config.ini` 中填入了正确的信息:
```ini
[login]
USERNAME = 你的学号
PASSWORD = 你的密码
LOGIN_URL = ...
GRADE_URL = ...
[email]
SENDER_EMAIL = your_email@163.com
SENDER_PASSWORD = SMTP授权码
RECEIVER_EMAIL = 接收通知的邮箱
[monitor]
CHECK_INTERVAL = 60
REQUEST_DELAY = 5
MAX_RETRIES = 3
RETRY_DELAY = 10
```
### 步骤2上传到服务器
#### 方法A使用SCP上传
```bash
# 上传打包文件
scp grade_monitor.tar.gz username@server-ip:/home/username/
# 或直接上传文件
scp monitor.py config.ini requirements.txt setup_python.sh username@server-ip:/home/username/grade_monitor/
```
#### 方法B使用SFTP上传
```bash
sftp username@server-ip
put grade_monitor.tar.gz
exit
```
#### 方法C使用FTP客户端
使用FileZilla、WinSCP等工具上传文件。
### 步骤3连接到服务器
```bash
ssh username@server-ip
```
### 步骤4解压和安装
```bash
# 创建工作目录
mkdir -p ~/grade_monitor
cd ~/grade_monitor
# 添加执行权限
chmod +x setup_python.sh
# 运行安装脚本
./setup_python.sh
```
安装脚本会自动:
- 更新apt包列表
- 安装Python3和pip
- 创建虚拟环境
- 安装所需的Python包requests、beautifulsoup4
### 步骤5测试运行
```bash
# 激活虚拟环境
source venv/bin/activate
# 测试模式运行
python3 monitor.py --test
```
**检查输出:**
- 是否成功登录
- 是否获取到成绩页面
- 查看提取的成绩内容
```bash
# 查看提取的成绩
cat .last_grade_content.txt
# 应该看到类似这样的内容:
# ============================================================
# 总平均绩点4.3471
# ============================================================
#
# 学年学期 | 课程代码 | 课程序号 | 课程名称 | ...
# --------------------------------------------------------
# 2025-2026 秋季 | A0801051020 | A095478 | C++程序设计 | ...
```
## 🔄 后台运行方案
### 方案A使用systemd推荐适合长期运行
#### 1. 创建服务文件
```bash
sudo nano /etc/systemd/system/grade-monitor.service
```
#### 2. 填入以下内容
```ini
[Unit]
Description=Grade Monitoring Service
After=network.target
[Service]
Type=simple
User=你的用户名
WorkingDirectory=/home/你的用户名/grade_monitor
ExecStart=/home/你的用户名/grade_monitor/venv/bin/python3 /home/你的用户名/grade_monitor/monitor.py
Restart=always
RestartSec=30
StandardOutput=append:/home/你的用户名/grade_monitor/monitor.log
StandardError=append:/home/你的用户名/grade_monitor/monitor.log
[Install]
WantedBy=multi-user.target
```
**注意:** 将上面的"你的用户名"替换为实际的Linux用户名
#### 3. 启动服务
```bash
# 重载systemd配置
sudo systemctl daemon-reload
# 启用开机自启
sudo systemctl enable grade-monitor
# 启动服务
sudo systemctl start grade-monitor
# 查看服务状态
sudo systemctl status grade-monitor
```
#### 4. 管理服务
```bash
# 查看日志
sudo journalctl -u grade-monitor -f
# 停止服务
sudo systemctl stop grade-monitor
# 重启服务
sudo systemctl restart grade-monitor
# 禁用开机自启
sudo systemctl disable grade-monitor
```
### 方案B使用tmux简单适合临时运行
#### 1. 安装tmux
```bash
# Debian/Ubuntu
sudo apt install tmux
# CentOS/RHEL
sudo yum install tmux
```
#### 2. 创建会话并运行
```bash
# 创建新的tmux会话
tmux new -s grade_monitor
# 激活虚拟环境
source venv/bin/activate
# 运行程序
python3 monitor.py
```
#### 3. 离开和重连会话
```bash
# 离开会话(程序继续运行)
# 按键Ctrl+B然后按 D
# 重新连接到会话
tmux attach -t grade_monitor
# 查看所有会话
tmux ls
# 关闭会话
tmux kill-session -t grade_monitor
```
### 方案C使用screen
```bash
# 安装screen
sudo apt install screen
# 创建新会话
screen -S grade_monitor
# 激活环境并运行
source venv/bin/activate
python3 monitor.py
# 离开会话Ctrl+A然后按 D
# 重新连接
screen -r grade_monitor
# 查看所有会话
screen -ls
```
### 方案D使用nohup最简单
```bash
# 激活虚拟环境
source venv/bin/activate
# 后台运行
nohup python3 monitor.py > monitor.log 2>&1 &
# 查看进程
ps aux | grep monitor.py
# 停止进程
kill <进程ID>
```
## 📊 监控和维护
### 查看运行状态
```bash
# 方法1查看日志文件
tail -f ~/grade_monitor/monitor.log
# 方法2查看systemd日志如果使用systemd
sudo journalctl -u grade-monitor -n 50 -f
# 方法3查看进程
ps aux | grep monitor.py
```
### 查看当前成绩
```bash
cd ~/grade_monitor
cat .last_grade_content.txt
```
### 手动触发测试
```bash
cd ~/grade_monitor
source venv/bin/activate
python3 monitor.py --test
```
## 🔧 常见问题
### 问题1连接服务器失败
**可能原因:**
- SSH端口被防火墙拦截
- 服务器IP或用户名错误
- SSH密钥配置问题
**解决方法:**
```bash
# 指定端口
ssh -p 端口号 username@server-ip
# 使用密钥
ssh -i /path/to/key.pem username@server-ip
```
### 问题2无法访问学校网站
**可能原因:**
- 服务器在校外需要VPN
- 防火墙拦截
**解决方法:**
- 使用校内服务器
- 配置代理
- 联系网络管理员
### 问题3pip安装失败
**解决方法:**
```bash
# 更新pip
pip install --upgrade pip
# 使用国内镜像
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 或使用清华源
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
```
### 问题4权限不足
**解决方法:**
```bash
# 修改文件所有者
sudo chown -R username:username ~/grade_monitor
# 修改执行权限
chmod +x ~/grade_monitor/*.sh
```
### 问题5邮件发送失败
**解决方法:**
- 确认SMTP授权码正确不是邮箱密码
- 检查服务器能否访问smtp.163.com端口465
- 查看详细错误信息:`tail -f monitor.log`
```bash
# 测试网络连接
telnet smtp.163.com 465
# 或
nc -zv smtp.163.com 465
```
## 🔐 安全建议
### 1. 保护配置文件
```bash
# 限制config.ini权限
chmod 600 ~/grade_monitor/config.ini
# 确保只有自己能访问
ls -la ~/grade_monitor/config.ini
# 应显示:-rw------- 1 username username
```
### 2. 使用环境变量(可选)
不在配置文件中存储明文密码,而是使用环境变量:
```bash
# 设置环境变量
export GRADE_USERNAME="你的学号"
export GRADE_PASSWORD="你的密码"
export EMAIL_PASSWORD="SMTP授权码"
# 添加到.bashrc使其永久生效
echo 'export GRADE_USERNAME="你的学号"' >> ~/.bashrc
echo 'export GRADE_PASSWORD="你的密码"' >> ~/.bashrc
echo 'export EMAIL_PASSWORD="SMTP授权码"' >> ~/.bashrc
```
### 3. 定期更新
```bash
# 更新系统
sudo apt update && sudo apt upgrade
# 更新Python包
cd ~/grade_monitor
source venv/bin/activate
pip install --upgrade requests beautifulsoup4
```
## 📱 监控建议
### 设置监控脚本
创建一个检查脚本 `check_status.sh`
```bash
#!/bin/bash
# 检查进程是否运行
if pgrep -f "monitor.py" > /dev/null; then
echo "✓ 监控程序正在运行"
else
echo "✗ 监控程序未运行!"
# 可以在这里添加重启逻辑
# systemctl start grade-monitor
fi
# 检查最近的日志
echo ""
echo "最近的日志:"
tail -n 5 ~/grade_monitor/monitor.log
```
### 定期检查使用cron
```bash
# 编辑crontab
crontab -e
# 添加以下行(每天检查一次)
0 12 * * * /home/username/grade_monitor/check_status.sh
```
## 🎯 完整部署示例
```bash
# === 本地操作Windows/WSL ===
cd E:\50425\Documents\Github\GPA_Monitoring
tar -czf grade_monitor.tar.gz monitor.py config.ini requirements.txt setup_python.sh readme.md
scp grade_monitor.tar.gz user@server.com:~/
# === 服务器操作 ===
ssh user@server.com
# 解压和安装
mkdir -p ~/grade_monitor
cd ~/grade_monitor
tar -xzf ../grade_monitor.tar.gz
chmod +x setup_python.sh
./setup_python.sh
# 测试
source venv/bin/activate
python3 monitor.py --test
cat .last_grade_content.txt
# 配置systemd服务
sudo nano /etc/systemd/system/grade-monitor.service
# (填入服务配置)
sudo systemctl daemon-reload
sudo systemctl enable grade-monitor
sudo systemctl start grade-monitor
sudo systemctl status grade-monitor
# 查看日志
sudo journalctl -u grade-monitor -f
```
## ✅ 部署检查清单
- [ ] 文件已上传到服务器
- [ ] config.ini配置正确账号、密码、邮箱
- [ ] 运行setup_python.sh安装依赖
- [ ] 测试模式运行成功
- [ ] 成绩提取格式正确
- [ ] 配置后台运行systemd/tmux/screen
- [ ] 服务正常启动
- [ ] 日志输出正常
- [ ] 收到测试邮件
- [ ] 设置文件权限chmod 600 config.ini
## 📞 获取帮助
如果遇到问题:
1. 查看 `monitor.log` 了解详细错误
2. 运行 `python3 monitor.py --test` 测试
3. 检查 `.debug_response.html` 了解实际响应
4. 查看 `readme.md` 了解更多功能说明
---
部署完成后,系统将自动监控成绩变化,有新课程成绩时会立即发送邮件通知!