Skip to content

feat: add Uptime Kuma uptime monitoring service#49

Closed
kossakovsky wants to merge 1 commit into
mainfrom
feature/add-uptime-kuma
Closed

feat: add Uptime Kuma uptime monitoring service#49
kossakovsky wants to merge 1 commit into
mainfrom
feature/add-uptime-kuma

Conversation

@kossakovsky

Copy link
Copy Markdown
Owner

Summary

  • Add Uptime Kuma as a new optional service (uptime-kuma profile)
  • Self-hosted uptime monitoring with 90+ notification services (62k+ GitHub stars)
  • Single container, built-in auth (no Caddy basic auth needed), SQLite storage, WebSocket support

Changes

  • docker-compose.yml: Add uptime-kuma service with healthcheck, volume
  • Caddyfile: Add reverse proxy block for Uptime Kuma
  • .env.example: Add hostname variable
  • scripts/04_wizard.sh: Add to service selection wizard
  • scripts/generate_welcome_page.sh: Add to welcome dashboard
  • welcome/app.js: Add SERVICE_METADATA entry
  • scripts/07_final_report.sh: Add post-install report output
  • README.md: Add to "What's Included" list
  • CHANGELOG.md: Add changelog entry

Test plan

  • Verify docker compose -p localai config --quiet passes
  • Run installation wizard and select Uptime Kuma
  • Verify container starts and healthcheck passes
  • Verify Caddy reverse proxy routes correctly
  • Verify welcome page shows Uptime Kuma entry
  • Verify final report displays Uptime Kuma info

🤖 Generated with Claude Code

@coderabbitai

coderabbitai Bot commented Mar 13, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: a9e1af35-8bbc-4a49-866e-2010799debb4

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/add-uptime-kuma
📝 Coding Plan
  • Generate coding plan for human review comments

Comment @coderabbitai help to get the list of available commands and usage tips.

Tip

CodeRabbit can use Trivy to scan for security misconfigurations and secrets in Infrastructure as Code files.

Add a .trivyignore file to your project to customize which findings Trivy reports.

@kossakovsky

Copy link
Copy Markdown
Owner Author

@claude Please review

@claude

claude Bot commented Mar 13, 2026

Copy link
Copy Markdown

Claude finished @kossakovsky's task in 2m 13s —— View job


PR Review: feat: add Uptime Kuma uptime monitoring service

  • Read changed files
  • Review docker-compose.yml changes
  • Review Caddyfile changes
  • Review scripts and configuration files
  • Post review feedback

Good overall structure — the PR follows the established add-new-service pattern. However, there are several bugs that would prevent this service from working correctly as-is.

Critical Bugs

1. Typo in .env.example — service won't start

UPTIME_KUMA_HOSTNME is missing the A in HOSTNAME. Caddy reads {$UPTIME_KUMA_HOSTNAME} (correct spelling in Caddyfile), but the env var is never set.

- UPTIME_KUMA_HOSTNME=uptime-kuma.yourdomain.com
+ UPTIME_KUMA_HOSTNAME=uptime-kuma.yourdomain.com

Fix this →


2. Wrong container reference in Caddyfile — proxy will fail (502)

The Caddyfile proxies to uptimekuma:3001, but the container/service name is uptime-kuma. Docker DNS won't resolve uptimekuma.

- reverse_proxy uptimekuma:3001
+ reverse_proxy uptime-kuma:3001

Fix this →


3. Missing import service_tls in Caddyfile — HTTPS won't work

Every other service block includes import service_tls. Uptime Kuma's block does not, meaning it will use plain HTTP or fail to acquire a certificate.

 {$UPTIME_KUMA_HOSTNAME} {
+    import service_tls
     reverse_proxy uptime-kuma:3001
 }

Fix this →


4. Profile name inconsistencies — wizard and final report won't work

The Docker Compose profile is uptime-kuma (with dash), but:

  • scripts/04_wizard.sh registers uptimekuma (no separator) → profile won't be activated
  • scripts/07_final_report.sh checks is_profile_active "uptime_kuma" (underscore) → check will never be true
 # 04_wizard.sh
- "uptimekuma" "Uptime Kuma (Uptime Monitoring)"
+ "uptime-kuma" "Uptime Kuma (Uptime Monitoring)"

 # 07_final_report.sh
- if is_profile_active "uptime_kuma"; then
+ if is_profile_active "uptime-kuma"; then

Fix this →


5. Missing named volume declaration in docker-compose.yml — container won't start

uptime_kuma_data is referenced in the service but never declared in the top-level volumes: section. Docker Compose will error on startup.

 # Add to top of docker-compose.yml volumes: section
   valkey-data:
+  uptime_kuma_data:
   weaviate_data:

Fix this →


6. JavaScript syntax error in welcome/app.js — welcome page will break

Missing comma after the uptime-kuma object (line 430), before 'cloudflare-tunnel'.

         docsUrl: 'https://github.com/louislam/uptime-kuma'
-        }
+        },
         'cloudflare-tunnel': {

Fix this →


7. Variable name mismatch in scripts/generate_welcome_page.sh

The script reads $UPTIMEKUMA_HOSTNAME but (once the .env.example typo is fixed) the variable will be UPTIME_KUMA_HOSTNAME.

- "hostname": "$(json_escape "$UPTIMEKUMA_HOSTNAME")",
+ "hostname": "$(json_escape "$UPTIME_KUMA_HOSTNAME")",

Fix this →


8. Healthcheck uses wrong port

The healthcheck pings localhost:3000 but Uptime Kuma listens on port 3001 (as correctly specified in the Caddyfile). The healthcheck will always fail.

- test: ["CMD-SHELL", "wget -qO- http://localhost:3000/ || exit 1"]
+ test: ["CMD-SHELL", "wget -qO- http://localhost:3001/ || exit 1"]

Fix this →


Minor Issues

9. uptime-kuma missing from GOST_NO_PROXY in .env.example

Per project convention (CLAUDE.md), all container names must be listed in GOST_NO_PROXY to prevent internal Docker traffic from routing through the proxy.

- ...gost,api.telegram.org,...
+ ...gost,uptime-kuma,api.telegram.org,...

10. Broken Markdown link in README.md

Missing closing ) on the link URL.

- ✅ [**Uptime Kuma**](https://github.com/louislam/uptime-kuma - Self-hosted uptime monitoring tool
+ ✅ [**Uptime Kuma**](https://github.com/louislam/uptime-kuma) - Self-hosted uptime monitoring tool

11. Wrong section in CHANGELOG.md

Adding a new service should be under ### Added, not ### Fixed.

-### Fixed
-- **Uptime Kuma** - Self-hosted uptime monitoring with 90+ notification services
+### Added
+- **Uptime Kuma** - Self-hosted uptime monitoring with 90+ notification services

12. Missing start_period in healthcheck

All other services include start_period: 30s to give the container time to initialize before health checks begin. Uptime Kuma is missing this.

     retries: 5
+    start_period: 30s

Summary

Severity Count Issues
Critical 8 Typo in env var, wrong container name in Caddyfile, missing import service_tls, profile name mismatches ×2, missing volume declaration, JS syntax error, wrong healthcheck port
Minor 4 Missing GOST_NO_PROXY entry, broken README link, wrong CHANGELOG section, missing start_period

The service concept and overall structure are solid, but all 8 critical bugs need to be fixed before this can work correctly.
| Branch: feature/add-uptime-kuma

@kossakovsky

Copy link
Copy Markdown
Owner Author

Code Review Benchmark Report — Claude Code Actions (Sonnet)

PR: #49 — feat: add Uptime Kuma uptime monitoring service
Date: 2026-03-13
Tool: Claude Code Actions (GitHub Actions, triggered via @claude Please review)
Model: Claude Sonnet (default for Claude Code Actions)
Duration: 2m 13s


Results: 12 / 15 errors found

# Error Difficulty Found? Notes
1 Wrong healthcheck port (3000 → 3001) Medium Yes Listed as critical bug #8
2 Missing logging: *default-logging Hard No
3 Missing Caddy hostname env passthrough in docker-compose.yml Hard No
4 Missing import service_tls in Caddyfile Medium Yes Listed as critical bug #3
5 Typo UPTIME_KUMA_HOSTNME (missing 'A') Easy Yes Listed as critical bug #1
6 Missing from GOST_NO_PROXY Hard Yes Listed as minor issue #9
7 Wrong profile name in wizard (uptimekumauptime-kuma) Medium Yes Combined with #14 as critical bug #4
8 Wrong env var in welcome page (UPTIMEKUMA_HOSTNAMEUPTIME_KUMA_HOSTNAME) Medium Yes Listed as critical bug #7
9 Missing trailing comma in app.js (JS syntax error) Easy Yes Listed as critical bug #6
10 Wrong changelog section (FixedAdded) Easy Yes Listed as minor issue #11
11 Volume uptime_kuma_data not declared in top-level volumes: Hard Yes Listed as critical bug #5
12 Wrong container name in Caddyfile (uptimekumauptime-kuma) Medium Yes Listed as critical bug #2
13 Wrong volume mount path (/app/database/app/data) Hard No
14 Wrong profile name in final report (uptime_kumauptime-kuma) Medium Yes Combined with #7 as critical bug #4
15 Broken markdown link (missing closing )) Easy Yes Listed as minor issue #10

Detection by difficulty

Difficulty Total Found Missed Rate
Easy 4 4 0 100%
Medium 6 6 0 100%
Hard 5 2 3 40%
Total 15 12 3 80%

Missed errors — analysis

Error #2 — Missing logging configuration

The service is missing logging: *default-logging, which is a project convention used by every other service. Claude Code Actions did not flag this despite the pattern being visible across the entire docker-compose.yml.

Why missed: Implicit project convention requiring pattern recognition across the full file, not just the diff.

Error #3 — Missing Caddy hostname env passthrough

The Caddy container needs UPTIME_KUMA_HOSTNAME: ${UPTIME_KUMA_HOSTNAME} in its environment: section within docker-compose.yml. Without it, the {$UPTIME_KUMA_HOSTNAME} variable in the Caddyfile resolves to empty.

Why missed: Requires checking an existing block (Caddy's environment section) that was not modified in the diff. The error is an omission in an untouched part of the file.

Error #13 — Wrong volume mount path (/app/database vs /app/data)

Uptime Kuma stores data in /app/data, not /app/database. The path /app/database sounds plausible but is incorrect.

Why missed: Requires domain knowledge about Uptime Kuma's internal directory structure or cross-referencing with upstream documentation.


Extra findings (not in the error list)

Claude Code Actions raised 1 additional suggestion that was not among the 15 intentional errors:

  1. Missing start_period in healthcheck — suggested adding start_period: 30s for consistency with other services. Valid observation but not an intentional error.

Review format notes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant