From 7bf572b039489cc3cf0ce26da613a949b055a6b9 Mon Sep 17 00:00:00 2001 From: jaffo73 <126406464+jaffo73@users.noreply.github.com> Date: Fri, 16 Feb 2024 10:20:25 -0600 Subject: [PATCH] Add Heimdall (#2481) * Add Heimdall * refactor(heimdall): small fixes --------- Co-authored-by: Stavros --- apps/heimdall/config.json | 22 ++++++++++++++ apps/heimdall/docker-compose.yml | 42 ++++++++++++++++++++++++++ apps/heimdall/metadata/description.md | 7 +++++ apps/heimdall/metadata/logo.jpg | Bin 0 -> 27500 bytes 4 files changed, 71 insertions(+) create mode 100644 apps/heimdall/config.json create mode 100644 apps/heimdall/docker-compose.yml create mode 100644 apps/heimdall/metadata/description.md create mode 100644 apps/heimdall/metadata/logo.jpg diff --git a/apps/heimdall/config.json b/apps/heimdall/config.json new file mode 100644 index 00000000..8b307163 --- /dev/null +++ b/apps/heimdall/config.json @@ -0,0 +1,22 @@ +{ + "name": "Heimdall", + "available": true, + "exposable": true, + "port": 8783, + "id": "heimdall", + "tipi_version": 1, + "version": "2.5.8", + "categories": [ + "utilities" + ], + "description": "Heimdall is a way to organise all those links to your most used web sites and web applications in a simple way", + "short_desc": "Application Dashboard", + "author": "linuxserver", + "source": "https://github.com/linuxserver/Heimdall", + "website": "https://heimdall.site/", + "form_fields": [], + "supported_architectures": [ + "arm64", + "amd64" + ] +} diff --git a/apps/heimdall/docker-compose.yml b/apps/heimdall/docker-compose.yml new file mode 100644 index 00000000..221820c2 --- /dev/null +++ b/apps/heimdall/docker-compose.yml @@ -0,0 +1,42 @@ +version: '3.9' + +services: + heimdall: + image: lscr.io/linuxserver/heimdall:2.5.8 + container_name: heimdall + environment: + - PUID=1000 + - PGID=1000 + - TZ=${TZ} + volumes: + - ${APP_DATA_DIR}/data/config:/config + ports: + - ${APP_PORT}:80 + restart: unless-stopped + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.heimdall-web-redirect.redirectscheme.scheme: https + traefik.http.services.heimdall.loadbalancer.server.port: 3000 + # Web + traefik.http.routers.heimdall-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.heimdall-insecure.entrypoints: web + traefik.http.routers.heimdall-insecure.service: heimdall + traefik.http.routers.heimdall-insecure.middlewares: heimdall-web-redirect + # Websecure + traefik.http.routers.heimdall.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.heimdall.entrypoints: websecure + traefik.http.routers.heimdall.service: heimdall + traefik.http.routers.heimdall.tls.certresolver: myresolver + # Local domain + traefik.http.routers.heimdall-local-insecure.rule: Host(`heimdall.${LOCAL_DOMAIN}`) + traefik.http.routers.heimdall-local-insecure.entrypoints: web + traefik.http.routers.heimdall-local-insecure.service: heimdall + traefik.http.routers.heimdall-local-insecure.middlewares: heimdall-web-redirect + # Local domain secure + traefik.http.routers.heimdall-local.rule: Host(`heimdall.${LOCAL_DOMAIN}`) + traefik.http.routers.heimdall-local.entrypoints: websecure + traefik.http.routers.heimdall-local.service: heimdall + traefik.http.routers.heimdall-local.tls: true diff --git a/apps/heimdall/metadata/description.md b/apps/heimdall/metadata/description.md new file mode 100644 index 00000000..86fab798 --- /dev/null +++ b/apps/heimdall/metadata/description.md @@ -0,0 +1,7 @@ +## About + +As the name suggests Heimdall is a dashboard for all your web applications. It doesn't need to be limited to applications though, you can add links to anything you like. + +Heimdall is an elegant solution to organise all your web applications. It’s dedicated to this purpose so you won’t lose your links in a sea of bookmarks. + +Why not use it as your browser start page? It even has the ability to include a search bar using either Google, Bing or DuckDuckGo. diff --git a/apps/heimdall/metadata/logo.jpg b/apps/heimdall/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e36ec2ac29292e306b06f36507c958c39af24458 GIT binary patch literal 27500 zcmdpebwChH7w^&_Egd2)Al;pk(w)-XodSZOv~+h#DJdW&-3`(pE!|yj(d)g}d%y3+ zAMgF~W`RBPJLgQCnLQIb%iZMNHvmmaOi~PhfPerr!3(%sf-IF35z&=bloOMb76lmq z0GVNBXzd6s2msbLP7aFV!o=ztn#6G50Z0H1ypRE6eM3h(86`1g;J=2`uK<`50F2Vz zr}baO{xbvF$k@>k03e7#wxFS%gA+*Wfi%0TlifX?0MeL-X8J}TT@2E+4qyR6dh#AO z_(^Zy)22UYNRR|D9h4PCz`9|AG_mR5XoJ7ehGq`dpbRT0LvCbk1EvqD{*yMkr@iiJ zYb$54Y(K(%4Uvp(RFuFwIrvKmhy#*<3?L5>0|tOIU=COTP5>Qvw*e7HKoR5%{}+Ay zANum3mI0_`4j6(O&j4G%8qoit58Sr_CV8~=L6Xj0H6%oO1d8a5|aRc(iBWv`@hs1 z9#r_#ZvRu6KkRom1Bd`nkdXI3V1NdHVBle3prK(Nz`?=7BRxPuLVSRTh>Y?O4H*R; z1rZSq8x0);6AKFq2^9wy8x!{-CKl#>A`noZ4m1n`3=9G$G9ohO|8cl$0np(gjv
yu6*0<1Wb)$D?RuW>c^0;=wH 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 literal 0 HcmV?d00001