跳到主要内容
CHENGYU

用 OliveTin 给常用命令做几个按钮

查看目录大小、列文件和计算校验值,可以做成 OliveTin 按钮。命令固定,只挂载需要读取的目录。

文章目录
LisaHost:原生与住宅IP产品,按套餐选择
腾讯云:锐驰型200Mbps峰值带宽,中国内地2核2G50元每月
DMIT:Premium中国大陆优化线路CN2GIA
晚安云:香港云服务器2核2G15元每月
雨云|国内外节点,灵活部署|云服务器 · 预装宝塔 / 1Panel
Evoxt:最高6.0GHz CPU,2.99美元每月起
搬瓦工|CN2 GIA 精品线路|洛杉矶 CN2 GIA 套餐
BRNCHost:Bursa土耳其游戏服务器,1Gbps端口,DDoS防护
WorkBuddy:交代任务,交付文件
京东云:AI进入真实业务
野草云:香港200Mbps峰值带宽,不限月流量,30元每月起
RackNerd:海外VPS21.99美元每年起

有些运维动作每次都一样:看某个目录占了多大、列出新文件、核对一份归档的校验值。OliveTin 可以把这些固定命令做成网页按钮,给自己或固定操作人员使用。

本文只读取一个专用目录,没有用户输入参数,也不给 Docker socket。命令在 OliveTin 容器里执行,不能把容器中的 df 结果误认为看到了宿主机全部磁盘。

只挂载需要查看的目录

OliveTin 执行的是部署机器上的命令,先确定按钮要操作哪台主机。需要新 VPS 时,可以从 雨云云服务器 查看配置,再按命令的实际任务选择资源。 优惠码 KuZhuJi。如有消费返利,以购买页所选规格显示的金额为准。

以下命令在 Linux VPS 上执行,需要有 Docker 操作权限。先运行 docker version 和 docker compose version,确认引擎与 Compose v2 都能工作。没有安装 Docker 时,按 Docker 官方安装说明选择对应发行版;不要把其他发行版的仓库配置直接复制过来。

示例工作目录为 /opt/olivetin,所有相对路径都以这个目录为基准。VPS_IP、SSH 用户和示例域名需要换成自己的值。端口 1337 若已被占用,只改映射左侧的宿主机端口,并同步修改访问地址。

sudo install -d -m 0750 -o "$(id -u)" -g "$(id -g)" /opt/olivetin
cd /opt/olivetin
umask 077

创建目录,将一份不含秘密的测试归档复制到 work/test.tar.gz。保存 config/config.yaml:

mkdir -p config work
listenAddressSingleHTTPFrontend: 0.0.0.0:1337
actions:
  - title: 查看交接目录大小
    shell: du -sh /work
    onclick: execution-dialog
  - title: 列出交接文件
    shell: ls -lh /work
    onclick: execution-dialog
  - title: 核对测试归档
    shell: sha256sum /work/test.tar.gz
    onclick: execution-dialog

数据目录只读挂载,按钮不接受任意路径或自由命令。若镜像缺少某个命令,应构建包含必要工具的受控镜像,不随手改成特权容器。

将下面内容保存为 compose.yaml:

services:
  olivetin:
    image: jamesread/olivetin:latest
    restart: unless-stopped
    ports:
      - "127.0.0.1:1337:1337"
    volumes:
      - ./config:/config:ro
      - ./work:/work:ro

在工作目录启动并检查日志:

docker compose config --quiet
docker compose pull
docker compose up -d
docker compose ps
docker compose logs --tail=80

启动后按下面的步骤试用。遇到目录不可写的报错,先核对 UID 和挂载路径,不要直接改成 chmod 777。

用 SSH 隧道打开界面

示例仅把应用端口发布到 VPS 的 127.0.0.1。在自己的电脑上运行以下命令,保留终端窗口,再打开 http://127.0.0.1:1337:

ssh -N -L 1337:127.0.0.1:1337 your_ssh_user@VPS_IP

浏览器里的回环地址是自己的电脑,SSH 把请求转到 VPS。若本地同号端口被占用,可换隧道左侧端口;涉及应用外部 URL 的项目也要一起调整。管理界面无需因此开放公网端口。

核对按钮结果对应哪个目录

启动后分别执行三个按钮,检查输出来自 /work。在宿主机用 sha256sum work/test.tar.gz 计算同一文件,两次值应一致。目录为空或文件名不匹配时,按钮应报错,不能给失败结果包装成“核验成功”。

继续添加按钮时,一次只加一个固定动作。需要执行宿主机命令时,可采用有范围限制的 SSH 账号和服务器端受控脚本,先明确命令能影响什么;只为“重启某个服务”授予整个 Docker daemon 权限通常过宽。

以后加用户输入必须按项目文档限制类型和范围,不能把任意文本直接拼接进 shell。隐藏按钮只是界面行为,不能代替访问控制。

本文的入口仅经 SSH 使用。多人网页访问时,先配置并实际验证认证与 ACL,再接公网 HTTPS。

保留按钮配置与脚本

恢复后检查按钮配置、只读挂载和一次校验。配置文件中的脚本路径必须对应当前容器环境;如果调用外部脚本,也要将脚本和依赖版本一起留档。

在工作目录执行下面的停机备份,压缩包保存在应用目录之外。停止全部服务会带来短暂不可用;确认停止成功后再打包。

docker compose stop
sudo install -d -m 0700 /var/backups/docker-apps
backup_file="/var/backups/docker-apps/$(basename "$PWD")-$(date +%Y%m%d-%H%M%S).tar.gz"
sudo tar -czpf "$backup_file" compose.yaml config work
sudo chmod 0600 "$backup_file"
sudo tar -tzf "$backup_file" | head
docker compose start

将压缩包复制到 VPS 之外。恢复时,在另一台测试机器的空目录解包,保留文件所有者和相对路径,用原镜像版本启动,检查前面提到的数据。不要直接覆盖正在使用的原数据目录。

升级前先记录镜像 ID 或摘要,并保存这份备份。阅读项目更新说明后再拉取镜像;涉及数据库迁移时,回滚需要恢复旧数据与旧镜像,不能只把标签改回去。

安装参数和数据路径可对照OliveTin 配置文档。

继续阅读 返回顶部