1
This commit is contained in:
516
部署.md
Normal file
516
部署.md
Normal 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
|
||||
- 防火墙拦截
|
||||
|
||||
**解决方法:**
|
||||
- 使用校内服务器
|
||||
- 配置代理
|
||||
- 联系网络管理员
|
||||
|
||||
### 问题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` 了解更多功能说明
|
||||
|
||||
---
|
||||
|
||||
部署完成后,系统将自动监控成绩变化,有新课程成绩时会立即发送邮件通知!
|
||||
Reference in New Issue
Block a user