From 4fba524f0092e02ce3e92262e4a7a8f6aa89dffe Mon Sep 17 00:00:00 2001 From: Aykhan Shahsuvarov Date: Fri, 15 Aug 2025 18:40:40 +0000 Subject: [PATCH] Add uptime kuma --- caddy/.env.example | 4 ++++ caddy/Caddyfile | 18 ++++++++++++++++++ glance/assets/uptime_kuma.png | Bin 0 -> 36536 bytes glance/config/home.yml | 7 ++++++- main.sh | 19 +++++++++++++++++++ uptime_kuma/.env.example | 1 + uptime_kuma/.gitignore | 2 ++ uptime_kuma/data/.gitkeep | 0 uptime_kuma/docker-compose.yml | 18 ++++++++++++++++++ 9 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 glance/assets/uptime_kuma.png create mode 100644 uptime_kuma/.env.example create mode 100644 uptime_kuma/.gitignore create mode 100644 uptime_kuma/data/.gitkeep create mode 100644 uptime_kuma/docker-compose.yml diff --git a/caddy/.env.example b/caddy/.env.example index dcd2dfb..ce1f668 100644 --- a/caddy/.env.example +++ b/caddy/.env.example @@ -46,3 +46,7 @@ IMMICH_DOMAIN= IMMICH_CRT= IMMICH_KEY= +############# Uptime Kuma ############# +UPTIME_KUMA_DOMAIN= +UPTIME_KUMA_CRT= +UPTIME_KUMA_KEY= diff --git a/caddy/Caddyfile b/caddy/Caddyfile index a1c13b0..3742c4b 100644 --- a/caddy/Caddyfile +++ b/caddy/Caddyfile @@ -171,6 +171,24 @@ } } +############## uptime-kuma ############## +{$UPTIME_KUMA_DOMAIN} { + tls /etc/ssl/custom/{$UPTIME_KUMA_CRT} /etc/ssl/custom/{$UPTIME_KUMA_KEY} + + request_body { + max_size 1024MB + } + + reverse_proxy http://uptime_kuma:3001 { + header_up X-Real-IP {http.request.header.Cf-Connecting-Ip} + header_up X-Forwarded-For {http.request.header.Cf-Connecting-Ip} + header_up X-Country-Code {http.request.header.Cf-Ipcountry} + header_up X-Forwarded-Proto {http.request.scheme} + header_up Host {http.request.host} + header_up -CF-* + } +} + import Caddyfile.private diff --git a/glance/assets/uptime_kuma.png b/glance/assets/uptime_kuma.png new file mode 100644 index 0000000000000000000000000000000000000000..2adfffc28967f8310ee0ad7e913b1234d7a5ab1e GIT binary patch literal 36536 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®kMIH`^ao1eJ1uZ>NE+$%szD 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 literal 0 HcmV?d00001 diff --git a/glance/config/home.yml b/glance/config/home.yml index c60c40e..11df182 100644 --- a/glance/config/home.yml +++ b/glance/config/home.yml @@ -35,6 +35,9 @@ - title: photos.aykhans.me url: https://photos.aykhans.me/ icon: /assets/immich.png + - title: up.aykhans.me + url: https://up.aykhans.me/ + icon: /assets/uptime_kuma.png - title: aykhans.me url: https://aykhans.me/ icon: /assets/ghost.png @@ -45,12 +48,14 @@ - type: releases cache: 1d - collapse-after: 3 + collapse-after: 5 # Without authentication the Github API allows for up to 60 requests per hour. You can create a # read-only token from your Github account settings and use it here to increase the limit. token: ${GITHUB_TOKEN} repositories: - caddyserver/caddy + - louislam/uptime-kuma + - immich-app/immich - glanceapp/glance - go-gitea/gitea - drakkan/sftpgo diff --git a/main.sh b/main.sh index f778cce..626005e 100755 --- a/main.sh +++ b/main.sh @@ -62,6 +62,7 @@ generate_env_files() { cp --update=none ./glance/.env.example ./glance/.env cp --update=none ./ghost/.env.example ./ghost/.env cp --update=none ./immich/.env.example ./immich/.env + cp --update=none ./uptime_kuma/.env.example ./uptime_kuma/.env cp --update=none ./caddy/Caddyfile.private.example ./caddy/Caddyfile.private # cp --update=none ./slash/.env.example ./slash/.env # cp --update=none ./grafana/.env.example ./grafana/.env @@ -182,6 +183,15 @@ start_services() { exit 1 fi + echo "Starting uptime kuma..." + $DOCKER_COMPOSE_COMMAND -f ./uptime_kuma/docker-compose.yml up -d + if [ $? -eq 0 ]; then + print_success "Uptime kuma started successfully." + else + print_error "failed to start Uptime kuma!" + exit 1 + fi + echo "Starting caddy..." $DOCKER_COMPOSE_COMMAND -f ./caddy/docker-compose.yml up -d if [ $? -eq 0 ]; then @@ -301,6 +311,15 @@ stop_services() { exit 1 fi + echo "Stopping uptime kuma..." + $DOCKER_COMPOSE_COMMAND -f ./uptime_kuma/docker-compose.yml down + if [ $? -eq 0 ]; then + print_success "Uptime kuma stopped successfully." + else + print_error "failed to stop Uptime kuma!" + exit 1 + fi + echo "Stopping caddy..." $DOCKER_COMPOSE_COMMAND -f ./caddy/docker-compose.yml down if [ $? -eq 0 ]; then diff --git a/uptime_kuma/.env.example b/uptime_kuma/.env.example new file mode 100644 index 0000000..43484f2 --- /dev/null +++ b/uptime_kuma/.env.example @@ -0,0 +1 @@ +CADDY_DOMAIN=sub.example.com diff --git a/uptime_kuma/.gitignore b/uptime_kuma/.gitignore new file mode 100644 index 0000000..394be19 --- /dev/null +++ b/uptime_kuma/.gitignore @@ -0,0 +1,2 @@ +/data/* +!.gitkeep diff --git a/uptime_kuma/data/.gitkeep b/uptime_kuma/data/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/uptime_kuma/docker-compose.yml b/uptime_kuma/docker-compose.yml new file mode 100644 index 0000000..17cb3e1 --- /dev/null +++ b/uptime_kuma/docker-compose.yml @@ -0,0 +1,18 @@ +networks: + caddy: + name: caddy + driver: bridge + external: true + +services: + uptime-kuma: + image: louislam/uptime-kuma:1 + container_name: uptime_kuma + restart: unless-stopped + volumes: + - ./data/app:/app/data + networks: + - caddy + labels: + caddy: ${CADDY_DOMAIN} + caddy.reverse_proxy: "* {{upstreams 3001}}"