Files
GPA_Monitoring/部署.md
ChuXun 609b2334e8 1
2026-01-18 18:48:20 +08:00

9.9 KiB
Raw Blame History

服务器部署指南

本文档详细说明如何将成绩监控系统部署到Linux服务器上。

📋 前置要求

  • Linux服务器Debian/Ubuntu/CentOS等
  • Python 3.7+
  • 服务器能访问外网
  • SSH访问权限

📦 准备文件

需要上传的文件

grade_monitor/
├── monitor.py           # 主程序(必需)
├── config.ini          # 配置文件(必需)
├── requirements.txt    # Python依赖必需
├── setup_python.sh     # 安装脚本(必需)
└── readme.md          # 说明文档(可选)

打包文件

在Windows本地执行

# 方法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 中填入了正确的信息:

[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上传

# 上传打包文件
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上传

sftp username@server-ip
put grade_monitor.tar.gz
exit

方法C使用FTP客户端

使用FileZilla、WinSCP等工具上传文件。

步骤3连接到服务器

ssh username@server-ip

步骤4解压和安装

# 创建工作目录
mkdir -p ~/grade_monitor
cd ~/grade_monitor

# 添加执行权限
chmod +x setup_python.sh

# 运行安装脚本
./setup_python.sh

安装脚本会自动:

  • 更新apt包列表
  • 安装Python3和pip
  • 创建虚拟环境
  • 安装所需的Python包requests、beautifulsoup4

步骤5测试运行

# 激活虚拟环境
source venv/bin/activate

# 测试模式运行
python3 monitor.py --test

检查输出:

  • 是否成功登录
  • 是否获取到成绩页面
  • 查看提取的成绩内容
# 查看提取的成绩
cat .last_grade_content.txt

# 应该看到类似这样的内容:
# ============================================================
# 总平均绩点4.3471
# ============================================================
# 
# 学年学期  |  课程代码  |  课程序号  |  课程名称  |  ...
# --------------------------------------------------------
# 2025-2026 秋季  |  A0801051020  |  A095478  |  C++程序设计  |  ...

🔄 后台运行方案

方案A使用systemd推荐适合长期运行

1. 创建服务文件

sudo nano /etc/systemd/system/grade-monitor.service

2. 填入以下内容

[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. 启动服务

# 重载systemd配置
sudo systemctl daemon-reload

# 启用开机自启
sudo systemctl enable grade-monitor

# 启动服务
sudo systemctl start grade-monitor

# 查看服务状态
sudo systemctl status grade-monitor

4. 管理服务

# 查看日志
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

# Debian/Ubuntu
sudo apt install tmux

# CentOS/RHEL
sudo yum install tmux

2. 创建会话并运行

# 创建新的tmux会话
tmux new -s grade_monitor

# 激活虚拟环境
source venv/bin/activate

# 运行程序
python3 monitor.py

3. 离开和重连会话

# 离开会话(程序继续运行)
# 按键Ctrl+B然后按 D

# 重新连接到会话
tmux attach -t grade_monitor

# 查看所有会话
tmux ls

# 关闭会话
tmux kill-session -t grade_monitor

方案C使用screen

# 安装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最简单

# 激活虚拟环境
source venv/bin/activate

# 后台运行
nohup python3 monitor.py > monitor.log 2>&1 &

# 查看进程
ps aux | grep monitor.py

# 停止进程
kill <进程ID>

📊 监控和维护

查看运行状态

# 方法1查看日志文件
tail -f ~/grade_monitor/monitor.log

# 方法2查看systemd日志如果使用systemd
sudo journalctl -u grade-monitor -n 50 -f

# 方法3查看进程
ps aux | grep monitor.py

查看当前成绩

cd ~/grade_monitor
cat .last_grade_content.txt

手动触发测试

cd ~/grade_monitor
source venv/bin/activate
python3 monitor.py --test

🔧 常见问题

问题1连接服务器失败

可能原因:

  • SSH端口被防火墙拦截
  • 服务器IP或用户名错误
  • SSH密钥配置问题

解决方法:

# 指定端口
ssh -p 端口号 username@server-ip

# 使用密钥
ssh -i /path/to/key.pem username@server-ip

问题2无法访问学校网站

可能原因:

  • 服务器在校外需要VPN
  • 防火墙拦截

解决方法:

  • 使用校内服务器
  • 配置代理
  • 联系网络管理员

问题3pip安装失败

解决方法:

# 更新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权限不足

解决方法:

# 修改文件所有者
sudo chown -R username:username ~/grade_monitor

# 修改执行权限
chmod +x ~/grade_monitor/*.sh

问题5邮件发送失败

解决方法:

  • 确认SMTP授权码正确不是邮箱密码
  • 检查服务器能否访问smtp.163.com端口465
  • 查看详细错误信息:tail -f monitor.log
# 测试网络连接
telnet smtp.163.com 465
# 或
nc -zv smtp.163.com 465

🔐 安全建议

1. 保护配置文件

# 限制config.ini权限
chmod 600 ~/grade_monitor/config.ini

# 确保只有自己能访问
ls -la ~/grade_monitor/config.ini
# 应显示:-rw------- 1 username username

2. 使用环境变量(可选)

不在配置文件中存储明文密码,而是使用环境变量:

# 设置环境变量
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. 定期更新

# 更新系统
sudo apt update && sudo apt upgrade

# 更新Python包
cd ~/grade_monitor
source venv/bin/activate
pip install --upgrade requests beautifulsoup4

📱 监控建议

设置监控脚本

创建一个检查脚本 check_status.sh

#!/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

# 编辑crontab
crontab -e

# 添加以下行(每天检查一次)
0 12 * * * /home/username/grade_monitor/check_status.sh

🎯 完整部署示例

# === 本地操作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 了解更多功能说明

部署完成后,系统将自动监控成绩变化,有新课程成绩时会立即发送邮件通知!