基于 Ubuntu 的完整自动化部署解决方案,集成 GitHub Webhook、Flask 管理界面和实时日志监控。
🎯 一键部署,自动化管理 - 让部署变得简单高效!
- GitHub Webhook 集成: 自动响应 Push/Tag/Release 事件
- 多项目管理: 支持多个项目的独立部署配置
- 实时日志监控: 完整的部署过程日志记录和查看
- Web 管理界面: 直观的项目管理和状态监控
- 安全验证: X-Hub-Signature-256 签名验证
- 灵活部署脚本: 支持前置/后置脚本自定义
- 仪表盘: 部署统计、成功率分析、最近活动
- 项目管理: 项目的增删改查、配置管理
- 日志查看: 实时日志展示、筛选、下载
- 统计报表: 部署趋势分析、项目对比
- 用户认证: 基于用户名/密码的登录系统
- 权限控制: 登录验证和会话管理
- HTTPS 支持: Let's Encrypt SSL 证书
- 安全配置: systemd 服务隔离和权限限制
- 演示地址: https://demo.server-manager.com (即将上线)
- 演示账户:
demo/demo123
实时监控部署状态和统计信息 |
可视化项目配置和管理 |
详细的部署过程日志 |
部署成功率和趋势分析 |
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ GitHub │───▶│ Nginx │───▶│ Webhook │
│ Repository │ │ Reverse Proxy │ │ Server │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ Flask │ │ Deploy │
│ Application │ │ Scripts │
└─────────────────┘ └─────────────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ SQLite │ │ Log Files │
│ Database │ │ Storage │
└─────────────────┘ └─────────────────┘
server-manager/
├── 📁 flask_app/ # Flask Web 应用
│ ├── app.py # 主应用入口
│ ├── auth.py # 用户认证模块
│ ├── project.py # 项目管理模块
│ ├── logview.py # 日志查看模块
│ └── 📁 templates/ # HTML 模板
│ ├── base.html # 基础模板
│ ├── login.html # 登录页面
│ ├── dashboard.html # 仪表盘
│ ├── projects.html # 项目列表
│ ├── project_form.html # 项目表单
│ ├── logs.html # 日志列表
│ ├── log_detail.html # 日志详情
│ └── deployment_stats.html # 统计报表
├── 📁 webhook/ # Webhook 配置
│ └── hooks.json # Webhook 路由配置
├── 📁 deploy/ # 部署相关脚本
│ ├── 📁 scripts/ # 部署脚本目录
│ │ ├── deploy_project1.sh # 项目1部署脚本
│ │ ├── deploy_project2.sh # 项目2部署脚本
│ │ ├── pre_deploy.sh # 前置脚本
│ │ └── post_deploy.sh # 后置脚本
│ ├── init_db.py # 数据库初始化
│ └── log_writer.py # 日志记录工具
├── 📁 config/ # 系统配置文件
│ ├── webhook.service # Webhook systemd 服务
│ ├── flask-deploy.service # Flask systemd 服务
│ ├── nginx-deploy.conf # Nginx 配置
│ └── gunicorn.conf.py # Gunicorn 配置
├── requirements.txt # Python 依赖
├── install.sh # 一键安装脚本
├── Makefile # 管理命令
├── LAYOUT.md # 界面布局设计
└── README.md # 项目说明
- 操作系统: Ubuntu 20.04/22.04 LTS
- 权限: 具有 sudo 权限的普通用户
- 网络: 能够访问 GitHub 和包管理器
# 克隆项目
git clone https://github.com/maxazure/server-manager.git
cd server-manager
# 运行安装脚本
chmod +x install.sh
./install.sh展开查看详细步骤
sudo apt update && sudo apt upgrade -y
sudo apt install -y python3 python3-pip python3-venv nginx git curl wget sqlite3 systemd certbot python3-certbot-nginx webhooksudo useradd -r -s /bin/bash -d /opt/deploy -m webhook
sudo useradd -r -s /bin/bash -d /home/deploy -m deploy
sudo mkdir -p /opt/deploy/{scripts,logs,data}
sudo mkdir -p /etc/webhook
sudo mkdir -p /var/log/flask-deploysudo cp webhook/hooks.json /etc/webhook/
sudo cp deploy/scripts/* /opt/deploy/scripts/
sudo cp deploy/*.py /opt/deploy/
sudo cp -r flask_app/* /home/deploy/server-manager/
sudo cp requirements.txt /home/deploy/server-manager/sudo chown -R webhook:webhook /opt/deploy
sudo chown -R deploy:deploy /home/deploy
sudo chmod +x /opt/deploy/scripts/*.sh
sudo chmod +x /opt/deploy/*.pysudo -u deploy bash -c "cd /home/deploy/server-manager && python3 -m pip install --user -r requirements.txt"sudo -u webhook python3 /opt/deploy/init_db.pysudo cp config/*.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable webhook.service flask-deploy.service
sudo systemctl start webhook.service flask-deploy.servicesudo cp config/nginx-deploy.conf /etc/nginx/sites-available/deploy
sudo ln -s /etc/nginx/sites-available/deploy /etc/nginx/sites-enabled/deploy
sudo systemctl restart nginx编辑 /etc/webhook/hooks.json:
{
"id": "deploy-project1",
"execute-command": "/opt/deploy/scripts/deploy_project1.sh",
"trigger-rule": {
"and": [
{
"match": {
"type": "payload-hmac-sha256",
"secret": "your-webhook-secret",
"parameter": {
"source": "header",
"name": "X-Hub-Signature-256"
}
}
},
{
"match": {
"type": "value",
"value": "refs/heads/main",
"parameter": {
"source": "payload",
"name": "ref"
}
}
}
]
}
}- 进入 GitHub 仓库 Settings → Webhooks
- 添加新的 Webhook:
- Payload URL:
https://your-domain.com/webhook/deploy-project1 - Content type:
application/json - Secret: 与 hooks.json 中的 secret 匹配
- Events: Push, Tag push, Releases
- Payload URL:
# 自动获取 Let's Encrypt 证书
sudo certbot --nginx -d your-domain.com
# 设置自动续期
sudo crontab -e
# 添加:0 12 * * * /usr/bin/certbot renew --quiet# 使用 Makefile 管理
make help # 查看所有可用命令
make start # 启动所有服务
make stop # 停止所有服务
make restart # 重启所有服务
make status # 查看服务状态
make logs # 查看实时日志
make backup # 备份数据库和日志
make ssl # 配置SSL证书访问 https://your-domain.com 并使用默认账户登录:
- 用户名:
admin - 密码:
admin123
-
添加项目:
- 项目名称:唯一标识符
- 仓库地址:Git HTTPS URL
- 分支:要部署的分支
- 部署目录:服务器路径
- Webhook Secret:安全密钥
-
配置部署脚本:
- 系统自动生成基础部署脚本
- 可自定义
pre_deploy.sh和post_deploy.sh
-
监控部署:
- 实时查看部署日志
- 部署状态统计
- 成功率分析
- 数据库:
/home/deploy/server-manager/data/deploy.db - 部署日志:
/opt/deploy/logs/ - 系统日志:
journalctl -u webhook.service -u flask-deploy.service - Nginx 日志:
/var/log/nginx/deploy_*.log
# 实时查看 Webhook 日志
sudo journalctl -u webhook.service -f
# 实时查看 Flask 日志
sudo journalctl -u flask-deploy.service -f
# 查看部署脚本日志
tail -f /opt/deploy/logs/project_name_*.log🔴 Webhook 服务无法启动
检查步骤:
- 验证配置文件语法:
webhook -validate-hooks /etc/webhook/hooks.json - 检查端口占用:
sudo netstat -tlnp | grep 9000 - 查看详细错误:
sudo journalctl -u webhook.service -l
解决方案:
# 修复配置文件权限
sudo chown webhook:webhook /etc/webhook/hooks.json
sudo systemctl restart webhook.service🔴 部署脚本执行失败
检查步骤:
- 验证脚本权限:
ls -la /opt/deploy/scripts/ - 检查目标目录权限:
ls -la /var/www/ - 测试手动执行:
sudo -u webhook bash /opt/deploy/scripts/deploy_project.sh
解决方案:
# 修复脚本权限
sudo chmod +x /opt/deploy/scripts/*.sh
sudo chown webhook:webhook /opt/deploy/scripts/*🔴 Flask 应用无法访问
检查步骤:
- 服务状态:
sudo systemctl status flask-deploy.service - 端口监听:
sudo netstat -tlnp | grep 5000 - Nginx 配置:
sudo nginx -t
解决方案:
# 重启相关服务
sudo systemctl restart flask-deploy.service nginx# 开发模式启动 Flask
cd flask_app
python3 app.py
# 调试 Webhook
webhook -hooks /etc/webhook/hooks.json -verbose -hotreload- 定期更新:
sudo apt update && sudo apt upgrade - 防火墙配置: 只开放必要端口 (22, 80, 443)
- SSH 安全: 禁用密码登录,使用密钥认证
- 用户权限: 使用专用用户运行服务
- 修改默认密码: 首次登录后立即修改 admin 密码
- 定期轮换: 定期更新 Webhook Secret
- 监控日志: 定期检查异常访问记录
- 备份数据: 定期备份数据库和配置文件
- 通知集成: Slack、钉钉、企业微信通知
- 监控集成: Prometheus、Grafana 指标收集
- 多环境: 开发、测试、生产环境隔离
- 主题切换: 支持深色模式
- 多语言: 国际化支持
- 自定义面板: 可配置的监控面板
Q: 支持哪些 Git 仓库提供商?
A: 目前主要支持 GitHub,理论上支持所有使用 Git 协议的仓库,包括:
- GitHub (完全支持)
- GitLab (部分支持)
- Gitee (部分支持)
- 自建 Git 服务器 (需要手动配置)
Q: 可以同时部署多个项目吗?
A: 可以!系统支持多项目管理,每个项目可以有独立的:
- 部署脚本
- Webhook 配置
- 日志记录
- 部署目录
Q: 支持哪些部署类型?
A: 支持多种部署场景:
- 静态网站 (HTML/CSS/JS)
- Node.js 应用
- Python 应用
- PHP 应用
- Docker 容器
- 自定义脚本部署
Q: 如何备份数据?
A: 可以使用以下方式备份:
# 使用 Makefile 一键备份
make backup
# 手动备份数据库
cp flask_app/data/deploy.db backup/deploy_$(date +%Y%m%d).db
# 备份日志文件
tar -czf backup/logs_$(date +%Y%m%d).tar.gz deploy/logs/Q: 系统资源占用如何?
A: 系统资源占用很低:
- 内存: ~100MB (Flask + Webhook 服务)
- CPU: 空闲时 <1%,部署时根据项目大小
- 磁盘: 基础安装 ~50MB,日志和数据库随使用增长
- 网络: 仅在 Git 拉取时占用
我们欢迎所有形式的贡献!🎉
- Fork 本项目 到你的 GitHub 账户
- 克隆项目 到本地:
git clone https://github.com/your-username/server-manager.git cd server-manager - 创建功能分支:
git checkout -b feature/amazing-feature
- 开发和测试 你的功能
- 提交更改:
git commit -m "feat: add amazing feature" - 推送到你的分支:
git push origin feature/amazing-feature
- 创建 Pull Request
我们使用 Conventional Commits 规范:
feat:新功能fix:修复 bugdocs:文档更新style:代码格式化refactor:代码重构test:测试相关chore:构建或工具变更
# 安装开发依赖
pip install -r requirements-dev.txt
# 运行测试
python -m pytest
# 代码格式化
black .
flake8 .
# 启动开发服务器
cd flask_app
python app.py发现 bug?请 创建 Issue 并提供:
- 环境信息 (操作系统、Python 版本等)
- 复现步骤
- 期望行为 vs 实际行为
- 错误日志 (如果有)
- 截图 (如果适用)
本项目采用 MIT 许可证。详见 LICENSE 文件。
- adnanh/webhook - Webhook 服务器
- Flask - Web 框架
- Tailwind CSS - CSS 框架
- Ubuntu - 操作系统支持
- 文档: 查看完整文档
- 问题反馈: 提交 Issue
- 讨论交流: Discussions
⭐ 如果这个项目对你有帮助,请给个 Star!



