部署
Docker 部署
10 MB 的 scratch 镜像,一条 docker run。
镜像是 FROM scratch 里放同一个 musl 静态二进制加一份 zoneinfo,约 10 MB,以 uid 65534 运行。
docker run -d --name monitor -p 28080:28080 \
-v monitor-data:/data -e TZ=Asia/Shanghai \
ghcr.io/stqfdyr/monitorbash首次启动的应急密码在日志里:
docker logs monitor | grep Emergencybashcompose
services:
monitor:
image: ghcr.io/stqfdyr/monitor
container_name: monitor
restart: unless-stopped
# 127.0.0.1 而不是 0.0.0.0:容器端口只对本机开,域名由反代接进来。
ports:
- "127.0.0.1:28080:28080"
environment:
TZ: Asia/Shanghai
volumes:
- monitor-data:/data
volumes:
monitor-data:yaml反代照反向代理那一页配,上游写 127.0.0.1:28080。
TZ 必须设
TZ 要设成 hub 所在的时区。 日流量和账单周期按本地日期切换,不设就按 UTC 算——
到点不归零,也不会有任何报错。这是这个镜像唯一一个「不设就静默算错」的地方。
数据
数据库和主题目录都在 /data,就是二进制部署里 /opt/monitor/data 的那一份。
挂主机目录代替 named volume 时,先把属主改对——镜像里没有 shell,容器也不以 root 跑,
mkdir 和 chown 都做不了:
sudo mkdir -p /srv/monitor && sudo chown 65534:65534 /srv/monitor
docker run -d --name monitor -p 127.0.0.1:28080:28080 \
-v /srv/monitor:/data -e TZ=Asia/Shanghai ghcr.io/stqfdyr/monitorbash容器里为什么绑通配符
镜像的 ENTRYPOINT 不带 --listen,用的是二进制自己的默认值 [::]:28080。
容器里绑回环,-p 就映射不进去。
所以对外的那道闸交给 -p:写 127.0.0.1:28080:28080 而不是 28080:28080,
效果和一键脚本装出来的一样——端口只在本机可达,公网要经过反代。
升级
docker pull ghcr.io/stqfdyr/monitor
docker rm -f monitor && docker run -d ... # 同一条命令,数据在 volume 里bashagent 不提供镜像
这是有意的。agent 是一个无运行时依赖、常驻几 MiB 的静态二进制,而它要装的地方通常是那批 资源最少的 VPS。为它引入一整套容器运行时,账算不过来。
被监控的机器直接跑安装命令就好。