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