diff --git a/.env.example b/.env.example index f4599cb3..bf433d0e 100644 --- a/.env.example +++ b/.env.example @@ -183,6 +183,7 @@ SEARXNG_HOSTNAME=searxng.yourdomain.com SUPABASE_HOSTNAME=supabase.yourdomain.com WAHA_HOSTNAME=waha.yourdomain.com WEAVIATE_HOSTNAME=weaviate.yourdomain.com +UPTIME_KUMA_HOSTNAME=uptime-kuma.yourdomain.com WEBUI_HOSTNAME=webui.yourdomain.com WELCOME_HOSTNAME=welcome.yourdomain.com @@ -446,7 +447,7 @@ GOST_UPSTREAM_PROXY= # Internal services bypass list (prevents internal Docker traffic from going through proxy) # Includes: Docker internal networks (172.16-31.*, 10.*), Docker DNS (127.0.0.11), and all service hostnames -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,db,studio,kong,auth,rest,realtime,storage,imgproxy,meta,functions,analytics,vector,supavisor,gost,uptime-kuma,api.telegram.org,telegram.org,t.me,core.telegram.org ############ # Functions - Configuration for Functions diff --git a/CHANGELOG.md b/CHANGELOG.md index b9c73e97..df01140f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ## [Unreleased] +## [1.4.0] - 2026-03-15 + +### Added +- **Uptime Kuma** - Self-hosted uptime monitoring with 90+ notification services +- **pgvector** - Switch PostgreSQL image to `pgvector/pgvector` for vector similarity search support + ## [1.3.3] - 2026-02-27 ### Fixed diff --git a/Caddyfile b/Caddyfile index 6eb3cb56..6844e14e 100644 --- a/Caddyfile +++ b/Caddyfile @@ -107,6 +107,12 @@ import /etc/caddy/addons/tls-snippet.conf reverse_proxy temporal-ui:8080 } +# Uptime Kuma +{$UPTIME_KUMA_HOSTNAME} { + import service_tls + reverse_proxy uptime-kuma:3001 +} + # Databasus {$DATABASUS_HOSTNAME} { import service_tls diff --git a/README.md b/README.md index 300de194..6aa776cf 100644 --- a/README.md +++ b/README.md @@ -112,6 +112,8 @@ The installer also makes the following powerful open-source tools **available fo ✅ [**Supabase**](https://supabase.com/) - An open-source alternative to Firebase, providing database storage, user authentication, and more. It's a popular choice for AI applications. +✅ [**Uptime Kuma**](https://github.com/louislam/uptime-kuma) - Self-hosted uptime monitoring tool with notifications + ✅ [**WAHA**](https://waha.devlike.pro/) - WhatsApp HTTP API (REST API) that you can configure in a click! 3 engines: WEBJS (browser based), NOWEB (websocket nodejs), GOWS (websocket go). ✅ [**Weaviate**](https://weaviate.io/) - An open-source AI-native vector database with a focus on scalability and ease of use. It can be used for RAG, hybrid search, and more. @@ -204,6 +206,7 @@ After successful installation, your services are up and running! Here's how to g - **RAGFlow:** `ragflow.yourdomain.com` - **SearXNG:** `searxng.yourdomain.com` - **Supabase (Dashboard):** `supabase.yourdomain.com` + - **Uptime Kuma:** `uptime-kuma.yourdomain.com` (Uptime monitoring dashboard) - **WAHA:** `waha.yourdomain.com` (WhatsApp HTTP API; engines: WEBJS, NOWEB, GOWS) - **Weaviate:** `weaviate.yourdomain.com` diff --git a/docker-compose.yml b/docker-compose.yml index 4ea150ea..e39a8b52 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -36,6 +36,7 @@ volumes: ragflow_redis_data: temporal_elasticsearch_data: valkey-data: + uptime_kuma_data: weaviate_data: # Shared logging configuration for services @@ -380,6 +381,7 @@ services: SEARXNG_PASSWORD_HASH: ${SEARXNG_PASSWORD_HASH} SEARXNG_USERNAME: ${SEARXNG_USERNAME} SUPABASE_HOSTNAME: ${SUPABASE_HOSTNAME} + UPTIME_KUMA_HOSTNAME: ${UPTIME_KUMA_HOSTNAME} WAHA_HOSTNAME: ${WAHA_HOSTNAME} WEAVIATE_HOSTNAME: ${WEAVIATE_HOSTNAME} WEBUI_HOSTNAME: ${WEBUI_HOSTNAME} @@ -542,7 +544,7 @@ services: postgres: container_name: postgres - image: postgres:${POSTGRES_VERSION:-17} + image: pgvector/pgvector:pg${POSTGRES_VERSION:-17} restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] @@ -1276,3 +1278,21 @@ services: timeout: 10s retries: 5 start_period: 30s + + uptime-kuma: + image: louislam/uptime-kuma:2 + container_name: uptime-kuma + profiles: ["uptime-kuma"] + restart: unless-stopped + logging: *default-logging + environment: + <<: *proxy-env + UPTIME_KUMA_WS_ORIGIN_CHECK: bypass + volumes: + - uptime_kuma_data:/app/data + healthcheck: + test: ["CMD-SHELL", "http_proxy= https_proxy= HTTP_PROXY= HTTPS_PROXY= wget -qO- http://localhost:3001/ || exit 1"] + interval: 30s + timeout: 10s + retries: 5 + start_period: 30s diff --git a/scripts/04_wizard.sh b/scripts/04_wizard.sh index 1fc3fab5..ab51ba18 100755 --- a/scripts/04_wizard.sh +++ b/scripts/04_wizard.sh @@ -67,6 +67,7 @@ base_services_data=( "ragflow" "RAGFlow (Deep document understanding RAG engine)" "searxng" "SearXNG (Private Metasearch Engine)" "supabase" "Supabase (Backend as a Service)" + "uptime-kuma" "Uptime Kuma (Uptime Monitoring)" "waha" "WAHA – WhatsApp HTTP API (NOWEB engine)" "weaviate" "Weaviate (Vector Database with API Key Auth)" ) diff --git a/scripts/07_final_report.sh b/scripts/07_final_report.sh index ecba0b04..55b3e662 100755 --- a/scripts/07_final_report.sh +++ b/scripts/07_final_report.sh @@ -103,6 +103,9 @@ fi if is_profile_active "postiz"; then echo -e " ${GREEN}*${NC} ${WHITE}Postiz${NC}: Create your account on first login" fi +if is_profile_active "uptime-kuma"; then + echo -e " ${GREEN}*${NC} ${WHITE}Uptime Kuma${NC}: Create your account on first login" +fi if is_profile_active "gost"; then echo -e " ${GREEN}*${NC} ${WHITE}Gost Proxy${NC}: Routing AI traffic through external proxy" fi diff --git a/scripts/generate_welcome_page.sh b/scripts/generate_welcome_page.sh index 9db023bd..c6eac4a3 100755 --- a/scripts/generate_welcome_page.sh +++ b/scripts/generate_welcome_page.sh @@ -354,6 +354,16 @@ if is_profile_active "postiz"; then }") fi +# Uptime Kuma +if is_profile_active "uptime-kuma"; then + SERVICES_ARRAY+=(" \"uptime-kuma\": { + \"hostname\": \"$(json_escape "$UPTIME_KUMA_HOSTNAME")\", + \"credentials\": { + \"note\": \"Create account on first login\" + } + }") +fi + # WAHA if is_profile_active "waha"; then SERVICES_ARRAY+=(" \"waha\": { diff --git a/scripts/update_preview.sh b/scripts/update_preview.sh index 386e740f..879e1758 100755 --- a/scripts/update_preview.sh +++ b/scripts/update_preview.sh @@ -72,7 +72,7 @@ echo "" # Core services (always checked) log_subheader "Core Services" -check_image_update "postgres" "postgres:${POSTGRES_VERSION:-17}-alpine" +check_image_update "postgres" "pgvector/pgvector:pg${POSTGRES_VERSION:-17}" check_image_update "redis" "valkey/valkey:8-alpine" check_image_update "caddy" "caddy:2-alpine" @@ -139,6 +139,11 @@ if is_profile_active "appsmith"; then check_image_update "appsmith" "appsmith/appsmith-ce:release" fi +if is_profile_active "uptime-kuma"; then + log_subheader "Uptime Kuma" + check_image_update "uptime-kuma" "louislam/uptime-kuma:2" +fi + # Summary log_divider echo "" diff --git a/welcome/app.js b/welcome/app.js index 76092b20..eba64d10 100644 --- a/welcome/app.js +++ b/welcome/app.js @@ -420,6 +420,14 @@ category: 'tools', docsUrl: 'https://docs.python.org' }, + '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': { name: 'Cloudflare Tunnel', description: 'Zero-Trust Network Access',