Skip to content

feat: add Uptime Kuma uptime monitoring service#50

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

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

Conversation

@kossakovsky

@kossakovsky kossakovsky commented Mar 13, 2026

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

Summary by CodeRabbit

  • New Features

    • Added Uptime Kuma, a self-hosted uptime monitoring solution with 90+ notification services support.
    • Uptime Kuma is now available as an optional service that can be enabled in the deployment wizard.
    • Includes real-time monitoring dashboard and health checks for service availability.
  • Documentation

    • Updated tools documentation to include Uptime Kuma in the available services list.

@coderabbitai

coderabbitai Bot commented Mar 13, 2026

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

This PR integrates Uptime Kuma, a self-hosted uptime monitoring service, across the infrastructure stack by adding configuration files, Docker service definitions, shell scripts for setup and reporting, and frontend metadata. Total of 48 lines added with no deletions.

Changes

Cohort / File(s) Summary
Environment & Proxy Configuration
.env.example, Caddyfile
Added UPTIME_KUMA_HOSTNAME environment variable (with typo: missing 'D' in name) and configured Caddy reverse proxy block routing to uptimekuma:3001.
Documentation
CHANGELOG.md, README.md
Added Uptime Kuma entry to changelog's Unreleased Fixed section and Included tools list in README (note: README link is malformed with missing closing parenthesis).
Docker Composition
docker-compose.yml
Introduced uptime-kuma service with image louislam/uptime-kuma:2, custom profiles configuration, health checks, and dedicated volume for database persistence.
Setup & Reporting Scripts
scripts/04_wizard.sh, scripts/07_final_report.sh, scripts/generate_welcome_page.sh
Added uptimekuma service entry to wizard, conditional next-steps output for account setup, and integration into generated welcome page data.json with profile gating.
Frontend Service Metadata
welcome/app.js
Added uptime-kuma entry to SERVICE_METADATA constant with display name, description, monitoring category, icon 'UK', and color bg-[#5CDD8B].

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

Poem

🐰 Hop along with monitoring delight,
Uptime Kuma keeps services in sight,
From compose to scripts we've sewn the thread,
Green health checks dancing, no service left for dead! 💚

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat: add Uptime Kuma uptime monitoring service' accurately and directly summarizes the main change: adding Uptime Kuma as a new service to the project.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 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-2
📝 Coding Plan
  • Generate coding plan for human review comments

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

@kossakovsky

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Mar 13, 2026

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 12

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.env.example:
- Line 186: Fix the typo in the environment variable name by renaming
UPTIME_KUMA_HOSTNME to UPTIME_KUMA_HOSTNAME in the .env.example so components
that read UPTIME_KUMA_HOSTNAME will work; ensure the variable uses the required
`_HOSTNAME` suffix and update any references or documentation that might mirror
the misspelling.
- Line 186: The .env.example is missing the new service name in the internal
no-proxy list: update the GOST_NO_PROXY variable to include the new container
name "uptime-kuma" (matching the introduced UPTIME_KUMA_HOSTNME entry) so
intra-stack traffic is bypassed by the proxy; locate the GOST_NO_PROXY
definition in .env.example and append "uptime-kuma" to the comma/space-separated
list following the existing formatting/conventions.

In `@Caddyfile`:
- Around line 110-113: The Caddy site block for Uptime Kuma is missing the
shared TLS import and points to an incorrect upstream; update the block that
matches {$UPTIME_KUMA_HOSTNAME} to include "import service_tls" as the first
line and change the reverse_proxy target from "uptimekuma:3001" to the correct
container hostname (ensure it matches the service name used in docker-compose),
and also add UPTIME_KUMA_HOSTNAME to the caddy service environment in
docker-compose.yml so the host matcher resolves at runtime.

In `@CHANGELOG.md`:
- Around line 5-7: Move the "Uptime Kuma - Self-hosted uptime monitoring with
90+ notification services" changelog entry out of the "### Fixed" section into
the "### Added" section under the "[Unreleased]" heading; specifically locate
the line containing "Uptime Kuma" and cut it from the "### Fixed" block and
paste it into the "### Added" block so the entry is categorized as a new
capability rather than a fix.

In `@docker-compose.yml`:
- Around line 1285-1286: The Uptime Kuma service’s environment block only sets
UPTIME_KUMA_WS_ORIGIN_CHECK and does not inherit the shared proxy variables;
update the service's environment section to include the YAML anchor inheritance
by adding <<: *proxy-env alongside the existing UPTIME_KUMA_WS_ORIGIN_CHECK so
the container uses the shared proxy settings for outbound HTTP calls (reference
the environment block and the UPTIME_KUMA_WS_ORIGIN_CHECK key and the *proxy-env
anchor).
- Around line 1289-1293: Update the healthcheck test to hit the service port
used by Caddy (:3001) and clear proxy environment variables before invoking
wget; replace the current test array in the healthcheck block with a CMD-SHELL
command that unsets http_proxy/https_proxy/HTTP_PROXY/HTTPS_PROXY (e.g. via env
-u ...) and then runs wget -qO- http://localhost:3001/ || exit 1 so the probe
bypasses any proxy and targets the correct upstream.
- Around line 1287-1288: The compose file references the named volume
uptime_kuma_data under the service volumes section but does not declare it at
the top-level; add a top-level volumes entry named uptime_kuma_data (e.g., under
the top-level "volumes:" block) so docker-compose validation/start succeeds and
the service's volume mapping "- uptime_kuma_data:/app/database" is resolved.

In `@README.md`:
- Around line 115-116: The Markdown link for the Uptime Kuma entry is missing
the closing “)” so the description is being included in the URL; fix the line
containing the link text "[**Uptime Kuma**]" by moving the closing parenthesis
to immediately after the URL (https://github.com/louislam/uptime-kuma) and place
the descriptive text "- Self-hosted uptime monitoring tool with notifications"
outside the link so it reads: [**Uptime
Kuma**](https://github.com/louislam/uptime-kuma) - Self-hosted uptime monitoring
tool with notifications.

In `@scripts/04_wizard.sh`:
- Line 70: The wizard uses the wrong service identifier string "uptimekuma"
which doesn't match the compose profile id "uptime-kuma"; update the mapping
entry in scripts/04_wizard.sh so the left-hand key equals the exact profile id
"uptime-kuma" (i.e., replace "uptimekuma" with "uptime-kuma") so that the
service selection toggles the correct compose profile in the profiles:
["uptime-kuma"] check.

In `@scripts/07_final_report.sh`:
- Around line 106-108: The profile check uses the wrong profile id: change the
call to is_profile_active from "uptime_kuma" to "uptime-kuma" so it matches the
compose profile; update the string passed to is_profile_active (the call near
the Uptime Kuma echo block) to "uptime-kuma" and keep the echo message as-is.

In `@scripts/generate_welcome_page.sh`:
- Around line 357-365: The Uptime Kuma block in scripts/generate_welcome_page.sh
uses the wrong environment variable name UPTIMEKUMA_HOSTNAME; update the
template to use the correct UPTIME_KUMA_HOSTNAME so the generated SERVICES_ARRAY
entry contains the real hostname. Locate the block that appends to
SERVICES_ARRAY for "uptime-kuma" and replace references to UPTIMEKUMA_HOSTNAME
with UPTIME_KUMA_HOSTNAME (preserve the json_escape call and surrounding
structure) so the welcome URL is populated correctly.

In `@welcome/app.js`:
- Around line 430-431: The SERVICE_METADATA object has a missing comma after the
'uptime-kuma' entry which causes a JavaScript syntax error; edit the
SERVICE_METADATA definition to insert a trailing comma after the closing brace
for the 'uptime-kuma' object so the next property 'cloudflare-tunnel' is a valid
sibling entry, then run a quick lint/parse to confirm the object literal parses
correctly.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 4ee05443-f192-4186-ab26-1205584a3a55

📥 Commits

Reviewing files that changed from the base of the PR and between 174fce7 and 52845d1.

📒 Files selected for processing (9)
  • .env.example
  • CHANGELOG.md
  • Caddyfile
  • README.md
  • docker-compose.yml
  • scripts/04_wizard.sh
  • scripts/07_final_report.sh
  • scripts/generate_welcome_page.sh
  • welcome/app.js

Comment thread .env.example
SUPABASE_HOSTNAME=supabase.yourdomain.com
WAHA_HOSTNAME=waha.yourdomain.com
WEAVIATE_HOSTNAME=weaviate.yourdomain.com
UPTIME_KUMA_HOSTNME=uptime-kuma.yourdomain.com

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Correct the hostname variable typo (HOSTNMEHOSTNAME).

UPTIME_KUMA_HOSTNME won’t be read by components using UPTIME_KUMA_HOSTNAME, so host routing/config will break.

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

As per coding guidelines, all service hostnames must end with _HOSTNAME suffix.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
UPTIME_KUMA_HOSTNME=uptime-kuma.yourdomain.com
UPTIME_KUMA_HOSTNAME=uptime-kuma.yourdomain.com
🧰 Tools
🪛 dotenv-linter (4.0.0)

[warning] 186-186: [UnorderedKey] The UPTIME_KUMA_HOSTNME key should go before the USER_DOMAIN_NAME key

(UnorderedKey)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.env.example at line 186, Fix the typo in the environment variable name by
renaming UPTIME_KUMA_HOSTNME to UPTIME_KUMA_HOSTNAME in the .env.example so
components that read UPTIME_KUMA_HOSTNAME will work; ensure the variable uses
the required `_HOSTNAME` suffix and update any references or documentation that
might mirror the misspelling.

⚠️ Potential issue | 🟠 Major

Add uptime-kuma to GOST_NO_PROXY.

Since this PR introduces a new service container, it must be added to the internal bypass list to avoid proxying intra-stack traffic.

Suggested fix
-GOST_NO_PROXY=localhost,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.local,appsmith,postgres,postgres:5432,redis,redis:6379,caddy,ollama,neo4j,qdrant,weaviate,clickhouse,minio,searxng,crawl4ai,gotenberg,langfuse-web,langfuse-worker,flowise,n8n,n8n-import,n8n-worker-1,n8n-worker-2,n8n-worker-3,n8n-worker-4,n8n-worker-5,n8n-worker-6,n8n-worker-7,n8n-worker-8,n8n-worker-9,n8n-worker-10,n8n-runner-1,n8n-runner-2,n8n-runner-3,n8n-runner-4,n8n-runner-5,n8n-runner-6,n8n-runner-7,n8n-runner-8,n8n-runner-9,n8n-runner-10,letta,lightrag,docling,postiz,temporal,temporal-ui,ragflow,ragflow-mysql,ragflow-minio,ragflow-redis,ragflow-elasticsearch,ragapp,open-webui,comfyui,waha,libretranslate,paddleocr,nocodb,db,studio,kong,auth,rest,realtime,storage,imgproxy,meta,functions,analytics,vector,supavisor,gost,api.telegram.org,telegram.org,t.me,core.telegram.org
+GOST_NO_PROXY=localhost,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.local,appsmith,postgres,postgres:5432,redis,redis:6379,caddy,ollama,neo4j,qdrant,weaviate,clickhouse,minio,searxng,crawl4ai,gotenberg,langfuse-web,langfuse-worker,flowise,n8n,n8n-import,n8n-worker-1,n8n-worker-2,n8n-worker-3,n8n-worker-4,n8n-worker-5,n8n-worker-6,n8n-worker-7,n8n-worker-8,n8n-worker-9,n8n-worker-10,n8n-runner-1,n8n-runner-2,n8n-runner-3,n8n-runner-4,n8n-runner-5,n8n-runner-6,n8n-runner-7,n8n-runner-8,n8n-runner-9,n8n-runner-10,letta,lightrag,docling,postiz,temporal,temporal-ui,ragflow,ragflow-mysql,ragflow-minio,ragflow-redis,ragflow-elasticsearch,ragapp,open-webui,comfyui,waha,libretranslate,paddleocr,nocodb,uptime-kuma,db,studio,kong,auth,rest,realtime,storage,imgproxy,meta,functions,analytics,vector,supavisor,gost,api.telegram.org,telegram.org,t.me,core.telegram.org

As per coding guidelines, all service container names must be listed in GOST_NO_PROXY in .env.example.

🧰 Tools
🪛 dotenv-linter (4.0.0)

[warning] 186-186: [UnorderedKey] The UPTIME_KUMA_HOSTNME key should go before the USER_DOMAIN_NAME key

(UnorderedKey)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.env.example at line 186, The .env.example is missing the new service name
in the internal no-proxy list: update the GOST_NO_PROXY variable to include the
new container name "uptime-kuma" (matching the introduced UPTIME_KUMA_HOSTNME
entry) so intra-stack traffic is bypassed by the proxy; locate the GOST_NO_PROXY
definition in .env.example and append "uptime-kuma" to the comma/space-separated
list following the existing formatting/conventions.

Comment thread Caddyfile
Comment on lines +110 to +113
# Uptime Kuma
{$UPTIME_KUMA_HOSTNAME} {
reverse_proxy uptimekuma:3001
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Fix Uptime Kuma Caddy block: missing TLS import and wrong upstream hostname.

This block currently skips the shared TLS snippet and proxies to a non-existent upstream name.

Suggested fix
 # Uptime Kuma
 {$UPTIME_KUMA_HOSTNAME} {
-    reverse_proxy uptimekuma:3001
+    import service_tls
+    reverse_proxy uptime-kuma:3001
 }

Also ensure UPTIME_KUMA_HOSTNAME is passed into the caddy service environment in docker-compose.yml, otherwise this host matcher won’t resolve at runtime.

As per coding guidelines, all Caddyfile service blocks must use import service_tls for consistent TLS configuration.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
# Uptime Kuma
{$UPTIME_KUMA_HOSTNAME} {
reverse_proxy uptimekuma:3001
}
# Uptime Kuma
{$UPTIME_KUMA_HOSTNAME} {
import service_tls
reverse_proxy uptime-kuma:3001
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Caddyfile` around lines 110 - 113, The Caddy site block for Uptime Kuma is
missing the shared TLS import and points to an incorrect upstream; update the
block that matches {$UPTIME_KUMA_HOSTNAME} to include "import service_tls" as
the first line and change the reverse_proxy target from "uptimekuma:3001" to the
correct container hostname (ensure it matches the service name used in
docker-compose), and also add UPTIME_KUMA_HOSTNAME to the caddy service
environment in docker-compose.yml so the host matcher resolves at runtime.

Comment thread CHANGELOG.md
Comment on lines +5 to +7
### Fixed
- **Uptime Kuma** - Self-hosted uptime monitoring with 90+ notification services

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Move this entry from Fixed to Added.

Uptime Kuma is a new capability, so this should be documented under ### Added in [Unreleased].

As per coding guidelines, CHANGELOG entries should follow semantic categories (Added, Changed, Fixed).

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CHANGELOG.md` around lines 5 - 7, Move the "Uptime Kuma - Self-hosted uptime
monitoring with 90+ notification services" changelog entry out of the "###
Fixed" section into the "### Added" section under the "[Unreleased]" heading;
specifically locate the line containing "Uptime Kuma" and cut it from the "###
Fixed" block and paste it into the "### Added" block so the entry is categorized
as a new capability rather than a fix.

Comment thread docker-compose.yml
Comment on lines +1285 to +1286
environment:
UPTIME_KUMA_WS_ORIGIN_CHECK: bypass

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Inherit shared proxy env for outbound notifications.

Uptime Kuma performs outbound HTTP calls (webhooks/alerts), so it should inherit the shared proxy anchor like other outbound services.

Suggested fix
   environment:
+      <<: *proxy-env
       UPTIME_KUMA_WS_ORIGIN_CHECK: bypass

As per coding guidelines, services making outbound HTTP requests must use the shared proxy anchor <<: *proxy-env.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
environment:
UPTIME_KUMA_WS_ORIGIN_CHECK: bypass
environment:
<<: *proxy-env
UPTIME_KUMA_WS_ORIGIN_CHECK: bypass
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docker-compose.yml` around lines 1285 - 1286, The Uptime Kuma service’s
environment block only sets UPTIME_KUMA_WS_ORIGIN_CHECK and does not inherit the
shared proxy variables; update the service's environment section to include the
YAML anchor inheritance by adding <<: *proxy-env alongside the existing
UPTIME_KUMA_WS_ORIGIN_CHECK so the container uses the shared proxy settings for
outbound HTTP calls (reference the environment block and the
UPTIME_KUMA_WS_ORIGIN_CHECK key and the *proxy-env anchor).

Comment thread docker-compose.yml
Comment on lines +1287 to +1288
volumes:
- uptime_kuma_data:/app/database

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Declare uptime_kuma_data in top-level volumes.

This service references a named volume that isn’t declared, which can fail compose validation/start.

Suggested fix
 volumes:
   appsmith_data:
+  uptime_kuma_data:
   caddy-config:
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docker-compose.yml` around lines 1287 - 1288, The compose file references the
named volume uptime_kuma_data under the service volumes section but does not
declare it at the top-level; add a top-level volumes entry named
uptime_kuma_data (e.g., under the top-level "volumes:" block) so docker-compose
validation/start succeeds and the service's volume mapping "-
uptime_kuma_data:/app/database" is resolved.

Comment thread README.md
Comment on lines +115 to +116
✅ [**Uptime Kuma**](https://github.com/louislam/uptime-kuma - Self-hosted uptime monitoring tool with notifications

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix malformed Markdown link for Uptime Kuma.

The link is missing the closing ) and currently swallows the description text into the URL.

Suggested fix
-✅ [**Uptime Kuma**](https://github.com/louislam/uptime-kuma - Self-hosted uptime monitoring tool with notifications
+✅ [**Uptime Kuma**](https://github.com/louislam/uptime-kuma) - Self-hosted uptime monitoring tool with notifications
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
[**Uptime Kuma**](https://github.com/louislam/uptime-kuma - Self-hosted uptime monitoring tool with notifications
[**Uptime Kuma**](https://github.com/louislam/uptime-kuma) - Self-hosted uptime monitoring tool with notifications
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@README.md` around lines 115 - 116, The Markdown link for the Uptime Kuma
entry is missing the closing “)” so the description is being included in the
URL; fix the line containing the link text "[**Uptime Kuma**]" by moving the
closing parenthesis to immediately after the URL
(https://github.com/louislam/uptime-kuma) and place the descriptive text "-
Self-hosted uptime monitoring tool with notifications" outside the link so it
reads: [**Uptime Kuma**](https://github.com/louislam/uptime-kuma) - Self-hosted
uptime monitoring tool with notifications.

Comment thread scripts/04_wizard.sh
"ragflow" "RAGFlow (Deep document understanding RAG engine)"
"searxng" "SearXNG (Private Metasearch Engine)"
"supabase" "Supabase (Backend as a Service)"
"uptimekuma" "Uptime Kuma (Uptime Monitoring)"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Use the exact compose profile id in wizard (uptime-kuma).

uptimekuma won’t match profiles: ["uptime-kuma"], so the service selection won’t actually enable the container.

Suggested fix
-    "uptimekuma" "Uptime Kuma (Uptime Monitoring)"
+    "uptime-kuma" "Uptime Kuma (Uptime Monitoring)"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"uptimekuma" "Uptime Kuma (Uptime Monitoring)"
"uptime-kama" "Uptime Kuma (Uptime Monitoring)"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@scripts/04_wizard.sh` at line 70, The wizard uses the wrong service
identifier string "uptimekuma" which doesn't match the compose profile id
"uptime-kuma"; update the mapping entry in scripts/04_wizard.sh so the left-hand
key equals the exact profile id "uptime-kuma" (i.e., replace "uptimekuma" with
"uptime-kuma") so that the service selection toggles the correct compose profile
in the profiles: ["uptime-kuma"] check.

Comment on lines +106 to +108
if is_profile_active "uptime_kuma"; then
echo -e " ${GREEN}*${NC} ${WHITE}Uptime Kuma${NC}: Register your account on first login"
fi

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Profile name mismatch prevents Uptime Kuma guidance from showing.

The check uses uptime_kuma, but the profile introduced in compose is uptime-kuma.

Suggested fix
-if is_profile_active "uptime_kuma"; then
+if is_profile_active "uptime-kuma"; then

As per coding guidelines, scripts should use is_profile_active "myservice" with the actual profile id.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@scripts/07_final_report.sh` around lines 106 - 108, The profile check uses
the wrong profile id: change the call to is_profile_active from "uptime_kuma" to
"uptime-kuma" so it matches the compose profile; update the string passed to
is_profile_active (the call near the Uptime Kuma echo block) to "uptime-kuma"
and keep the echo message as-is.

Comment on lines +357 to +365
# Uptime Kuma
if is_profile_active "uptime-kuma"; then
SERVICES_ARRAY+=(" \"uptime-kuma\": {
\"hostname\": \"$(json_escape "$UPTIMEKUMA_HOSTNAME")\",
\"credentials\": {
\"note\": \"Create account on first login\"
}
}")
fi

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Use the correct env var for Uptime Kuma hostname.

UPTIMEKUMA_HOSTNAME doesn’t match the expected key pattern used elsewhere (UPTIME_KUMA_HOSTNAME), so the generated welcome URL will be blank/wrong.

Suggested fix
-      \"hostname\": \"$(json_escape "$UPTIMEKUMA_HOSTNAME")\",
+      \"hostname\": \"$(json_escape "$UPTIME_KUMA_HOSTNAME")\",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@scripts/generate_welcome_page.sh` around lines 357 - 365, The Uptime Kuma
block in scripts/generate_welcome_page.sh uses the wrong environment variable
name UPTIMEKUMA_HOSTNAME; update the template to use the correct
UPTIME_KUMA_HOSTNAME so the generated SERVICES_ARRAY entry contains the real
hostname. Locate the block that appends to SERVICES_ARRAY for "uptime-kuma" and
replace references to UPTIMEKUMA_HOSTNAME with UPTIME_KUMA_HOSTNAME (preserve
the json_escape call and surrounding structure) so the welcome URL is populated
correctly.

Comment thread welcome/app.js
Comment on lines +430 to 431
}
'cloudflare-tunnel': {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify the exact missing-comma pattern between uptime-kuma and cloudflare-tunnel entries.
rg -nP -C2 "docsUrl:\s*'https://github.com/louislam/uptime-kuma'\s*\n\s*}\s*\n\s*'cloudflare-tunnel':\s*{" welcome/app.js

Repository: kossakovsky/n8n-install

Length of output: 49


🏁 Script executed:

# First, check if the file exists and find the SERVICE_METADATA object
fd -p welcome/app.js

Repository: kossakovsky/n8n-install

Length of output: 81


🏁 Script executed:

# Search for uptime-kuma entry to locate it precisely
rg -n "uptime-kuma" welcome/app.js -A 8 -B 2

Repository: kossakovsky/n8n-install

Length of output: 785


🏁 Script executed:

# Also check the cloudflare-tunnel entry context
rg -n "cloudflare-tunnel" welcome/app.js -A 3 -B 3

Repository: kossakovsky/n8n-install

Length of output: 351


Add a comma after the uptime-kuma entry to fix JavaScript syntax error.

Line 430 closes the uptime-kuma object, but line 431 immediately starts the next property without a comma separator. This breaks the SERVICE_METADATA object literal and prevents the script from parsing.

Proposed fix
         'uptime-kuma': {
             name: 'Uptime Kuma',
             description: 'Uptime Monitoring Dashboard',
             icon: 'UK',
             color: 'bg-[`#5CDD8B`]',
             category: 'monitoring',
             docsUrl: 'https://github.com/louislam/uptime-kuma'
-        }
+        },
         'cloudflare-tunnel': {
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
}
'cloudflare-tunnel': {
'uptime-kuma': {
name: 'Uptime Kuma',
description: 'Uptime Monitoring Dashboard',
icon: 'UK',
color: 'bg-[`#5CDD8B`]',
category: 'monitoring',
docsUrl: 'https://github.com/louislam/uptime-kuma'
},
'cloudflare-tunnel': {
🧰 Tools
🪛 Biome (2.4.6)

[error] 431-431: expected , but instead found 'cloudflare-tunnel'

(parse)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@welcome/app.js` around lines 430 - 431, The SERVICE_METADATA object has a
missing comma after the 'uptime-kuma' entry which causes a JavaScript syntax
error; edit the SERVICE_METADATA definition to insert a trailing comma after the
closing brace for the 'uptime-kuma' object so the next property
'cloudflare-tunnel' is a valid sibling entry, then run a quick lint/parse to
confirm the object literal parses correctly.

@kossakovsky

Copy link
Copy Markdown
Owner Author

Code Review Benchmark Report — CodeRabbit

PR: #50 — feat: add Uptime Kuma uptime monitoring service
Date: 2026-03-12
Tool: CodeRabbit (Pro plan, CHILL profile)
Mode: Automated PR review, single pass


Results: 13 / 15 errors found

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

Detection by difficulty

Difficulty Total Found Missed Rate
Easy 4 4 0 100%
Medium 6 6 0 100%
Hard 5 3 2 60%
Total 15 13 2 87%

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 to prevent uncontrolled log growth. CodeRabbit did not flag this despite it being a visible pattern across the entire docker-compose.yml.

Why missed: This is an implicit project convention (YAML anchor reuse), not a syntax or configuration error. Detecting it requires recognizing that every other service uses this anchor and inferring it as a requirement.

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

Uptime Kuma stores data in /app/data, not /app/database. CodeRabbit even quoted the path uptime_kuma_data:/app/database in its volume declaration comment but didn't flag the mount target as incorrect.

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


Extra findings (not in the error list)

CodeRabbit raised 2 additional suggestions that were not among the 15 intentional errors:

  1. Missing <<: *proxy-env in service environment — suggested inheriting proxy anchor for outbound notifications. Valid improvement but not an intentional error.
  2. Healthcheck should bypass proxy vars — suggested clearing http_proxy/HTTP_PROXY in healthcheck command. Valid best practice but not an intentional error.

Notable issues in CodeRabbit's own suggestions

  • Wizard fix introduced a new typo: The committable suggestion for scripts/04_wizard.sh proposed "uptime-kama" instead of "uptime-kuma", introducing a new bug in the fix itself.

@kossakovsky kossakovsky deleted the feature/add-uptime-kuma-2 branch March 13, 2026 23:55
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