517 lines
9.9 KiB
Markdown
517 lines
9.9 KiB
Markdown
# 服务器部署指南
|
||
|
||
本文档详细说明如何将成绩监控系统部署到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
|
||
- 防火墙拦截
|
||
|
||
**解决方法:**
|
||
- 使用校内服务器
|
||
- 配置代理
|
||
- 联系网络管理员
|
||
|
||
### 问题3:pip安装失败
|
||
|
||
**解决方法:**
|
||
```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` 了解更多功能说明
|
||
|
||
---
|
||
|
||
部署完成后,系统将自动监控成绩变化,有新课程成绩时会立即发送邮件通知!
|