Uptime Kuma Docker Compose 部署指南
Ubuntu 22.04 上以 Docker Compose 部署 Uptime Kuma 1.23.17 的完整实测:compose.yml(数据卷/自动重启/健康检查)、初始化、反代 HTTPS、升级与常见问题。
Uptime Kuma Docker Compose 部署指南
> 目标:用 Docker Compose 在 Ubuntu 22.04 上完成 Uptime Kuma 1.23.17 的生产级部署——带数据卷持久化、自动重启与健康检查,覆盖初始化、反代 HTTPS、升级与常见问题排查,全部命令实测回显。
一、环境信息
| 项目 | 值 |
|---|---|
| 操作系统 | Ubuntu 22.04(x86_64) |
| Docker | 29.8.1 |
| Docker Compose | v5.5.1 |
| 镜像 | louislam/uptime-kuma:1(实测内含版本 1.23.17,2025-07-15 发布) |
| 服务端口 | 3001 |
| 数据目录 | /opt/data/uptime-kuma(宿主机路径,挂载到 /app/data) |
| 编排目录 | /opt/data/quzuo/uptime-kuma-compose |
| 验证日期 | 2026-10-17 |
镜像内实际版本可通过一次性运行核实,避免「标签 ≠ 版本」的误会:
$ docker run --rm --entrypoint /bin/sh louislam/uptime-kuma:1 \
-c "node -e 'console.log(require(\"/app/package.json\").version)'"
1.23.17
二、部署前提
- Docker 与 Compose 就绪:
docker version与docker compose version均能正常输出(本机实测 29.8.1 / v5.5.1); - 端口 3001 未被占用:
ss -tlnp | grep 3001无输出即可; - 数据目录已创建:
mkdir -p /opt/data/uptime-kuma,宿主机目录由容器进程自动写入,无需预先设置属主; - 镜像可拉取:海外网络不畅时先配置镜像加速或代理,
docker pull louislam/uptime-kuma:1成功后再继续。
三、编写 compose.yml
在编排目录创建 compose.yml(本篇实测文件,与《Uptime Kuma 配置参数详解》中提到的环境变量可自由组合):
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma-1.23.17-monitor
restart: always
ports:
- "3001:3001"
volumes:
- /opt/data/uptime-kuma:/app/data
healthcheck:
test: ["CMD-SHELL", "extra/healthcheck"]
interval: 60s
timeout: 30s
retries: 5
start_period: 180s
逐项说明:
| 字段 | 取值 | 说明 |
|---|---|---|
| image | louislam/uptime-kuma:1 | :1 为滚动标签,自动跟随 1.x 最新版;追求确定性可固定为 :1.23.17 |
| container_name | uptime-kuma-1.23.17-monitor | 固定容器名,日志排查与脚本引用都依赖它 |
| restart | always | 宿主机重启、进程崩溃后自动拉起 |
| ports | 3001:3001 | 宿主端口:容器端口;若只走反向代理,可改为 127.0.0.1:3001:3001 收紧暴露面 |
| volumes | /opt/data/uptime-kuma:/app/data | 全部业务数据(SQLite 数据库与上传文件)落在宿主机目录,升级与重建不丢数据 |
| healthcheck | extra/healthcheck | 官方镜像自带探针脚本,检测数据库可写与服务响应(与镜像内置定义一致,此处显式声明便于按环境调参) |
用 docker compose config 校验文件语法,确认渲染结果无告警:
$ docker compose config --no-interpolate | head -12
name: uptime-kuma-compose
networks:
default:
name: uptime-kuma-compose_default
services:
uptime-kuma:
container_name: uptime-kuma-1.23.17-monitor
healthcheck:
interval: 60s
retries: 5
start_period: 180s
test:
- CMD-SHELL
- extra/healthcheck
四、启动与初始化流程
启动:
$ docker compose up -d
[+] Running 1/1
✔ Container uptime-kuma-1.23.17-monitor Started
观察首次启动日志(确认版本、数据库与监听):
$ docker compose logs --no-log-prefix 2>&1 | head -30
==> Performing startup jobs and maintenance tasks
==> Starting application with user 0 group 0
Welcome to Uptime Kuma
Your Node.js version: 18.20.3
2026-10-17T08:44:45Z [SERVER] INFO: Welcome to Uptime Kuma
2026-10-17T08:44:45Z [SERVER] INFO: Node Env: production
2026-10-17T08:44:45Z [SERVER] INFO: Inside Container: true
2026-10-17T08:44:45Z [SERVER] INFO: Importing Node libraries
2026-10-17T08:44:46Z [SERVER] INFO: Creating express and socket.io instance
2026-10-17T08:44:46Z [SERVER] INFO: Server Type: HTTP
2026-10-17T08:44:46Z [NOTIFICATION] INFO: Prepare Notification Providers
2026-10-17T08:44:46Z [SERVER] INFO: Version: 1.23.17
2026-10-17T08:44:46Z [DB] INFO: Data Dir: ./data/
2026-10-17T08:44:46Z [DB] INFO: Connecting to the Database
2026-10-17T08:44:46Z [DB] INFO: SQLite config:
[ { journal_mode: 'wal' } ]
[ { cache_size: -12000 } ]
2026-10-17T08:44:46Z [DB] INFO: SQLite Version: 3.41.1
2026-10-17T08:44:46Z [SERVER] INFO: Connected
2026-10-17T08:44:46Z [DB] INFO: Your database version: 10
2026-10-17T08:44:46Z [DB] INFO: Latest database version: 10
2026-10-17T08:44:46Z [DB] INFO: Database patch not needed
2026-10-17T08:44:46Z [SERVER] INFO: Load JWT secret from database.
2026-10-17T08:44:46Z [SERVER] INFO: Listening on 3001
关键行解读:Version: 1.23.17 确认版本;journal_mode: wal 说明数据库工作在 WAL 模式;Your database version: 10 / Database patch not needed 表示库结构就绪;Listening on 3001 即服务可访问。日志出现 No user, need setup 表示尚未创建管理员。
初始化管理员:浏览器访问 http://<服务器IP>:3001,进入设置向导,依次填写用户名、密码(两次)后提交。完成后自动登录并跳转监控面板。初始化只此一次:首次之后 setup 接口自动失效,重复请求只会返回 Added user. We don't need more users.,不存在「公网被抢先初始化」的持续风险,但仍建议初始化完成后再向公网开放端口。
确认运行状态:
$ docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
uptime-kuma-1.23.17-monitor louislam/uptime-kuma:1 "/usr/bin/dumb-init …" uptime-kuma 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:3001->3001/tcp, [::]:3001->3001/tcp
STATUS 列出现 healthy 即健康检查通过,可对外提供服务。
五、数据卷与目录结构
首次启动后宿主机数据目录内容:
$ ls -la /opt/data/uptime-kuma/
drwxr-xr-x 5 root root 4096 10月 17 16:05 .
drwxr-xr-x 2 root root 4096 10月 17 16:05 docker-tls
-rwxr-xr-x 1 root root 262144 10月 17 16:45 kuma.db
-rwxr-xr-x 1 root root 32768 10月 17 16:45 kuma.db-shm
-rwxr-xr-x 1 root root 1219552 10月 17 16:45 kuma.db-wal
drwxr-xr-x 2 root root 4096 10月 17 16:05 screenshots
drwxr-xr-x 2 root root 4096 10月 17 16:05 upload
- kuma.db(及 -wal / -shm):SQLite 数据库三件套,存储用户、监控项、心跳、通知与状态页,是备份的核心(详见《Uptime Kuma 运维手册》);
- upload:界面收集的自定义图标、证书等文件;
- screenshots:浏览器监控的截图缓存;
- docker-tls:监控其他 Docker 宿主机时的证书目录。
验证持久化最直接的方式:删除容器再按同一编排启动,登录态与监控项原样保留——数据全部在宿主机目录,容器本身无状态,这也是升级无所畏惧的原因。
六、健康检查机制
官方镜像内置健康检查定义,实测读取:
$ docker inspect louislam/uptime-kuma:1 --format '{{json .Config.Healthcheck}}'
{"Test":["CMD-SHELL","extra/healthcheck"],"Interval":60000000000,"Timeout":30000000000,"StartPeriod":180000000000,"Retries":5}
即每 60 秒执行一次镜像内的 extra/healthcheck 脚本(内部做数据库连通与服务响应探测),超时 30 秒,启动宽限期 180 秒(首次启动要做数据库初始化,较慢属正常),连续 5 次失败标记 unhealthy。compose.yml 中显式声明同样参数的意义:让编排文件自描述,且可按环境放宽(例如低配设备把 start_period 加到 300s)。
人工排查时可直接看最近一次探针结果:
$ docker inspect --format '{{json .State.Health}}' uptime-kuma-1.23.17-monitor | python3 -m json.tool
{
"Status": "healthy",
"FailingStreak": 0,
"Log": [ ... ]
}
FailingStreak 大于 0 时,Log 数组里会携带探针脚本的输出与退出码,是最快的定位入口。
七、反向代理与 HTTPS 提示
Uptime Kuma 界面重度依赖 WebSocket(心跳实时刷新),反代配置必须放行 Upgrade 头。Nginx 参考片段:
server {
listen 443 ssl;
server_name status.example.com;
# ssl_certificate / ssl_certificate_key 按你的证书路径配置
location / {
proxy_pass http://127.0.0.1:3001;
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";
proxy_read_timeout 86400s;
}
}
Caddy 更简单,自动签发证书并默认透传 WebSocket:
status.example.com {
reverse_proxy 127.0.0.1:3001
}
两个提示:
- TLS 终结在代理层是推荐姿势,监控进程保持 HTTP,证书轮换不触碰服务;若坚持让服务直接 HTTPS,《Uptime Kuma 配置参数详解》第三节给出的
UPTIME_KUMA_SSL_KEY/UPTIME_KUMA_SSL_CERT变量可在编排文件中用environment段传入; - 初始化完成前不要把代理端口暴露到公网,防止向导被陌生人抢先完成;确有需要时,在数据目录放置
setup.json(内容{"setup": false})可关闭向导。
八、版本升级方法
标准升级三步(先读《Uptime Kuma 运维手册》第五节,升级前完成一次备份):
$ docker compose pull
Image louislam/uptime-kuma:1 Pulling
Image louislam/uptime-kuma:1 Pulled
$ docker compose up -d
[+] Running 1/1
✔ Container uptime-kuma-1.23.17-monitor Started
pull 拉取 :1 标签指向的最新 1.x 版本,up -d 用新镜像重建容器;数据在宿主机目录,重建无损。首次启动新版本时日志会出现 Database Patch 2.0 Process 与补丁脚本执行记录,迁移自动完成。
当前镜像元信息(升级前后对比体积与创建时间):
$ docker compose images
CONTAINER REPOSITORY TAG PLATFORM IMAGE ID SIZE CREATED
uptime-kuma-1.23.17-monitor louislam/uptime-kuma 1 linux/amd64 70233f4acb51 724MB 4 weeks ago
标签策略::1 省心但升级时间不可控;:1.23.17 完全受控但需手动改标签滚动。折中方案是编排文件固定小版本标签,由你按节奏修改后 up -d。
两条红线:
- 不要从 2.x 降回 1.x,库结构不兼容,只能靠备份回退;
- 升级后若界面白屏或数据异常,先强制刷新浏览器(旧前端缓存与新版接口不匹配),再查日志。
九、常见问题
1. 端口 3001 被占用。ss -tlnp | grep 3001 找出占用进程;无法让出时改编排文件映射(如 3002:3001),界面改从新端口访问,反向代理目标同步修改。
2. 容器反复重启(Restarting)。先看日志:docker compose logs --tail 50。最常见原因是数据目录权限异常或目录挂载路径写错(宿主路径不存在时 Compose 会自动创建空目录,表现为初始化向导再次出现)——初始化页重现几乎总是数据卷没挂对,先核对 volumes 段再动手。
3. 状态一直 starting / unhealthy。启动宽限期 180 秒内属正常;超时后仍 starting,用 docker inspect --format '{{json .State.Health}}' 看 FailingStreak 与探针输出,多为宿主机资源耗尽或数据库文件损坏(恢复路径见《Uptime Kuma 运维手册》)。
4. 升级后界面显示旧版本。浏览器缓存所致,强制刷新(Ctrl+F5)即可;确认实际版本以日志中 Version: 行为准。
5. 页面能打开但心跳不实时刷新。反向代理未放行 WebSocket,按第七节补齐 Upgrade 头,或临时直连 3001 端口验证差异。
6. 想让监控数据落在指定磁盘。把编排文件的宿主侧路径改为目标盘路径(如 /data1/uptime-kuma)并整体迁移目录内容,docker compose up -d 重建后生效。
十、参考链接
- Uptime Kuma 官方仓库:https://github.com/louislam/uptime-kuma
- 官方 Docker 部署文档:https://github.com/louislam/uptime-kuma/wiki#docker
- Docker Compose 官方文档:https://docs.docker.com/compose/
- Docker Engine 健康检查说明:https://docs.docker.com/reference/dockerfile/#healthcheck
- Docker Hub 镜像页:https://hub.docker.com/r/louislam/uptime-kuma
- 相关文档:《Beszel Docker Compose 部署指南》《Prometheus 3.x Docker Compose 部署指南》《Grafana Docker Compose 部署指南》