# spug **Repository Path**: daywsid/spug ## Basic Information - **Project Name**: spug - **Description**: 开源运维平台:面向中小型企业设计的无 Agent的自动化运维平台,整合了主机管理、主机批量执行、主机在线终端、文件在线上传下载、应用发布、任务计划、配置中心、监控、报警等一系列功能。 - **Primary Language**: Python - **License**: AGPL-3.0 - **Default Branch**: 3.0 - **Homepage**: https://spug.cc - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 978 - **Created**: 2026-07-11 - **Last Updated**: 2026-07-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

Spug

Spug是面向中小型企业设计的轻量级无Agent的自动化运维平台,整合了主机管理、主机批量执行、主机在线终端、应用发布部署、在线任务计划、配置中心、监控、报警等一系列功能。
- 项目官网:https://ops.spug.cc - 使用文档:https://ops.spug.cc/docs/about-spug/ ## 演示环境 演示地址:https://demo.spug.cc ## 特性 - **批量执行**: 主机命令在线批量执行 - **在线终端**: 主机支持浏览器在线终端登录 - **文件管理**: 主机文件在线上传下载 - **任务计划**: 灵活的在线任务计划 - **发布部署**: 支持自定义发布部署流程 - **配置中心**: 支持KV、文本、json等格式的配置 - **监控中心**: 支持站点、端口、进程、自定义等监控 - **报警中心**: 支持短信、邮件、钉钉、微信等报警方式 - **优雅美观**: 基于 Ant Design 的UI界面 - **开源免费**: 前后端代码完全开源 ## 环境 * Python 3.8+ * Django 2.2 * Node 12.14 * React 16.11 ## 安装 [官方文档](https://ops.spug.cc/docs/install-docker) 更多使用帮助请参考: [使用文档](https://ops.spug.cc/docs/host-manage/) ### 自定义版本(含密码认证、执行历史回溯、代理主机) 本仓库在官方 Spug 基础上做了以下增强: - **主机密码认证**:Host 模型新增 `pwd` 字段,SSH 连接优先使用密码认证,兼容私钥认证 - **执行历史回溯**:新增 `ExecResult` 模型持久化每台主机的执行结果,支持查看历史执行详情 - **代理主机功能**:通过 paramiko `direct-tcpip` channel 实现多级跳板机代理 - **private_key 容错**:未配置全局密钥时不再抛 KeyError - **SSH 连接重试**:并发批量执行时,SSH 连接失败自动重试 3 次(间隔 1s、2s),解决代理主机并发连接限制导致的 "Error reading SSH protocol banner" 问题 #### Docker 镜像部署(推荐) 镜像已推送到阿里云容器镜像仓库,可直接拉取使用。三个镜像(spug 应用、mariadb 数据库、nginx 反向代理)都已在仓库中提供。 **1. 拉取镜像** ```bash docker pull crpi-o2t7vcya8uijl4kc.cn-hangzhou.personal.cr.aliyuncs.com/wsid/spug:latest docker pull crpi-o2t7vcya8uijl4kc.cn-hangzhou.personal.cr.aliyuncs.com/wsid/mariadb:10.8.2 docker pull crpi-o2t7vcya8uijl4kc.cn-hangzhou.personal.cr.aliyuncs.com/wsid/nginx:alpine ``` **2. 创建 docker-compose.yml** ```yaml services: db: image: crpi-o2t7vcya8uijl4kc.cn-hangzhou.personal.cr.aliyuncs.com/wsid/mariadb:10.8.2 container_name: spug-db restart: always command: --port 3306 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci volumes: - /data/spug_deploy/mysql:/var/lib/mysql environment: - MYSQL_DATABASE=spug - MYSQL_USER=spug - MYSQL_PASSWORD=spug.cc - MYSQL_ROOT_PASSWORD=spug.cc spug: image: crpi-o2t7vcya8uijl4kc.cn-hangzhou.personal.cr.aliyuncs.com/wsid/spug:latest container_name: spug privileged: true restart: always volumes: - /data/spug_deploy/service:/data/spug - /data/spug_deploy/repos:/data/repos environment: - MYSQL_DATABASE=spug - MYSQL_USER=spug - MYSQL_PASSWORD=spug.cc - MYSQL_HOST=db - MYSQL_PORT=3306 depends_on: - db nginx: image: crpi-o2t7vcya8uijl4kc.cn-hangzhou.personal.cr.aliyuncs.com/wsid/nginx:alpine container_name: spug-nginx restart: always ports: - "80:80" - "443:443" volumes: - /data/spug_deploy/nginx.conf:/etc/nginx/nginx.conf:ro - /data/spug_deploy/ssl:/ssl:ro depends_on: - spug ``` **3. 创建 nginx 配置文件(重要)** 在启动前**必须**先创建 nginx 配置文件,否则 Docker 会把 `nginx.conf` 当作目录创建,导致 nginx 容器启动失败(报错 `mount ... not a directory`): ```bash mkdir -p /data/spug_deploy/{mysql,service,repos,ssl} cat > /data/spug_deploy/nginx.conf <<'EOF' worker_processes auto; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; client_max_body_size 1024m; upstream spug_backend { server spug:80; } server { listen 80; server_name _; # 如需启用 HTTPS,取消下面一行注释 # return 301 https://$host$request_uri; location / { proxy_pass http://spug_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } # 如需启用 HTTPS,取消下面注释并配置证书路径 # server { # listen 443 ssl; # server_name your.domain.com; # ssl_certificate /ssl/ssl.crt; # ssl_certificate_key /ssl/ssl.key; # ssl_protocols TLSv1.2 TLSv1.3; # location / { # proxy_pass http://spug_backend; # proxy_set_header Host $host; # proxy_set_header X-Real-IP $remote_addr; # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # proxy_set_header X-Forwarded-Proto $scheme; # proxy_http_version 1.1; # proxy_set_header Upgrade $http_upgrade; # proxy_set_header Connection "upgrade"; # } # } } EOF ``` > 如需启用 HTTPS,将 SSL 证书文件放到 `/data/spug_deploy/ssl/` 目录下(命名为 `ssl.crt` 和 `ssl.key`),并取消 nginx.conf 中 HTTPS 部分的注释。 **4. 启动服务** ```bash docker compose up -d ``` **5. 等待数据库就绪(重要)** MariaDB 首次启动需要几秒到几十秒来初始化数据库,必须等数据库完全就绪后再执行初始化。否则会报 `Unknown database 'spug'` 错误。 ```bash # 方法一:等待 spug-db 日志出现 "ready for connections" docker logs -f spug-db # 看到 "mysqld: ready for connections" 后按 Ctrl+C 退出 # 方法二:循环检测数据库是否就绪(推荐) until docker exec spug-db mysql -uroot -p"spug.cc" -e "SHOW DATABASES LIKE 'spug';" 2>/dev/null | grep -q spug; do echo "等待 MariaDB 初始化完成..." sleep 3 done echo "MariaDB 已就绪" ``` **6. 初始化管理员账户** ```bash docker exec -it spug init_spug admin admin123 ``` 访问 `http://<服务器IP>:<端口>` 即可使用,默认管理员账号 `admin` / 密码 `admin123`。 #### 从源码构建镜像 如需自行构建镜像,可使用仓库自带的 Dockerfile: ```bash git clone https://gitee.com/daywsid/spug.git cd spug docker build -t spug-custom:latest -f docs/docker/Dockerfile.custom . ``` #### 升级 升级时只需拉取新镜像并重启容器,entrypoint 会自动用新代码覆盖挂载目录中的旧代码(保留 overrides.py 等运行时配置): ```bash docker pull crpi-o2t7vcya8uijl4kc.cn-hangzhou.personal.cr.aliyuncs.com/wsid/spug:v1.1 docker compose down docker compose up -d # 或升级到最新版本 # docker pull crpi-o2t7vcya8uijl4kc.cn-hangzhou.personal.cr.aliyuncs.com/wsid/spug:latest ``` > 如需指定版本,可把 `latest` 替换为具体版本号,如 `v1.1`。可用版本请查看 [Releases](https://gitee.com/daywsid/spug/releases)。 #### 版本说明 | 版本 | 主要特性 | | --- | --- | | v1.1 | 批量执行汇总视图(实时+历史)、SSH 旧算法兼容(ssh-rsa/ssh-dss)、历史记录一键再次执行 | | v1.0 | 密码认证、执行历史全量保留、代理主机、SSH 连接重试 | ## 推荐项目 [Yearning — MYSQL 开源SQL语句审核平台](https://github.com/cookieY/Yearning) ## 预览 ### 主机管理 ![image](https://cdn.spug.cc/img/3.0/host.jpg) #### 主机在线终端 ![image](https://cdn.spug.cc/img/3.0/web-terminal.jpg) #### 文件在线上传下载 ![image](https://cdn.spug.cc/img/3.0/file-manager.jpg) #### 主机批量执行 ![image](https://cdn.spug.cc/img/3.0/host-exec.jpg) ![image](https://cdn.spug.cc/img/3.0/host-exec2.jpg) #### 应用发布 ![image](https://cdn.spug.cc/img/3.0/deploy.jpg) #### 监控报警 ![image](https://cdn.spug.cc/img/3.0/monitor.jpg) #### 角色权限 ![image](https://cdn.spug.cc/img/3.0/user-role.jpg) ## 赞助

UCloud
5 元/月云主机

阿里云
2核心2G低至99元/年

马哥教育
IT人高薪职业学院
## 开发者群 #### 关注Spug运维公众号加微信群、QQ群、获取最新产品动态
spug-qq
## License & Copyright [AGPL-3.0](https://opensource.org/licenses/AGPL-3.0)