diff --git a/caddy/.env.example b/caddy/.env.example index 73a3528..d8e241a 100644 --- a/caddy/.env.example +++ b/caddy/.env.example @@ -25,3 +25,10 @@ VAULTWARDEN_KEY= ############# Sftpgo ############# SFTPGO_DOMAIN= + +############# Glance ############# +GLANCE_DOMAIN= +GLANCE_CRT= +GLANCE_KEY= +GLANCE_USERNAME= +GLANCE_PASSWORD= diff --git a/caddy/Caddyfile b/caddy/Caddyfile index e5b1f5e..84bab4a 100644 --- a/caddy/Caddyfile +++ b/caddy/Caddyfile @@ -96,6 +96,26 @@ } } +############## glance ############## +{$GLANCE_DOMAIN} { + tls /etc/ssl/custom/{$GLANCE_CRT} /etc/ssl/custom/{$GLANCE_KEY} + + basic_auth { + {$GLANCE_USERNAME} {$GLANCE_PASSWORD} + } + + request_body { + max_size 64MB + } + + reverse_proxy http://glance:8080 { + 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 -CF-* + } +} + import Caddyfile.private diff --git a/glance/.env.example b/glance/.env.example new file mode 100644 index 0000000..9202ba9 --- /dev/null +++ b/glance/.env.example @@ -0,0 +1,6 @@ +# Variables defined here will be available to use anywhere in the config with the syntax ${MY_SECRET_TOKEN} +# Note: making changes to this file requires re-running docker compose up +MY_SECRET_TOKEN= +GITHUB_TOKEN= +MEMOS_TOKEN= +SERADAR_TOKEN= \ No newline at end of file diff --git a/glance/assets/gitea.svg b/glance/assets/gitea.svg new file mode 100644 index 0000000..7ed0012 --- /dev/null +++ b/glance/assets/gitea.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/glance/assets/memos.webp b/glance/assets/memos.webp new file mode 100644 index 0000000..f654aae Binary files /dev/null and b/glance/assets/memos.webp differ diff --git a/glance/assets/seradar.png b/glance/assets/seradar.png new file mode 100644 index 0000000..37e44e4 Binary files /dev/null and b/glance/assets/seradar.png differ diff --git a/glance/assets/sftpgo.png b/glance/assets/sftpgo.png new file mode 100644 index 0000000..a1cd936 Binary files /dev/null and b/glance/assets/sftpgo.png differ diff --git a/glance/assets/slash.svg b/glance/assets/slash.svg new file mode 100644 index 0000000..321ec9d --- /dev/null +++ b/glance/assets/slash.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/glance/assets/user.css b/glance/assets/user.css new file mode 100644 index 0000000..e69de29 diff --git a/glance/assets/vaultwarden.svg b/glance/assets/vaultwarden.svg new file mode 100644 index 0000000..44362ef --- /dev/null +++ b/glance/assets/vaultwarden.svg @@ -0,0 +1,5 @@ + diff --git a/glance/assets/wireguard.png b/glance/assets/wireguard.png new file mode 100644 index 0000000..a0c17e8 Binary files /dev/null and b/glance/assets/wireguard.png differ diff --git a/glance/config/glance.yml b/glance/config/glance.yml new file mode 100644 index 0000000..12bedce --- /dev/null +++ b/glance/config/glance.yml @@ -0,0 +1,16 @@ +server: + assets-path: /app/assets + +theme: + # Note: assets are cached by the browser, changes to the CSS file + # will not be reflected until the browser cache is cleared (Ctrl+F5) + custom-css-file: /assets/user.css + background-color: 240 13 14 + primary-color: 51 33 68 + negative-color: 358 100 68 + contrast-multiplier: 1.2 + +pages: + # It's not necessary to create a new file for each page and include it, you can simply + # put its contents here, though multiple pages are easier to manage when separated + !include: home.yml diff --git a/glance/config/home.yml b/glance/config/home.yml new file mode 100644 index 0000000..ab06038 --- /dev/null +++ b/glance/config/home.yml @@ -0,0 +1,176 @@ +- name: Home + # Optionally, if you only have a single page you can hide the desktop navigation for a cleaner look + # hide-desktop-navigation: true + columns: + - size: small + widgets: + - type: server-stats + servers: + - type: local + name: Services + + - type: monitor + cache: 1s + title: Services + sites: + - title: seradar.net + url: https://seradar.net/auth + icon: /assets/seradar.png + - title: git.aykhans.me + url: https://git.aykhans.me/aykhans + icon: /assets/gitea.svg + - title: ftp.aykhans.me + url: https://ftp.aykhans.me/web/client/login + icon: /assets/sftpgo.png + - title: mem.aykhans.me + url: https://mem.aykhans.me/explore + icon: /assets/memos.webp + - title: url.aykhans.me + url: https://url.aykhans.me/auth + icon: /assets/slash.svg + - title: vault.aykhans.me + url: https://vault.aykhans.me/#/login + icon: /assets/vaultwarden.svg + - title: wg.aykhans.me + url: https://wg.aykhans.me/ + icon: /assets/wireguard.png + + - type: docker-containers + cache: 0s + hide-by-default: false + + - type: releases + cache: 1d + collapse-after: 3 + # 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 + - glanceapp/glance + - go-gitea/gitea + - drakkan/sftpgo + - usememos/memos + - yourselfhosted/slash + - dani-garcia/vaultwarden + - wg-easy/wg-easy + + - size: full + widgets: + - type: custom-api + title: Memos + cache: 6h + url: https://mem.aykhans.me/api/v1/memos/8ZU65KaQkWobmT8qfKqMyd + headers: + Accept: application/json + Authorization: Bearer ${MEMOS_TOKEN} + template: | + {{ if eq .Response.StatusCode 200 }} +
Failed to fetch Memos data
+ {{ end }} + + - type: group + widgets: + - type: hacker-news + - type: lobsters + - type: reddit + title: REDDIT/SELFHOSTED + subreddit: selfhosted + show-thumbnails: true + + - type: rss + limit: 150 + collapse-after: 5 + cache: 1h + style: horizontal-cards + feeds: + - url: https://registerspill.thorstenball.com/feed + title: Thorsten Ball + - url: https://selfh.st/rss/ + title: selfh.st + + - type: custom-api + title: Seradar + cache: 6h + url: https://seradar.net/api/collections/series/records?page=1&perPage=1000&sort=-new_episodes + headers: + Accept: application/json + Authorization: ${SERADAR_TOKEN} + template: | + {{ if eq .Response.StatusCode 200 }} + + {{ else }} +Failed to fetch seradar.net data
+ {{ end }} + + - size: small + widgets: + - type: calendar + first-day-of-week: monday + + - type: weather + location: Baku, Azerbaijan + units: metric # alternatively "imperial" + hour-format: 12h # alternatively "24h" + + - type: markets + markets: + - symbol: BTC-USD + name: Bitcoin + - symbol: DYDX-USD + name: DYDX + - symbol: FET-USD + name: FET + - symbol: SUI20947-USD + name: SUI diff --git a/glance/docker-compose.yml b/glance/docker-compose.yml new file mode 100644 index 0000000..f4043a1 --- /dev/null +++ b/glance/docker-compose.yml @@ -0,0 +1,21 @@ +networks: + glance: + external: false + caddy: + name: caddy + driver: bridge + external: true + +services: + glance: + image: glanceapp/glance:v0.7.7 + container_name: glance + restart: unless-stopped + networks: + - glance + - caddy + volumes: + - ./config:/app/config + - ./assets:/app/assets + - /var/run/docker.sock:/var/run/docker.sock:ro + env_file: .env diff --git a/main.sh b/main.sh index 33b3aae..d339c4a 100755 --- a/main.sh +++ b/main.sh @@ -59,6 +59,7 @@ generate_env_files() { cp --update=none ./vaultwarden/.env.example ./vaultwarden/.env cp --update=none ./wg_easy/.env.example ./wg_easy/.env cp --update=none ./caddy/.env.example ./caddy/.env + cp --update=none ./glance/.env.example ./glance/.env cp --update=none ./caddy/Caddyfile.private.example ./caddy/Caddyfile.private # cp --update=none ./memos/.env.example ./memos/.env # cp --update=none ./slash/.env.example ./slash/.env @@ -122,6 +123,15 @@ start_services() { exit 1 fi + echo "Starting glance..." + $DOCKER_COMPOSE_COMMAND -f ./glance/docker-compose.yml up -d + if [ $? -eq 0 ]; then + print_success "Glance started successfully." + else + print_error "failed to start Glance!" + exit 1 + fi + echo "Starting caddy..." $DOCKER_COMPOSE_COMMAND -f ./caddy/docker-compose.yml up -d if [ $? -eq 0 ]; then @@ -187,6 +197,15 @@ stop_services() { exit 1 fi + echo "Stopping glance..." + $DOCKER_COMPOSE_COMMAND -f ./glance/docker-compose.yml down + if [ $? -eq 0 ]; then + print_success "Glance stopped successfully." + else + print_error "failed to stop Glance!" + exit 1 + fi + echo "Stopping caddy..." $DOCKER_COMPOSE_COMMAND -f ./caddy/docker-compose.yml down if [ $? -eq 0 ]; then