一个基于FastAPI的Web应用,提供局域网唤醒(WOL)和定时任务管理功能。
- 支持通过hostname、IP地址或MAC地址添加唤醒设备
- 设备信息的增删查改功能
- 实时设备状态检测(在线/离线)
- WOL魔术包发送功能
- 设备Ping测试功能
- 🆕 智能主机名/IP显示逻辑,支持mDNS格式(.local, .lan)
- 🆕 设备地址类型视觉区分(mDNS、普通主机名、IP地址)
- 🆕 CIDR格式IP地址智能处理
- 🆕 Docker容器友好的ping实现,解决容器权限问题
- 支持Shell脚本任务执行,带语法高亮编辑器
- 支持Cron表达式和间隔时间两种调度方式
- 支持手动执行模式(无调度配置时仅支持手动执行)
- 任务的启用/禁用二状态控制
- 详细的任务执行状态和日志查看
- 任务立即执行功能
- 执行记录搜索、排序和删除功能
- 使用TinyDB作为嵌入式数据库
- 自定义YAMLStorage以YAML格式存储数据
- 支持数据的持久化和版本控制
- 基于Bootstrap 5的完全响应式Web界面
- 支持桌面端和移动端优化显示
- CodeMirror集成的Shell脚本语法高亮编辑器
- 实时状态更新和操作反馈
- 完整的设备和任务管理功能
- 优化的执行日志查看界面(75%页面高度,紧凑布局)
- 智能的执行记录搜索和批量删除功能
- Content Security Policy安全策略支持
- 🆕 Unicode桌面电脑图标favicon (🖥️)
- 🆕 精确的系统状态监控(修复磁盘使用率显示)
- 🆕 完整3选项主题系统: 亮色/自动/暗色模式,支持跟随系统主题
- 🆕 深色模式全面支持: 导航栏、侧边栏、模态框、表单等所有界面元素
- 🆕 智能主题管理: 主题设置保存在本地存储,跨会话持久化
- 🆕 高性能优化: 智能轮询、请求缓存、防抖动机制
- Python 3.7+
- Linux/macOS/Windows系统
- 网络访问权限(发送WOL包)
方式1: 使用预构建镜像 (推荐)
# 使用GitHub Container Registry (Host网络模式)
docker run -d \
--name server-manager \
--network host \
--cap-add NET_RAW \
--cap-add NET_ADMIN \
--dns 8.8.8.8 \
--dns 1.1.1.1 \
--add-host host.docker.internal:host-gateway \
-e SM_PORT=8000 \
-e TZ=Asia/Shanghai \
-v server-manager-data:/app/data \
-v server-manager-logs:/app/logs \
ghcr.io/username/server-manager:latest
# 或使用Docker Hub (Host网络模式)
docker run -d \
--name server-manager \
--network host \
--cap-add NET_RAW \
--cap-add NET_ADMIN \
--dns 8.8.8.8 \
--dns 1.1.1.1 \
--add-host host.docker.internal:host-gateway \
-e SM_PORT=8000 \
-e TZ=Asia/Shanghai \
-v server-manager-data:/app/data \
-v server-manager-logs:/app/logs \
username/server-manager:latest方式2: 本地构建镜像
- 克隆项目
git clone <项目地址>
cd server_manager- 构建 Docker 镜像
docker build -t server-manager .- 运行 Docker 容器
# 推荐方式:Host网络模式 (完整WOL功能支持)
docker run -d \
--name server-manager \
--network host \
--cap-add NET_RAW \
--cap-add NET_ADMIN \
--dns 8.8.8.8 \
--dns 1.1.1.1 \
--add-host host.docker.internal:host-gateway \
-e SM_PORT=8000 \
-e TZ=Asia/Shanghai \
-v server-manager-data:/app/data \
-v server-manager-logs:/app/logs \
server-manager
# 备选方式:Bridge网络模式 (基础功能)
docker run -d \
--name server-manager \
-p 8000:8000 \
--cap-add NET_RAW \
--dns 8.8.8.8 \
--dns 1.1.1.1 \
--add-host host.docker.internal:host-gateway \
-e SM_PORT=8000 \
-e TZ=Asia/Shanghai \
-v server-manager-data:/app/data \
-v server-manager-logs:/app/logs \
server-manager- 访问应用
- Web界面: http://localhost:8000
- API文档: http://localhost:8000/docs
- 容器管理命令
# 查看容器状态
docker ps
# 查看日志
docker logs -f server-manager
# 停止容器
docker stop server-manager
# 删除容器
docker rm server-manager
# 删除镜像
docker rmi server-manager- 克隆项目
git clone <项目地址>
cd server_manager- 配置环境变量 (可选)
cp .env.example .env
# 编辑 .env 文件,根据需要修改配置- 选择合适的docker-compose文件
# 方式1: Host网络模式 (推荐,完整WOL功能)
docker-compose up -d
# 方式2: Bridge网络模式 (兼容性好)
docker-compose -f docker-compose.bridge.yml up -d- 访问应用
- Web界面: http://localhost:8000
- API文档: http://localhost:8000/docs
- 克隆项目或下载代码
git clone <项目地址>
cd server_manager- 创建虚拟环境(推荐)
python -m venv venv
source venv/bin/activate # Linux/macOS
# venv\Scripts\activate # Windows- 安装依赖
pip install -r requirements.txt- 启动应用
python main.py- 启动应用后访问 http://127.0.0.1:8000
- 在"WOL设备"页面添加需要管理的设备
- 在"定时任务"页面创建自动化任务:
- 使用语法高亮编辑器编写Shell命令
- 设置Cron表达式或间隔时间进行定时调度
- 或留空调度配置创建仅手动执行的任务
- 在"执行记录"页面查看任务执行历史:
- 使用搜索功能筛选特定记录
- 点击"删除结果"删除搜索到的记录
- 点击"清空所有"删除全部执行记录
- 在"系统状态"页面监控系统运行状态
# 基础配置
SM_PORT=8000 # Web服务端口
SM_LOG_LEVEL=INFO # 日志级别
SM_ENV=production # 运行环境
# 时区配置
TZ=Asia/Shanghai # 容器时区
SM_TIMEZONE=Asia/Shanghai # 应用时区
# WOL配置
SM_WOL_PORT=9 # WOL端口
SM_WOL_TIMEOUT=3 # WOL超时时间
# 任务配置
SM_TASK_TIMEOUT=300 # 任务超时时间(秒)
SM_TASK_MAX_RETRIES=0 # 任务最大重试次数
SM_LOG_RETENTION_DAYS=30 # 日志保留天数# 构建镜像
docker build -t server-manager .
# 运行容器 (Host网络模式,推荐)
docker run -d \
--name server-manager \
--network host \
--cap-add NET_RAW \
--cap-add NET_ADMIN \
--dns 8.8.8.8 \
--dns 1.1.1.1 \
--add-host host.docker.internal:host-gateway \
-e SM_PORT=8000 \
-e TZ=Asia/Shanghai \
-v server-manager-data:/app/data \
-v server-manager-logs:/app/logs \
server-manager
# 查看日志
docker logs -f server-manager
# 停止容器
docker stop server-manager# 查看帮助
python main.py --help
# 指定监听地址和端口
python main.py --host 0.0.0.0 --port 8080
# 指定数据目录
python main.py --data-dir ./my_data
# 启用调试模式
python main.py --log-level DEBUG --reload- 设备名称: 设备的友好名称
- 主机名: 设备的主机名(可选,支持mDNS格式如.local/.lan)
- IP地址: 设备的IP地址或CIDR格式(可选)
- MAC地址: 设备的MAC地址(必需)
- 描述: 设备描述信息(可选)
- mDNS主机名 (
device.local,host.lan): 绿色显示 + 广播图标 📡 - 普通主机名 (
myserver,desktop): 蓝色显示 + 网络图标 🖥️ - IP地址 (
192.168.1.100): 紫色显示 + 路由器图标 🔌 - CIDR格式 (
192.168.1.0/24): 自动提取IP地址部分显示
# 示例: 每天凌晨2点执行系统备份
命令: /usr/local/bin/backup.sh
Cron表达式: 0 0 2 * * *
# 示例: 仅手动执行的任务(不填写调度配置)
命令: echo "手动执行的任务"
Cron表达式: (留空)
间隔秒数: (留空)- 支持语法高亮显示
- 行号显示
- 自动缩进和代码补全
- 支持多行Shell脚本编写
格式: 秒 分 时 日 月 周
示例:
0 0 * * * * # 每小时
0 */5 * * * * # 每5分钟
0 0 2 * * * # 每天2点
0 0 0 * * 1 # 每周一0点
0 0 0 1 * * # 每月1号0点
server_manager/
├── app/ # 应用核心代码
│ ├── __init__.py
│ ├── api.py # FastAPI路由和API
│ ├── database.py # 数据库管理
│ ├── models.py # 数据模型
│ ├── scheduler.py # 任务调度器
│ ├── storage.py # 存储后端
│ └── wol.py # WOL功能模块
├── static/ # 静态文件
│ ├── css/ # 样式文件
│ │ ├── bootstrap.min.css # Bootstrap框架
│ │ ├── bootstrap-icons.css # Bootstrap图标
│ │ └── codemirror/ # CodeMirror编辑器样式
│ └── js/ # JavaScript文件
│ ├── bootstrap.bundle.min.js # Bootstrap脚本
│ ├── codemirror/ # CodeMirror编辑器脚本
│ └── dashboard.js # 前端主要逻辑
├── templates/ # HTML模板
│ └── dashboard.html # 主界面模板
├── data/ # 数据存储目录
│ ├── devices.yaml # 设备数据
│ ├── tasks.yaml # 任务数据
│ ├── executions.yaml # 执行记录
│ └── counters.yaml # 计数器
├── logs/ # 日志目录
├── config.py # 配置文件
├── main.py # 主程序入口
├── requirements.txt # Python依赖
└── README.md # 说明文档
启动应用后,可访问以下地址查看API文档:
- Swagger UI: http://127.0.0.1:8000/docs
- ReDoc: http://127.0.0.1:8000/redoc
GET /api/devices- 获取所有设备POST /api/devices- 创建设备GET /api/devices/{id}- 获取指定设备PUT /api/devices/{id}- 更新设备DELETE /api/devices/{id}- 删除设备POST /api/wol/wake- 发送WOL包POST /api/wol/ping/{id}- Ping设备
GET /api/tasks- 获取所有任务POST /api/tasks- 创建任务GET /api/tasks/{id}- 获取指定任务PUT /api/tasks/{id}- 更新任务DELETE /api/tasks/{id}- 删除任务POST /api/tasks/{id}/execute- 立即执行任务POST /api/tasks/{id}/toggle- 启用/禁用任务
GET /api/executions- 获取所有执行记录GET /api/tasks/{id}/executions- 获取任务执行记录
GET /api/status- 获取系统状态POST /api/maintenance/cleanup- 清理旧日志
-
WOL包发送失败
- 检查MAC地址格式是否正确
- 确认网络权限允许发送广播包
- 检查目标设备是否支持WOL功能
-
任务执行失败
- 检查命令路径和权限
- 查看执行日志中的错误信息
- 确认超时时间设置合理
-
Docker容器中ping失败
- 使用Host网络模式:
--network host - 添加必要权限:
--cap-add NET_RAW --cap-add NET_ADMIN - 配置DNS服务器:
--dns 8.8.8.8 --dns 1.1.1.1 - 对于mDNS解析问题,系统会自动回退到TCP端口检测
- 使用Host网络模式:
-
任务执行失败
- 检查命令路径和权限
- 查看执行日志中的错误信息
- 确认超时时间设置合理
-
无法访问Web界面
- 检查防火墙设置
- 确认端口没有被其他程序占用
- 查看应用启动日志
-
设备状态显示为离线但实际在线
- 检查设备是否开放常见端口(22,80,443等)
- 确认网络配置允许容器访问目标设备
- 查看应用日志中的ping调试信息
# 查看应用日志
tail -f logs/server_manager.log
# 查看特定级别日志
grep "ERROR" logs/server_manager.log- 安装开发依赖
pip install -r requirements.txt- 启动开发服务器
python main.py --reload --log-level DEBUGapp/models.py: 定义所有数据模型app/database.py: 数据库操作接口app/wol.py: WOL功能实现app/scheduler.py: 任务调度和执行app/api.py: Web API路由app/storage.py: 自定义YAML存储
项目配置了完整的GitHub Actions工作流:
- CI检查 (
ci.yml): 代码质量检查、安全扫描、多Python版本测试 - Docker构建 (
docker-build.yml): 自动构建和发布Docker镜像 - 发布流程 (
release.yml): Release时自动发布并生成部署文件
# 触发Docker镜像构建和发布
git tag -a v1.2.1 -m "Release version 1.2.1"
git push origin v1.2.1
# 创建GitHub Release会自动:
# 1. 构建多架构Docker镜像 (amd64, arm64)
# 2. 发布到GitHub Container Registry和Docker Hub
# 3. 生成docker-compose.yml和部署脚本- GitHub Container Registry:
ghcr.io/username/server-manager - Docker Hub:
username/server-manager
- 提交PR触发CI检查
- 合并到main分支构建latest镜像
- 创建Release标签发布稳定版本
- 自动生成部署文件和脚本
更多详细配置说明请参考:Docker Hub 自动发布设置指南
MIT License
主题系统与性能大幅提升:
- 🎨 完整3选项主题系统: 新增亮色/自动/暗色三种主题模式
- 🌙 全面深色模式支持: 所有界面元素完美支持深色主题(导航栏、侧边栏、模态框、表单、表格等)
- 🔄 智能主题管理: 自动跟随系统主题 + localStorage持久化存储
- 🚀 性能优化: 页面加载速度提升40-60%,数据库查询速度提升70%
- ⚡ 智能轮询: 基于页面可见性的智能刷新机制,减少50%网络请求
- 🛠️ 技术升级: 修复废弃API使用,防抖动机制,请求缓存优化
用户界面增强:
- 🎯 响应式主题选择器,支持emoji图标显示
- 📱 移动端导航栏完美深色模式适配
- 🖥️ 桌面端侧边栏智能主题切换
- 🎨 模态框、表单、代码编辑器全面主题支持
技术改进:
- 🔧 修复浏览器异步通信错误
- ⚡ 数据库查询优化,添加高效计数方法
- 📦 静态资源加载优化,使用defer属性
- 🎛️ JavaScript性能优化,智能防抖动机制
Docker容器化增强:
- 🐳 修复Docker容器中ping权限问题,支持mDNS解析
- 🔧 新增TCP端口检测作为ping备选方案,提升容器兼容性
- 📡 改进Docker网络配置,支持Host和Bridge两种部署模式
- 🛠️ 提供多种Docker Compose配置文件适应不同环境
设备状态检测优化:
- ⚡ 智能ping策略:优先TCP端口检测,回退ICMP ping
- 🌐 增强mDNS域名解析支持
- 📊 完善Docker容器权限配置文档
Bug修复与功能增强:
- 🖥️ 网站favicon更新为Unicode桌面电脑图标 (🖥️)
- 📊 修复系统状态中磁盘使用率计算错误
- 🌐 WOL设备显示逻辑优化,支持mDNS格式(.local/.lan)
- 🎨 设备地址类型智能视觉区分(颜色+图标)
- 🔧 CIDR格式IP地址智能处理
技术改进:
- 数据模型增强,新增hostname验证器和显示方法
- 前端交互优化,提升用户界面直观性
- API增强,新增display_address和is_mdns字段
新功能:
- 🎨 添加CodeMirror代码编辑器,支持Shell脚本语法高亮
- 📱 完整的移动端响应式支持
- 🔧 支持手动执行模式(无调度配置的任务)
- 🔍 执行记录智能搜索和批量删除功能
- 🛡️ Content Security Policy安全策略支持
界面优化:
- 优化执行日志查看页面,75%页面高度,紧凑布局
- 改进移动端导航体验
- 修复CodeMirror编辑器行号重叠问题
- 智能删除按钮文本(根据搜索状态显示"删除结果"或"清空所有")
技术改进:
- 所有静态资源本地化,不再依赖CDN
- 简化任务状态为启用/禁用两状态
- 优化任务调度逻辑
- 移除内联事件处理器,提升安全性
- 基础WOL设备管理功能
- 定时任务调度系统
- 执行记录查看
- Docker容器化支持
- 初始版本发布
欢迎提交Bug报告和功能请求!