ZMUKE DevOps / hosts/zmuke-n-00001/OPERATIONS.md

zmuke-n-00001 运维操作

通用前提:

总览

ssh zmuke-brain 'docker ps --format "{{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}"'
ssh zmuke-brain 'systemctl list-units --type=service --state=running --no-pager --no-legend'
ssh zmuke-brain 'systemctl list-timers --no-pager --no-legend'

zmuke-gitea

# 状态与日志
ssh zmuke-brain 'docker ps --filter name=zmuke-gitea --format "{{.Status}}"'
ssh zmuke-brain 'docker logs --tail=100 zmuke-gitea'
# 启停(需授权,在主机上执行)
cd /opt/zmuke-gitea && sudo docker compose up -d
cd /opt/zmuke-gitea && sudo docker compose down

验证:

ssh zmuke-brain 'curl -fsS http://127.0.0.1:3002/api/healthz'

备份:/opt/zmuke-gitea/data 是权威状态,必须纳入加密备份。本仓不承载备份产物, 备份策略见 vault / 备份侧文档。

回滚:镜像按 digest 固定(Gitea 1.27.0),改回上一 digest 后 up -d

cloudflared

ssh zmuke-brain 'docker ps --filter name=cloudflared --format "{{.Status}}"'
ssh zmuke-brain 'docker logs --tail=50 zmuke-cloudflared'   # 期望看到 Registered tunnel connection
# 启停(需授权)
cd ~/devops/docker/cloudflared && docker compose up -d

隧道 ingress 规则在 Cloudflare Zero Trust 控制台,不在主机文件内。 隧道 ID 在文档中一律写 <TUNNEL_ID>

回滚:镜像为浮动 latest,无固定版本;回滚前需先确定上一可用 digest。

zmuke-pages

ssh zmuke-brain 'curl -fsS -o /dev/null -w "%{http_code}\n" http://127.0.0.1:3080/'
ssh zmuke-brain 'docker logs --tail=50 zmuke-pages'

站点内容由 zmuke-fleet-prototype 的 Actions 发布到 /opt/zmuke-pages内容回滚在 fleet 仓重跑发布流水线,不在本仓操作。

act-runner

ssh zmuke-brain 'systemctl is-active act-runner'
ssh zmuke-brain 'sudo journalctl -u act-runner -n 100 --no-pager'
# 重启(需授权)
sudo systemctl restart act-runner

在 Gitea Web 的 Actions Runners 页确认在线。/opt/act-runneradminb84002 不可读,排查需 root。

vault-backup

ssh zmuke-brain 'systemctl list-timers vault-backup.timer --no-pager'
ssh zmuke-brain 'sudo journalctl -u vault-backup.service -n 50 --no-pager'
# 手动触发一次(需授权)
sudo systemctl start vault-backup.service

计划:每日 09:31 UTC,Persistent=true(错过会补跑)。 恢复流程属 vault 模块,见 zmuke-vault 仓,不在此重写。

evebox

ssh zmuke-brain 'curl -s -o /dev/null -w "%{http_code}\n" http://192.168.5.200:5636/'
ssh zmuke-brain 'systemctl is-active suricata'
ssh zmuke-brain 'docker logs --tail=50 evebox'

无数据先查 suricata.service/var/log/suricata/eve.json 是否在产出。 数据在 /opt/evebox/data/*.sqlite(root 属主),重建容器前确认不会被清除。

logging 栈

当前未运行,且归属未定。在 owner 决定前不要启动。 状态确认:

ssh zmuke-brain 'docker ps -a --filter name=slaunchx-loki --format "{{.Names}}\t{{.Status}}"'

站点发布(本仓自身)

python3 scripts/build-site.py
bash scripts/verify-site.sh
git --no-pager diff --check
# 提交 public/ 后, 合并 main -> preview 触发 Gitea Actions 发布