Spug 运维平台:NAS 上用 Docker 部署,主机、任务、发布一个面板管起来
作者
小编
发布时间

项目介绍
Spug 是一个开源的轻量级运维平台。它把平时散落在脚本和命令里的活收进一个网页:主机清单、批量执行、应用发布、定时任务,都在同一个面板里点。
对家里有 NAS、又跑着几台机器的人来说,它的用处是「少记几个命令」:主机加进列表,以后连哪台机器不用翻笔记;常用的清理、备份写成任务,到点自己跑;应用发布走一遍「申请 → 审核 → 发布」,谁在什么时候发了哪个版本,记录都在。
它不是一个开箱就替你干活的工具,而是把「你在哪台机器上执行了什么」这件事变成可视化、可追溯的操作。
项目地址:点我跳转
部署安装
只要能跑 Docker 的 NAS 都能装,下面用飞牛 NAS 演示:先用 帕斯内网穿透 拿到一个公网地址,再用 Docker Compose 把 Spug 装起来。先穿透、后部署,装完直接用公网地址打开,在外面也能进面板处理事情。
一、先用帕斯内网穿透拿到公网地址
飞牛的「应用中心」里搜 PassNAT,装上这个穿透插件,打开它,点「创建隧道」。隧道名字随便起(不超过 12 个字符),接入节点和传输协议留默认,本地 IP 留默认的 127.0.0.1,本地端口填 8080(就是下面编排里冒号左边那个端口)。
建好之后点开这条隧道,按一下电源,状态变成运行中,详情里就能看到分配好的公网地址(形如 IP:端口),先记下来。
不是飞牛的系统,PassNAT 文档的「连接使用」里有其他系统的连接教程:点我跳转。
二、新建 Compose 项目
打开飞牛的「Docker」应用,切到「Compose」标签,点右上角的新增项目。项目名称填 spug,路径在「我的文件」下面挑一个空文件夹,没有就当场新建一个。来源选「创建 docker-compose.yml」,把下面这段整个贴进去:
1services:2 db:3 image: mariadb:10.84 container_name: spug-db5 restart: always6 command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci7 volumes:8 - ./spug/mysql:/var/lib/mysql9 environment:10 - MYSQL_DATABASE=spug11 - MYSQL_USER=spug12 - MYSQL_PASSWORD=请替换为你的数据库口令13 - MYSQL_ROOT_PASSWORD=请替换为你的数据库口令14 spug:15 image: openspug/spug-service:latest16 container_name: spug17 privileged: true18 restart: always19 volumes:20 - ./spug/service:/data/spug21 - ./spug/repos:/data/repos22 ports:23 - "8080:80"24 environment:25 - SPUG_DOCKER_VERSION=v4.0.126 - MYSQL_DATABASE=spug27 - MYSQL_USER=spug28 - MYSQL_PASSWORD=请替换为你的数据库口令29 - MYSQL_HOST=db30 - MYSQL_PORT=330631 depends_on:32 - db
这段编排里有两处要改:MYSQL_PASSWORD 和 MYSQL_ROOT_PASSWORD 换成你自己的口令,两处填一样的就行;宿主机端口 8080 对应隧道里填的本地端口,想换就两处一起改。Spug 的容器要 privileged: true,因为它的 Web 终端和文件分发要操作宿主机环境。
勾上「创建项目后立即启动」,镜像下完就起来了。第一次启动会从上游拉取对应版本的代码,日志里看到 nginx 和 spug-api 都起来了,就算启动完成。
三、初始化数据库、建管理员
Spug 的镜像第一次启动只准备运行环境,不会自动建表。进容器跑两条命令:
1docker exec spug python3 manage.py updatedb2docker exec spug python3 manage.py user add -u admin -p 你的口令 -n 管理员 -s
第一条建表,第二条建管理员账号,-s 表示超级管理员。跑完打开地址,用刚建的账号登录。如果登录后弹出「未能获取到访问者的真实 IP」的安全提示,在「系统管理 → 系统设置」里把基于 IP 的登录校验关掉,或者让请求带上真实 IP 头。
四、主机管理:把机器加进清单
左边是分组,右边是主机列表。点「新建」加一台:填主机名称、登录用户名、主机名或 IP、SSH 端口,再选口令或密钥,保存时它会试着连一次,连得通就标成「已验证」。加进来的机器可以按分组归类,列表里能看到核数和内存,点「Web 终端」直接在浏览器里开一个 shell。
五、批量执行和任务计划
批量执行:选一批主机,把要跑的命令发下去,执行结果逐台回显;常用的命令可以存成模板,也能把本地文件分发到多台机器。
任务计划:点「新建」,三步——先写任务(选 Shell 或 Python,把命令贴进去),再选执行对象,最后设置触发器。触发器支持一次性、日历间隔、普通间隔和 UNIX cron,比如每天凌晨两点备份数据库,填一个 cron 表达式就行。任务列表里能看到最近一次执行的状态:待调度、执行中、成功或失败。
六、应用发布:把上线做成流程
发布配置里先建应用(名称和标识符),再给应用配一个发布:选环境、选目标主机、选常规发布或自定义发布,填仓库地址和部署目录。
构建仓库里能看到每个应用构建出的版本;发布申请里是发布记录,状态从待审核、待发布、发布中走到发布成功或发布异常,谁申请的、发的是哪个版本,一条条都留着。要不要审核,可以在发布配置里开关。
七、其他几个面板
配置中心:环境、服务、应用配置分开管,发布时直接引用。
监控中心:给主机加监控任务,按频率采集;报警中心:配告警规则和通知方式。
系统管理:账户、角色、登录日志和系统设置,权限按页面分配。
几点说明
数据在哪。 主机、任务、发布记录都在 MariaDB 里,对应编排里的 db 容器;Spug 自己的代码和数据在 spug 容器的 /data/spug 下。备份这两个卷就够了。
升级。 镜像标签用 latest,代码版本由 SPUG_DOCKER_VERSION 决定。升级前先备份数据库卷,再重新拉镜像、重启项目。
它管的是「你已有的机器」。 它不会替你装系统、也不会自动发现主机,机器要先能 SSH 登录,再手动加进清单。