Files
GPA_Monitoring/docs/部署.md
ChuXun 2e0e4ea8c6 1
2026-01-29 04:44:49 +08:00

517 lines
9.9 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.
# 服务器部署指南
本文档详细说明如何将成绩监控系统部署到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` 了解更多功能说明
---
部署完成后,系统将自动监控成绩变化,有新课程成绩时会立即发送邮件通知!