@simplehomelab/deployrr 6.0.0-rc3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/announcement +1 -0
- package/apps/community/CONTRIBUTING.md +660 -0
- package/apps/community/apps.json +6 -0
- package/apps/core/apps.json +16 -0
- package/apps/core/authelia/authelia-redis.yml +24 -0
- package/apps/core/authelia/compose.yml +45 -0
- package/apps/core/authelia/files/chain-authelia.yml +8 -0
- package/apps/core/authelia/files/configuration.yml +100 -0
- package/apps/core/authelia/files/middlewares-authelia.yml +9 -0
- package/apps/core/authelia/files/users.yml +15 -0
- package/apps/core/authelia/manifest.json +156 -0
- package/apps/core/authentik/authentik-postgresql.yml +26 -0
- package/apps/core/authentik/authentik-worker.yml +37 -0
- package/apps/core/authentik/compose.yml +51 -0
- package/apps/core/authentik/files/chain-authentik.yml +8 -0
- package/apps/core/authentik/files/middlewares-authentik.yml +19 -0
- package/apps/core/authentik/manifest.json +117 -0
- package/apps/core/crowdsec/compose.yml +23 -0
- package/apps/core/crowdsec/files/acquis-traefik.yaml +4 -0
- package/apps/core/crowdsec/files/acquis.yaml +8 -0
- package/apps/core/crowdsec/files/crowdsec-firewall-bouncer.yaml +46 -0
- package/apps/core/crowdsec/files/custom-whitelists.yaml +13 -0
- package/apps/core/crowdsec/manifest.json +87 -0
- package/apps/core/crowdsec-firewall-bouncer/manifest.json +85 -0
- package/apps/core/deployrr/jokes_and_tips.txt +58 -0
- package/apps/core/deployrr-dashboard/compose.yml +23 -0
- package/apps/core/deployrr-dashboard/files/bookmarks.yaml +51 -0
- package/apps/core/deployrr-dashboard/files/deployrr_icon.ico +0 -0
- package/apps/core/deployrr-dashboard/files/deployrr_icon.png +0 -0
- package/apps/core/deployrr-dashboard/files/docker.yaml +10 -0
- package/apps/core/deployrr-dashboard/files/service-template-other.yaml +10 -0
- package/apps/core/deployrr-dashboard/files/service-template-web-local.yaml +10 -0
- package/apps/core/deployrr-dashboard/files/service-template-web-remote.yaml +10 -0
- package/apps/core/deployrr-dashboard/files/services.yaml +18 -0
- package/apps/core/deployrr-dashboard/files/settings.yaml +13 -0
- package/apps/core/deployrr-dashboard/files/widgets.yaml +20 -0
- package/apps/core/deployrr-dashboard/manifest.json +133 -0
- package/apps/core/npm/compose.yml +40 -0
- package/apps/core/npm/manifest.json +60 -0
- package/apps/core/oauth/compose.yml +38 -0
- package/apps/core/oauth/files/chain-oauth.yml +8 -0
- package/apps/core/oauth/files/middlewares-oauth.yml +8 -0
- package/apps/core/oauth/files/oauth-secrets-template +3 -0
- package/apps/core/oauth/manifest.json +58 -0
- package/apps/core/socket-proxy/compose.yml +54 -0
- package/apps/core/socket-proxy/manifest.json +62 -0
- package/apps/core/system/bash-aliases/udms_bash_aliases +229 -0
- package/apps/core/system/bash-aliases/udms_bashrc +5 -0
- package/apps/core/system/docker/custom.yml +4 -0
- package/apps/core/system/docker/starter.yml +25 -0
- package/apps/core/system/rclone/compose.yml +28 -0
- package/apps/core/system/rclone/rclone-mount-template.service +43 -0
- package/apps/core/system/rclone/rclone-template.conf +6 -0
- package/apps/core/system/rclone/start-media-after-boot.service +9 -0
- package/apps/core/system/rclone/start-media-after-boot.sh +57 -0
- package/apps/core/tinyauth/compose.yml +47 -0
- package/apps/core/tinyauth/files/chain-tinyauth.yml +8 -0
- package/apps/core/tinyauth/files/middlewares-tinyauth.yml +10 -0
- package/apps/core/tinyauth/manifest.json +70 -0
- package/apps/core/traefik/compose.yml +106 -0
- package/apps/core/traefik/files/app-http-bypass-template.yml +31 -0
- package/apps/core/traefik/files/app-http-template.yml +18 -0
- package/apps/core/traefik/files/app-https-ssc-bypass-template.yml +36 -0
- package/apps/core/traefik/files/app-https-ssc-template.yml +23 -0
- package/apps/core/traefik/files/chain-basic-auth.yml +9 -0
- package/apps/core/traefik/files/chain-nextcloud.yml +8 -0
- package/apps/core/traefik/files/chain-no-auth.yml +8 -0
- package/apps/core/traefik/files/domain-passthrough-template.yml +15 -0
- package/apps/core/traefik/files/labels-auth-bypass-template.yml +6 -0
- package/apps/core/traefik/files/labels-template.yml +10 -0
- package/apps/core/traefik/files/middlewares-basic-auth.yml +9 -0
- package/apps/core/traefik/files/middlewares-buffering.yml +9 -0
- package/apps/core/traefik/files/middlewares-compress.yml +4 -0
- package/apps/core/traefik/files/middlewares-crowdsec-bouncer.yml +13 -0
- package/apps/core/traefik/files/middlewares-nextcloud.yml +35 -0
- package/apps/core/traefik/files/middlewares-rate-limit.yml +6 -0
- package/apps/core/traefik/files/middlewares-secure-headers.yml +26 -0
- package/apps/core/traefik/files/t2_proxy_network.yml +8 -0
- package/apps/core/traefik/files/tls-opts.yml +19 -0
- package/apps/core/traefik/files/traefik-static-config-example.yml +97 -0
- package/apps/core/traefik/files/traefik.yml +123 -0
- package/apps/core/traefik/files/traefik_global_secrets_template.yml +4 -0
- package/apps/core/traefik/files/traefik_proxy_network.yml +8 -0
- package/apps/core/traefik/manifest.json +70 -0
- package/apps/manifest-schema.json +760 -0
- package/apps/official/adminer/compose.yml +14 -0
- package/apps/official/adminer/manifest.json +65 -0
- package/apps/official/airsonic-advanced/compose.yml +26 -0
- package/apps/official/airsonic-advanced/manifest.json +78 -0
- package/apps/official/apps.json +146 -0
- package/apps/official/audiobookshelf/compose.yml +20 -0
- package/apps/official/audiobookshelf/manifest.json +65 -0
- package/apps/official/autobrr/autobrr-postgresql.yml +24 -0
- package/apps/official/autobrr/compose.yml +27 -0
- package/apps/official/autobrr/manifest.json +101 -0
- package/apps/official/baikal/compose.yml +17 -0
- package/apps/official/baikal/manifest.json +65 -0
- package/apps/official/bazarr/compose.yml +23 -0
- package/apps/official/bazarr/manifest.json +65 -0
- package/apps/official/beets/compose.yml +24 -0
- package/apps/official/beets/manifest.json +65 -0
- package/apps/official/bookstack/bookstack-mariadb.yml +26 -0
- package/apps/official/bookstack/compose.yml +31 -0
- package/apps/official/bookstack/manifest.json +113 -0
- package/apps/official/boxarr/compose.yml +18 -0
- package/apps/official/boxarr/manifest.json +65 -0
- package/apps/official/cadvisor/compose.yml +23 -0
- package/apps/official/cadvisor/files/pre-install.sh +10 -0
- package/apps/official/cadvisor/manifest.json +69 -0
- package/apps/official/calibre/compose.yml +27 -0
- package/apps/official/calibre/manifest.json +87 -0
- package/apps/official/calibre-web/compose.yml +23 -0
- package/apps/official/calibre-web/manifest.json +74 -0
- package/apps/official/change-detection/compose.yml +22 -0
- package/apps/official/change-detection/manifest.json +65 -0
- package/apps/official/chromium/compose.yml +25 -0
- package/apps/official/chromium/manifest.json +82 -0
- package/apps/official/cleanuparr/compose.yml +30 -0
- package/apps/official/cleanuparr/manifest.json +65 -0
- package/apps/official/cloud-commander/compose.yml +24 -0
- package/apps/official/cloud-commander/manifest.json +65 -0
- package/apps/official/cloudflare-tunnel/compose.yml +26 -0
- package/apps/official/cloudflare-tunnel/files/pre-install.sh +7 -0
- package/apps/official/cloudflare-tunnel/manifest.json +70 -0
- package/apps/official/cyberchef/compose.yml +14 -0
- package/apps/official/cyberchef/manifest.json +65 -0
- package/apps/official/dashy/compose.yml +27 -0
- package/apps/official/dashy/files/starter-conf.yml +45 -0
- package/apps/official/dashy/manifest.json +72 -0
- package/apps/official/ddns-updater/compose.yml +28 -0
- package/apps/official/ddns-updater/files/config.json +14 -0
- package/apps/official/ddns-updater/files/pre-install.sh +18 -0
- package/apps/official/ddns-updater/manifest.json +71 -0
- package/apps/official/deunhealth/compose.yml +17 -0
- package/apps/official/deunhealth/manifest.json +46 -0
- package/apps/official/digikam/compose.yml +23 -0
- package/apps/official/digikam/manifest.json +85 -0
- package/apps/official/dispatcharr/compose.yml +39 -0
- package/apps/official/dispatcharr/manifest.json +86 -0
- package/apps/official/docker-gc/compose.yml +25 -0
- package/apps/official/docker-gc/files/docker-gc-exclude +9 -0
- package/apps/official/docker-gc/files/pre-install.sh +22 -0
- package/apps/official/docker-gc/manifest.json +54 -0
- package/apps/official/dockhand/compose.yml +24 -0
- package/apps/official/dockhand/dockhand-postgresql.yml +24 -0
- package/apps/official/dockhand/manifest.json +105 -0
- package/apps/official/dockpeek/compose.yml +20 -0
- package/apps/official/dockpeek/manifest.json +95 -0
- package/apps/official/dockwatch/compose.yml +31 -0
- package/apps/official/dockwatch/manifest.json +65 -0
- package/apps/official/dokuwiki/compose.yml +21 -0
- package/apps/official/dokuwiki/manifest.json +81 -0
- package/apps/official/double-commander/compose.yml +26 -0
- package/apps/official/double-commander/manifest.json +83 -0
- package/apps/official/dozzle/compose.yml +23 -0
- package/apps/official/dozzle/manifest.json +65 -0
- package/apps/official/dozzle-agent/compose.yml +26 -0
- package/apps/official/dozzle-agent/manifest.json +71 -0
- package/apps/official/dweebui/compose.yml +21 -0
- package/apps/official/dweebui/manifest.json +81 -0
- package/apps/official/emby/compose.yml +29 -0
- package/apps/official/emby/manifest.json +98 -0
- package/apps/official/esphome/compose.yml +20 -0
- package/apps/official/esphome/manifest.json +65 -0
- package/apps/official/filezilla/compose.yml +23 -0
- package/apps/official/filezilla/manifest.json +82 -0
- package/apps/official/flame/compose.yml +21 -0
- package/apps/official/flame/manifest.json +73 -0
- package/apps/official/flaresolverr/compose.yml +19 -0
- package/apps/official/flaresolverr/manifest.json +75 -0
- package/apps/official/flowise/compose.yml +46 -0
- package/apps/official/flowise/flowise-postgresql.yml +24 -0
- package/apps/official/flowise/flowise-redis.yml +23 -0
- package/apps/official/flowise/manifest.json +125 -0
- package/apps/official/freshrss/compose.yml +20 -0
- package/apps/official/freshrss/manifest.json +65 -0
- package/apps/official/funkwhale/compose.yml +24 -0
- package/apps/official/funkwhale/files/post-install.sh +8 -0
- package/apps/official/funkwhale/manifest.json +69 -0
- package/apps/official/gamevault/compose.yml +26 -0
- package/apps/official/gamevault/gamevault-postgresql.yml +24 -0
- package/apps/official/gamevault/manifest.json +101 -0
- package/apps/official/glances/compose.yml +26 -0
- package/apps/official/glances/files/glances.conf +771 -0
- package/apps/official/glances/manifest.json +72 -0
- package/apps/official/gluetun/compose.yml +33 -0
- package/apps/official/gluetun/files/post-install.sh +78 -0
- package/apps/official/gluetun/manifest.json +88 -0
- package/apps/official/gonic/compose.yml +26 -0
- package/apps/official/gonic/manifest.json +78 -0
- package/apps/official/gptwol/compose.yml +23 -0
- package/apps/official/gptwol/manifest.json +81 -0
- package/apps/official/grafana/compose.yml +19 -0
- package/apps/official/grafana/manifest.json +81 -0
- package/apps/official/grocy/compose.yml +20 -0
- package/apps/official/grocy/manifest.json +74 -0
- package/apps/official/guacamole/compose.yml +26 -0
- package/apps/official/guacamole/guacamole-mariadb.yml +26 -0
- package/apps/official/guacamole/guacd.yml +12 -0
- package/apps/official/guacamole/hooks/post-install.sh +60 -0
- package/apps/official/guacamole/manifest.json +131 -0
- package/apps/official/heimdall/compose.yml +20 -0
- package/apps/official/heimdall/manifest.json +65 -0
- package/apps/official/homarr/compose.yml +22 -0
- package/apps/official/homarr/manifest.json +73 -0
- package/apps/official/homebridge/compose.yml +13 -0
- package/apps/official/homebridge/manifest.json +66 -0
- package/apps/official/homepage/compose.yml +22 -0
- package/apps/official/homepage/manifest.json +65 -0
- package/apps/official/homer/compose.yml +20 -0
- package/apps/official/homer/manifest.json +65 -0
- package/apps/official/immich/compose.yml +35 -0
- package/apps/official/immich/immich-machine-learning.yml +21 -0
- package/apps/official/immich/immich-postgresql.yml +30 -0
- package/apps/official/immich/immich-redis.yml +23 -0
- package/apps/official/immich/manifest.json +135 -0
- package/apps/official/influxdb/compose.yml +17 -0
- package/apps/official/influxdb/manifest.json +65 -0
- package/apps/official/it-tools/compose.yml +14 -0
- package/apps/official/it-tools/manifest.json +65 -0
- package/apps/official/jackett/compose.yml +21 -0
- package/apps/official/jackett/manifest.json +65 -0
- package/apps/official/jellyfin/compose.yml +27 -0
- package/apps/official/jellyfin/manifest.json +89 -0
- package/apps/official/jellyseerr/compose.yml +19 -0
- package/apps/official/jellyseerr/manifest.json +65 -0
- package/apps/official/kasm/compose.yml +27 -0
- package/apps/official/kasm/manifest.json +115 -0
- package/apps/official/kavita/compose.yml +21 -0
- package/apps/official/kavita/manifest.json +65 -0
- package/apps/official/kometa/compose.yml +23 -0
- package/apps/official/kometa/manifest.json +56 -0
- package/apps/official/komga/compose.yml +22 -0
- package/apps/official/komga/manifest.json +65 -0
- package/apps/official/langfuse/compose.yml +64 -0
- package/apps/official/langfuse/files/pre-install.sh +178 -0
- package/apps/official/langfuse/langfuse-clickhouse.yml +25 -0
- package/apps/official/langfuse/langfuse-minio.yml +25 -0
- package/apps/official/langfuse/langfuse-postgresql.yml +26 -0
- package/apps/official/langfuse/langfuse-redis.yml +22 -0
- package/apps/official/langfuse/langfuse-worker.yml +50 -0
- package/apps/official/langfuse/manifest.json +201 -0
- package/apps/official/lidarr/compose.yml +25 -0
- package/apps/official/lidarr/manifest.json +65 -0
- package/apps/official/lollypop/compose.yml +26 -0
- package/apps/official/lollypop/manifest.json +83 -0
- package/apps/official/maintainerr/compose.yml +20 -0
- package/apps/official/maintainerr/manifest.json +72 -0
- package/apps/official/mariadb/compose.yml +27 -0
- package/apps/official/mariadb/manifest.json +74 -0
- package/apps/official/mosquitto/compose.yml +24 -0
- package/apps/official/mosquitto/files/mosquitto.conf +15 -0
- package/apps/official/mosquitto/files/passwd +0 -0
- package/apps/official/mosquitto/files/post-install.sh +23 -0
- package/apps/official/mosquitto/manifest.json +123 -0
- package/apps/official/mqttx-web/compose.yml +14 -0
- package/apps/official/mqttx-web/manifest.json +74 -0
- package/apps/official/mylar3/compose.yml +22 -0
- package/apps/official/mylar3/manifest.json +65 -0
- package/apps/official/n8n/compose.yml +29 -0
- package/apps/official/n8n/files/pre-install.sh +26 -0
- package/apps/official/n8n/manifest.json +103 -0
- package/apps/official/n8n/n8n-postgresql.yml +26 -0
- package/apps/official/navidrome/compose.yml +26 -0
- package/apps/official/navidrome/manifest.json +65 -0
- package/apps/official/netdata/compose.yml +28 -0
- package/apps/official/netdata/manifest.json +66 -0
- package/apps/official/nextcloud/compose.yml +38 -0
- package/apps/official/nextcloud/manifest.json +159 -0
- package/apps/official/nextcloud/nextcloud-mariadb.yml +29 -0
- package/apps/official/nextcloud/nextcloud-redis.yml +20 -0
- package/apps/official/node-exporter/compose.yml +23 -0
- package/apps/official/node-exporter/manifest.json +65 -0
- package/apps/official/node-red/compose.yml +16 -0
- package/apps/official/node-red/manifest.json +72 -0
- package/apps/official/notifiarr/compose.yml +23 -0
- package/apps/official/notifiarr/manifest.json +75 -0
- package/apps/official/nzbget/compose.yml +23 -0
- package/apps/official/nzbget/manifest.json +74 -0
- package/apps/official/ollama/compose.yml +17 -0
- package/apps/official/ollama/manifest.json +85 -0
- package/apps/official/ombi/compose.yml +21 -0
- package/apps/official/ombi/manifest.json +65 -0
- package/apps/official/open-webui/compose.yml +21 -0
- package/apps/official/open-webui/manifest.json +75 -0
- package/apps/official/openhands/compose.yml +23 -0
- package/apps/official/openhands/manifest.json +65 -0
- package/apps/official/organizr/compose.yml +19 -0
- package/apps/official/organizr/manifest.json +78 -0
- package/apps/official/overseerr/compose.yml +20 -0
- package/apps/official/overseerr/manifest.json +65 -0
- package/apps/official/paperless-ai/compose.yml +16 -0
- package/apps/official/paperless-ai/manifest.json +74 -0
- package/apps/official/paperless-ngx/compose.yml +51 -0
- package/apps/official/paperless-ngx/gotenberg.yml +18 -0
- package/apps/official/paperless-ngx/manifest.json +179 -0
- package/apps/official/paperless-ngx/paperless-ngx-mariadb.yml +26 -0
- package/apps/official/paperless-ngx/paperless-ngx-redis.yml +23 -0
- package/apps/official/paperless-ngx/tika.yml +12 -0
- package/apps/official/pdfding/compose.yml +32 -0
- package/apps/official/pdfding/files/post-install.sh +55 -0
- package/apps/official/pdfding/manifest.json +120 -0
- package/apps/official/pdfding/pdfding-postgresql.yml +24 -0
- package/apps/official/pgadmin/compose.yml +17 -0
- package/apps/official/pgadmin/manifest.json +80 -0
- package/apps/official/phpmyadmin/compose.yml +22 -0
- package/apps/official/phpmyadmin/manifest.json +65 -0
- package/apps/official/pihole/compose.yml +41 -0
- package/apps/official/pihole/manifest.json +89 -0
- package/apps/official/piwigo/compose.yml +22 -0
- package/apps/official/piwigo/manifest.json +65 -0
- package/apps/official/plex/compose.yml +39 -0
- package/apps/official/plex/files/pre-install.sh +24 -0
- package/apps/official/plex/manifest.json +109 -0
- package/apps/official/portainer/compose.yml +22 -0
- package/apps/official/portainer/manifest.json +91 -0
- package/apps/official/postgresql/compose.yml +28 -0
- package/apps/official/postgresql/manifest.json +89 -0
- package/apps/official/privatebin/compose.yml +20 -0
- package/apps/official/privatebin/files/conf.php +90 -0
- package/apps/official/privatebin/manifest.json +82 -0
- package/apps/official/projectsend/compose.yml +21 -0
- package/apps/official/projectsend/manifest.json +72 -0
- package/apps/official/prometheus/compose.yml +25 -0
- package/apps/official/prometheus/files/prometheus.yml +3 -0
- package/apps/official/prometheus/manifest.json +79 -0
- package/apps/official/prowlarr/compose.yml +22 -0
- package/apps/official/prowlarr/manifest.json +65 -0
- package/apps/official/pulse/compose.yml +28 -0
- package/apps/official/pulse/files/post-install.sh +29 -0
- package/apps/official/pulse/manifest.json +78 -0
- package/apps/official/qbittorrent/compose.yml +22 -0
- package/apps/official/qbittorrent/files/pre-install.sh +5 -0
- package/apps/official/qbittorrent/files/qBittorrent.conf +39 -0
- package/apps/official/qbittorrent/manifest.json +96 -0
- package/apps/official/qbittorrent-vpn/compose.yml +26 -0
- package/apps/official/qbittorrent-vpn/files/post-install.sh +52 -0
- package/apps/official/qbittorrent-vpn/files/pre-install.sh +10 -0
- package/apps/official/qbittorrent-vpn/files/qBittorrent.conf +39 -0
- package/apps/official/qbittorrent-vpn/manifest.json +108 -0
- package/apps/official/qdrant/compose.yml +15 -0
- package/apps/official/qdrant/manifest.json +82 -0
- package/apps/official/radarr/compose.yml +25 -0
- package/apps/official/radarr/manifest.json +65 -0
- package/apps/official/redis/compose.yml +26 -0
- package/apps/official/redis/manifest.json +73 -0
- package/apps/official/redis-commander/compose.yml +20 -0
- package/apps/official/redis-commander/manifest.json +65 -0
- package/apps/official/remmina/compose.yml +23 -0
- package/apps/official/remmina/manifest.json +84 -0
- package/apps/official/resilio-sync/compose.yml +23 -0
- package/apps/official/resilio-sync/manifest.json +74 -0
- package/apps/official/sabnzbd/compose.yml +23 -0
- package/apps/official/sabnzbd/files/post-install.sh +35 -0
- package/apps/official/sabnzbd/manifest.json +75 -0
- package/apps/official/scrutiny/compose.yml +25 -0
- package/apps/official/scrutiny/manifest.json +113 -0
- package/apps/official/scrutiny/scrutiny-influxdb.yml +28 -0
- package/apps/official/searxng/compose.yml +28 -0
- package/apps/official/searxng/files/limiter.toml +6 -0
- package/apps/official/searxng/files/pre-install.sh +25 -0
- package/apps/official/searxng/files/settings.yml +8 -0
- package/apps/official/searxng/manifest.json +88 -0
- package/apps/official/searxng/searxng-valkey.yml +26 -0
- package/apps/official/shellinabox/manifest.json +68 -0
- package/apps/official/smokeping/compose.yml +21 -0
- package/apps/official/smokeping/manifest.json +65 -0
- package/apps/official/sonarr/compose.yml +25 -0
- package/apps/official/sonarr/manifest.json +65 -0
- package/apps/official/speedtest-tracker/compose.yml +30 -0
- package/apps/official/speedtest-tracker/manifest.json +119 -0
- package/apps/official/speedtest-tracker/speedtest-tracker-mariadb.yml +24 -0
- package/apps/official/sshwifty/compose.yml +17 -0
- package/apps/official/sshwifty/files/pre-install.sh +34 -0
- package/apps/official/sshwifty/files/sshwifty.conf.json +36 -0
- package/apps/official/sshwifty/manifest.json +101 -0
- package/apps/official/stirling-pdf/compose.yml +23 -0
- package/apps/official/stirling-pdf/manifest.json +65 -0
- package/apps/official/supabase/compose.yml +39 -0
- package/apps/official/supabase/files/pre-install.sh +201 -0
- package/apps/official/supabase/files/volumes/api/kong.yml +221 -0
- package/apps/official/supabase/files/volumes/db/_supabase.sql +3 -0
- package/apps/official/supabase/files/volumes/db/jwt.sql +5 -0
- package/apps/official/supabase/files/volumes/db/logs.sql +6 -0
- package/apps/official/supabase/files/volumes/db/pooler.sql +6 -0
- package/apps/official/supabase/files/volumes/db/realtime.sql +4 -0
- package/apps/official/supabase/files/volumes/db/roles.sql +8 -0
- package/apps/official/supabase/files/volumes/db/webhooks.sql +208 -0
- package/apps/official/supabase/files/volumes/functions/hello/index.ts +6 -0
- package/apps/official/supabase/files/volumes/functions/main/index.ts +93 -0
- package/apps/official/supabase/files/volumes/logs/vector.yml +266 -0
- package/apps/official/supabase/files/volumes/pooler/pooler.exs +30 -0
- package/apps/official/supabase/manifest.json +327 -0
- package/apps/official/supabase/supabase-analytics.yml +32 -0
- package/apps/official/supabase/supabase-auth.yml +34 -0
- package/apps/official/supabase/supabase-db.yml +42 -0
- package/apps/official/supabase/supabase-functions.yml +24 -0
- package/apps/official/supabase/supabase-imgproxy.yml +25 -0
- package/apps/official/supabase/supabase-kong.yml +30 -0
- package/apps/official/supabase/supabase-meta.yml +20 -0
- package/apps/official/supabase/supabase-pooler.yml +45 -0
- package/apps/official/supabase/supabase-realtime.yml +42 -0
- package/apps/official/supabase/supabase-rest.yml +21 -0
- package/apps/official/supabase/supabase-storage.yml +36 -0
- package/apps/official/supabase/supabase-vector.yml +23 -0
- package/apps/official/tailscale/compose.yml +23 -0
- package/apps/official/tailscale/manifest.json +65 -0
- package/apps/official/tautulli/compose.yml +21 -0
- package/apps/official/tautulli/files/pre-install.sh +9 -0
- package/apps/official/tautulli/manifest.json +69 -0
- package/apps/official/termix/compose.yml +18 -0
- package/apps/official/termix/manifest.json +65 -0
- package/apps/official/teslamate/teslamate-grafana.yml +22 -0
- package/apps/official/teslamate/teslamate-mosquitto.yml +27 -0
- package/apps/official/teslamate/teslamate-pgsql.yml +24 -0
- package/apps/official/teslamate/teslamate.yml +27 -0
- package/apps/official/thelounge/compose.yml +20 -0
- package/apps/official/thelounge/manifest.json +65 -0
- package/apps/official/theme-park/compose.yml +21 -0
- package/apps/official/theme-park/manifest.json +74 -0
- package/apps/official/traefik-access-log/compose.yml +14 -0
- package/apps/official/traefik-access-log/manifest.json +59 -0
- package/apps/official/traefik-certs-dumper/compose.yml +18 -0
- package/apps/official/traefik-certs-dumper/manifest.json +56 -0
- package/apps/official/traefik-error-log/compose.yml +14 -0
- package/apps/official/traefik-error-log/manifest.json +59 -0
- package/apps/official/transmission/compose.yml +33 -0
- package/apps/official/transmission/manifest.json +90 -0
- package/apps/official/trilium/compose.yml +19 -0
- package/apps/official/trilium/manifest.json +65 -0
- package/apps/official/uptime-kuma/compose.yml +17 -0
- package/apps/official/uptime-kuma/manifest.json +65 -0
- package/apps/official/vaultwarden/compose.yml +20 -0
- package/apps/official/vaultwarden/files/pre-install.sh +27 -0
- package/apps/official/vaultwarden/manifest.json +86 -0
- package/apps/official/vikunja/compose.yml +30 -0
- package/apps/official/vikunja/manifest.json +123 -0
- package/apps/official/vikunja/vikunja-mariadb.yml +26 -0
- package/apps/official/viniplay/compose.yml +18 -0
- package/apps/official/viniplay/files/pre-install.sh +9 -0
- package/apps/official/viniplay/manifest.json +63 -0
- package/apps/official/vscode/compose.yml +28 -0
- package/apps/official/vscode/manifest.json +65 -0
- package/apps/official/wallos/compose.yml +19 -0
- package/apps/official/wallos/manifest.json +65 -0
- package/apps/official/weaviate/compose.yml +28 -0
- package/apps/official/weaviate/manifest.json +82 -0
- package/apps/official/wg-easy/compose.yml +31 -0
- package/apps/official/wg-easy/files/post-install.sh +32 -0
- package/apps/official/wg-easy/manifest.json +118 -0
- package/apps/official/wikidocs/compose.yml +19 -0
- package/apps/official/wikidocs/manifest.json +65 -0
- package/apps/official/wud/compose.yml +22 -0
- package/apps/official/wud/manifest.json +74 -0
- package/apps/official/xpipe-webtop/compose.yml +21 -0
- package/apps/official/xpipe-webtop/manifest.json +83 -0
- package/apps/official/zerotier/compose.yml +17 -0
- package/apps/official/zerotier/files/post-install.sh +23 -0
- package/apps/official/zerotier/manifest.json +78 -0
- package/apps/unofficial/9router/compose.yml +30 -0
- package/apps/unofficial/9router/files/oauth-fix.patch +32 -0
- package/apps/unofficial/9router/files/pre-install.sh +87 -0
- package/apps/unofficial/9router/manifest.json +144 -0
- package/apps/unofficial/openclaw/Dockerfile.full +79 -0
- package/apps/unofficial/openclaw/compose.yml +60 -0
- package/apps/unofficial/openclaw/files/post-install.sh +316 -0
- package/apps/unofficial/openclaw/files/pre-install.sh +174 -0
- package/apps/unofficial/openclaw/manifest.json +178 -0
- package/apps/version_pins +67 -0
- package/bin/deployrr-init.sh +49 -0
- package/latest-version +1 -0
- package/package.json +21 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "../../../apps/manifest-schema.json",
|
|
3
|
+
"version": "1.2",
|
|
4
|
+
"app": {
|
|
5
|
+
"sname": "9router",
|
|
6
|
+
"pname": "9Router",
|
|
7
|
+
"description": "9Router is a universal AI proxy that smart-routes requests across Claude, GPT, Gemini, and other LLMs. It maximizes subscription usage with auto-fallback, quota tracking, multi-account support, and format translation — all through a single OpenAI-compatible endpoint.",
|
|
8
|
+
"descriptionShort": "Universal AI proxy & smart router",
|
|
9
|
+
"icon": "https://raw.githubusercontent.com/decolua/9router/master/public/favicon.svg",
|
|
10
|
+
"category": "unofficial",
|
|
11
|
+
"menuNumber": "05",
|
|
12
|
+
"tags": [
|
|
13
|
+
"ai",
|
|
14
|
+
"proxy",
|
|
15
|
+
"llm",
|
|
16
|
+
"router",
|
|
17
|
+
"pro"
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
"deployment": {
|
|
21
|
+
"type": "single",
|
|
22
|
+
"compose": "compose.yml",
|
|
23
|
+
"profiles": [
|
|
24
|
+
"apps",
|
|
25
|
+
"all"
|
|
26
|
+
],
|
|
27
|
+
"networks": [
|
|
28
|
+
"default"
|
|
29
|
+
],
|
|
30
|
+
"build": {
|
|
31
|
+
"imageName": "deployrr/9router:latest",
|
|
32
|
+
"localBuild": true,
|
|
33
|
+
"repoUrl": "https://github.com/decolua/9router.git"
|
|
34
|
+
},
|
|
35
|
+
"webui": true,
|
|
36
|
+
"port": 20128,
|
|
37
|
+
"protocol": "http"
|
|
38
|
+
},
|
|
39
|
+
"requirements": {
|
|
40
|
+
"prerequisites": [
|
|
41
|
+
"prerequisites",
|
|
42
|
+
"pro"
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
"env": {
|
|
46
|
+
"variables": [
|
|
47
|
+
{
|
|
48
|
+
"name": "NINEROUTER_PORT",
|
|
49
|
+
"description": "9Router dashboard and API port",
|
|
50
|
+
"type": "port",
|
|
51
|
+
"default": 20128,
|
|
52
|
+
"prompt": true,
|
|
53
|
+
"required": true,
|
|
54
|
+
"validation": {
|
|
55
|
+
"type": "port",
|
|
56
|
+
"min": 1,
|
|
57
|
+
"max": 65535
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
],
|
|
61
|
+
"secrets": [
|
|
62
|
+
{
|
|
63
|
+
"name": "ninerouter_jwt_secret",
|
|
64
|
+
"description": "JWT secret for 9Router session authentication. Used to sign dashboard login tokens.",
|
|
65
|
+
"type": "random",
|
|
66
|
+
"length": 32,
|
|
67
|
+
"addToCompose": false
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"name": "ninerouter_password",
|
|
71
|
+
"description": "Initial dashboard login password for 9Router.",
|
|
72
|
+
"type": "random",
|
|
73
|
+
"length": 16,
|
|
74
|
+
"addToCompose": false
|
|
75
|
+
}
|
|
76
|
+
],
|
|
77
|
+
"constants": [
|
|
78
|
+
{
|
|
79
|
+
"name": "NINEROUTER_DATA_DIR",
|
|
80
|
+
"value": "$DOCKERDIR/appdata/9router/data",
|
|
81
|
+
"description": "9Router persistent data directory"
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
},
|
|
85
|
+
"hooks": {
|
|
86
|
+
"preInstall": {
|
|
87
|
+
"dialog": {
|
|
88
|
+
"type": "warning",
|
|
89
|
+
"title": "9Router - Build from Source",
|
|
90
|
+
"message": "\\Z1IMPORTANT:\\Zn 9Router is an \\Z4unofficial\\Zn app that must be built from source.\\n\\nThe first install will:\\n• Clone the 9Router repository from GitHub\\n• Build the Docker image locally (may take 3-5 minutes)\\n• Require an active internet connection\\n\\nSubsequent starts will use the cached image.\\n\\nDo you want to proceed?"
|
|
91
|
+
},
|
|
92
|
+
"script": "files/pre-install.sh"
|
|
93
|
+
},
|
|
94
|
+
"postInstall": {
|
|
95
|
+
"messages": [
|
|
96
|
+
{
|
|
97
|
+
"style": "warning",
|
|
98
|
+
"text": "COPY THIS PASSWORD TO LOG IN: $INITIAL_PASSWORD"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"style": "info",
|
|
102
|
+
"text": "9Router dashboard is running at http://$SERVER_LAN_IP:$NINEROUTER_PORT/dashboard"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"style": "note",
|
|
106
|
+
"text": "Password also saved to $DOCKER_FOLDER/secrets/ninerouter_password"
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"style": "note",
|
|
110
|
+
"text": "OpenAI-compatible API endpoint: http://$SERVER_LAN_IP:$NINEROUTER_PORT/v1"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"style": "info",
|
|
114
|
+
"text": "To connect OpenClaw: use http://9router:20128/v1 as the provider endpoint"
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"style": "info",
|
|
118
|
+
"text": "For more info: https://github.com/decolua/9router"
|
|
119
|
+
}
|
|
120
|
+
],
|
|
121
|
+
"copyValue": "$INITIAL_PASSWORD",
|
|
122
|
+
"copyLabel": "Copy Password"
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
"folders": {
|
|
126
|
+
"appdata": [
|
|
127
|
+
"data"
|
|
128
|
+
]
|
|
129
|
+
},
|
|
130
|
+
"traefik": {
|
|
131
|
+
"supported": true
|
|
132
|
+
},
|
|
133
|
+
"dashboard": {
|
|
134
|
+
"enabled": true,
|
|
135
|
+
"location": "local",
|
|
136
|
+
"showStats": true,
|
|
137
|
+
"portVariable": "NINEROUTER_PORT"
|
|
138
|
+
},
|
|
139
|
+
"status": {
|
|
140
|
+
"file": "05_9router_status",
|
|
141
|
+
"successMessage": "9Router Setup Completed",
|
|
142
|
+
"telemetryAction": "9router"
|
|
143
|
+
}
|
|
144
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# OpenClaw - Power-user Dockerfile
|
|
2
|
+
# Faithful copy of upstream Dockerfile with power-user defaults enabled.
|
|
3
|
+
# See: https://docs.openclaw.ai/install/docker#power-user-%2F-full-featured-container-opt-in
|
|
4
|
+
#
|
|
5
|
+
# Differences from upstream Dockerfile:
|
|
6
|
+
# OPENCLAW_DOCKER_APT_PACKAGES defaults to full toolset (upstream: empty)
|
|
7
|
+
# OPENCLAW_INSTALL_BROWSER defaults to "1" (upstream: empty)
|
|
8
|
+
#
|
|
9
|
+
# This file is copied into the OpenClaw repo's build context by pre-install.sh
|
|
10
|
+
# and used instead of the standard Dockerfile.
|
|
11
|
+
|
|
12
|
+
FROM node:22-bookworm
|
|
13
|
+
|
|
14
|
+
# Install Bun (required for build scripts)
|
|
15
|
+
RUN curl -fsSL https://bun.sh/install | bash
|
|
16
|
+
ENV PATH="/root/.bun/bin:${PATH}"
|
|
17
|
+
|
|
18
|
+
RUN corepack enable
|
|
19
|
+
|
|
20
|
+
WORKDIR /app
|
|
21
|
+
|
|
22
|
+
# ── Extra packages for power-user features ─────────────────────────
|
|
23
|
+
# Upstream default: "" (empty). Full variant bakes in common dev tools.
|
|
24
|
+
ARG OPENCLAW_DOCKER_APT_PACKAGES="git curl jq build-essential procps ca-certificates"
|
|
25
|
+
RUN if [ -n "$OPENCLAW_DOCKER_APT_PACKAGES" ]; then \
|
|
26
|
+
apt-get update && \
|
|
27
|
+
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends $OPENCLAW_DOCKER_APT_PACKAGES && \
|
|
28
|
+
apt-get clean && \
|
|
29
|
+
rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*; \
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
# ── pnpm monorepo dependency install ───────────────────────────────
|
|
33
|
+
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./
|
|
34
|
+
COPY ui/package.json ./ui/package.json
|
|
35
|
+
COPY patches ./patches
|
|
36
|
+
COPY scripts ./scripts
|
|
37
|
+
|
|
38
|
+
RUN pnpm install --frozen-lockfile
|
|
39
|
+
|
|
40
|
+
# ── Pre-install Chromium + Playwright deps ─────────────────────────
|
|
41
|
+
# Optionally install Chromium and Xvfb for browser automation.
|
|
42
|
+
# Build with: docker build --build-arg OPENCLAW_INSTALL_BROWSER=1 ...
|
|
43
|
+
# Adds ~300MB but eliminates the 60-90s Playwright install on every container start.
|
|
44
|
+
# Must run after pnpm install so playwright-core is available in node_modules.
|
|
45
|
+
# Upstream default: "" (empty). Full variant bakes in Chromium.
|
|
46
|
+
ARG OPENCLAW_INSTALL_BROWSER="1"
|
|
47
|
+
RUN if [ -n "$OPENCLAW_INSTALL_BROWSER" ]; then \
|
|
48
|
+
apt-get update && \
|
|
49
|
+
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends xvfb && \
|
|
50
|
+
node /app/node_modules/playwright-core/cli.js install --with-deps chromium && \
|
|
51
|
+
apt-get clean && \
|
|
52
|
+
rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*; \
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
# ── Build ──────────────────────────────────────────────────────────
|
|
56
|
+
COPY . .
|
|
57
|
+
|
|
58
|
+
RUN pnpm build
|
|
59
|
+
# Force pnpm for UI build (Bun may fail on ARM/Synology architectures)
|
|
60
|
+
ENV OPENCLAW_PREFER_PNPM=1
|
|
61
|
+
RUN pnpm ui:install && pnpm ui:build
|
|
62
|
+
|
|
63
|
+
ENV NODE_ENV=production
|
|
64
|
+
|
|
65
|
+
# Allow non-root user to write temp files during runtime/tests.
|
|
66
|
+
RUN chown -R node:node /app
|
|
67
|
+
|
|
68
|
+
# Security hardening: Run as non-root user
|
|
69
|
+
# The node:22-bookworm image includes a 'node' user (uid 1000)
|
|
70
|
+
# This reduces the attack surface by preventing container escape via root privileges
|
|
71
|
+
USER node
|
|
72
|
+
|
|
73
|
+
# Start gateway server with default config.
|
|
74
|
+
# Binds to loopback (127.0.0.1) by default for security.
|
|
75
|
+
#
|
|
76
|
+
# For container platforms requiring external health checks:
|
|
77
|
+
# 1. Set OPENCLAW_GATEWAY_TOKEN or OPENCLAW_GATEWAY_PASSWORD env var
|
|
78
|
+
# 2. Override CMD: ["node","openclaw.mjs","gateway","--allow-unconfigured","--bind","lan"]
|
|
79
|
+
CMD ["node", "openclaw.mjs", "gateway", "--allow-unconfigured"]
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
services:
|
|
2
|
+
# OpenClaw - Power-user AI Coding Assistant with Agent Sandbox
|
|
3
|
+
# WARNING: Mounts Docker socket - grants container access to host Docker daemon
|
|
4
|
+
openclaw:
|
|
5
|
+
image: deployrr/openclaw:latest
|
|
6
|
+
container_name: openclaw
|
|
7
|
+
security_opt:
|
|
8
|
+
- no-new-privileges:true
|
|
9
|
+
restart: unless-stopped
|
|
10
|
+
profiles: [ "apps", "all" ]
|
|
11
|
+
networks:
|
|
12
|
+
- default
|
|
13
|
+
ports:
|
|
14
|
+
- "$OPENCLAW_PORT:18789"
|
|
15
|
+
volumes:
|
|
16
|
+
- $DOCKERDIR/appdata/openclaw/home:/home/node
|
|
17
|
+
- $DOCKERDIR/appdata/shared/openclaw-cli:/home/node/.openclaw
|
|
18
|
+
- $DOCKERDIR/appdata/openclaw/workspace:/home/node/.openclaw/workspace
|
|
19
|
+
- /var/run/docker.sock:/var/run/docker.sock
|
|
20
|
+
environment:
|
|
21
|
+
- TZ=$TZ
|
|
22
|
+
- PUID=$PUID
|
|
23
|
+
- PGID=$PGID
|
|
24
|
+
- HOME=/home/node
|
|
25
|
+
- TERM=xterm-256color
|
|
26
|
+
- NODE_ENV=production
|
|
27
|
+
- PLAYWRIGHT_BROWSERS_PATH=/home/node/.cache/ms-playwright
|
|
28
|
+
# env_file injects OPENCLAW_GATEWAY_TOKEN as an env var.
|
|
29
|
+
# Docker daemon reads this file as root — host file stays root:root 0600.
|
|
30
|
+
# The container process never needs to read any secret file directly.
|
|
31
|
+
# NOTE: Docker Compose standalone secrets (file: type) do NOT override host file
|
|
32
|
+
# permissions inside the container — mode: 0444 is ignored for bind-mounted secrets.
|
|
33
|
+
env_file:
|
|
34
|
+
- $DOCKERDIR/secrets/openclaw.env
|
|
35
|
+
command: [ "node", "openclaw.mjs", "gateway", "--allow-unconfigured", "--bind", "lan", "--port", "18789" ]
|
|
36
|
+
# DOCKER-LABELS-PLACEHOLDER
|
|
37
|
+
|
|
38
|
+
# OpenClaw CLI — admin commands (onboard, devices approve, etc.)
|
|
39
|
+
# Never auto-started (profiles: cli). Usage:
|
|
40
|
+
# sudo docker compose -f <compose-file> run --rm openclaw-cli devices list
|
|
41
|
+
# sudo docker compose -f <compose-file> run --rm openclaw-cli devices approve --latest
|
|
42
|
+
openclaw-cli:
|
|
43
|
+
image: deployrr/openclaw:latest
|
|
44
|
+
container_name: openclaw-cli
|
|
45
|
+
profiles: [ "cli" ]
|
|
46
|
+
networks:
|
|
47
|
+
- default
|
|
48
|
+
environment:
|
|
49
|
+
- HOME=/home/node
|
|
50
|
+
- TERM=xterm-256color
|
|
51
|
+
- OPENCLAW_GATEWAY_URL=http://openclaw:18789
|
|
52
|
+
volumes:
|
|
53
|
+
- $DOCKERDIR/appdata/shared/openclaw-cli:/home/node/.openclaw
|
|
54
|
+
- $DOCKERDIR/appdata/openclaw/workspace:/home/node/.openclaw/workspace
|
|
55
|
+
env_file:
|
|
56
|
+
- $DOCKERDIR/secrets/openclaw.env
|
|
57
|
+
stdin_open: true
|
|
58
|
+
tty: true
|
|
59
|
+
init: true
|
|
60
|
+
entrypoint: [ "node", "openclaw.mjs" ]
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# OpenClaw: Post-install hook
|
|
3
|
+
# This script is sourced by f_execute_app_hook after container starts.
|
|
4
|
+
# All Deployrr variables (DOCKER_FOLDER, SERVER_LAN_IP, etc.) are available.
|
|
5
|
+
|
|
6
|
+
local _oc_container="openclaw"
|
|
7
|
+
local _oc_secret_file="$DOCKER_FOLDER/secrets/openclaw_gateway_token"
|
|
8
|
+
local _oc_config_dir="$DOCKER_FOLDER/appdata/shared/openclaw-cli"
|
|
9
|
+
local _oc_port="${OPENCLAW_PORT:-18789}"
|
|
10
|
+
local _oc_gateway_ready=false
|
|
11
|
+
|
|
12
|
+
# Step 1: Wait for gateway to become healthy (up to 30s)
|
|
13
|
+
# The container does first-run initialization on startup (writes openclaw.json,
|
|
14
|
+
# sets up workspace, etc.). We must wait for this to complete before overwriting
|
|
15
|
+
# openclaw.json — otherwise the container will overwrite our config.
|
|
16
|
+
f_print_substep "Waiting for OpenClaw gateway to initialize..."
|
|
17
|
+
for _oc_i in $(seq 1 15); do
|
|
18
|
+
if sudo docker exec "$_oc_container" \
|
|
19
|
+
node openclaw.mjs gateway health 2>/dev/null | grep -qi "healthy"; then
|
|
20
|
+
_oc_gateway_ready=true
|
|
21
|
+
f_print_substep "Gateway initialized"
|
|
22
|
+
break
|
|
23
|
+
fi
|
|
24
|
+
sleep 2
|
|
25
|
+
done
|
|
26
|
+
|
|
27
|
+
if [[ "$_oc_gateway_ready" != true ]]; then
|
|
28
|
+
f_print_warning "Gateway health check timed out — continuing anyway"
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
# Step 2: Write openclaw.json AFTER container first-run initialization
|
|
32
|
+
# The container overwrites openclaw.json on first startup (normalizes it).
|
|
33
|
+
# We write our config here — after initialization — then restart the container
|
|
34
|
+
# so it picks up our settings correctly.
|
|
35
|
+
#
|
|
36
|
+
# gateway.auth.mode: "trusted-proxy" — trusts the user identity header set by
|
|
37
|
+
# the active Traefik auth middleware (basicAuth, Authelia, Authentik, etc.).
|
|
38
|
+
# The correct header is auto-detected from the Traefik file provider.
|
|
39
|
+
# dangerouslyDisableDeviceAuth: true — completely disables device identity checks
|
|
40
|
+
# for the Control UI. Required for homelab LAN installs.
|
|
41
|
+
# trustedProxies — required when running behind Traefik reverse proxy.
|
|
42
|
+
# Without this, OpenClaw treats all connections as untrusted/remote.
|
|
43
|
+
f_print_substep "Writing OpenClaw gateway configuration..."
|
|
44
|
+
local _oc_docker_subnet="172.16.0.0/12"
|
|
45
|
+
|
|
46
|
+
# Detect active auth chain → set correct userHeader
|
|
47
|
+
# Each auth middleware sets a different header for the authenticated username:
|
|
48
|
+
# basicAuth/OAuth → X-Forwarded-User
|
|
49
|
+
# Authelia/TinyAuth → Remote-User
|
|
50
|
+
# Authentik → X-authentik-username
|
|
51
|
+
local _oc_user_header="x-forwarded-user" # safe default
|
|
52
|
+
# $CHAIN_NAME is a global set during the install flow's auth selection
|
|
53
|
+
local _oc_detected_chain="${CHAIN_NAME:-}"
|
|
54
|
+
# Fallback: read from Traefik file provider if CHAIN_NAME not set (e.g. reinstall)
|
|
55
|
+
if [[ -z "$_oc_detected_chain" ]]; then
|
|
56
|
+
local _oc_file_provider="$DOCKER_FOLDER/appdata/traefik3/rules/$HOSTNAME/app-openclaw.yml"
|
|
57
|
+
if [[ -f "$_oc_file_provider" ]]; then
|
|
58
|
+
_oc_detected_chain=$(grep -o 'chain-[a-z-]*' "$_oc_file_provider" 2>/dev/null | head -1)
|
|
59
|
+
fi
|
|
60
|
+
fi
|
|
61
|
+
case "$_oc_detected_chain" in
|
|
62
|
+
chain-authelia|chain-tinyauth)
|
|
63
|
+
_oc_user_header="remote-user"
|
|
64
|
+
;;
|
|
65
|
+
chain-authentik)
|
|
66
|
+
_oc_user_header="x-authentik-username"
|
|
67
|
+
;;
|
|
68
|
+
esac
|
|
69
|
+
f_print_substep "Auth: ${_oc_detected_chain:-no chain} → userHeader: $_oc_user_header"
|
|
70
|
+
|
|
71
|
+
if sudo docker ps --format '{{.Names}}' 2>/dev/null | grep -q '^9router$'; then
|
|
72
|
+
f_print_substep "9Router detected — auto-configuring provider endpoint..."
|
|
73
|
+
|
|
74
|
+
# Query 9Router for its actual available models (from the shim)
|
|
75
|
+
local _oc_9r_models_json
|
|
76
|
+
_oc_9r_models_json=$(sudo docker exec "$_oc_container" \
|
|
77
|
+
wget -qO- http://9router:20128/v1/models 2>/dev/null)
|
|
78
|
+
|
|
79
|
+
# Build OpenClaw-format models array from 9Router's /v1/models response
|
|
80
|
+
local _oc_9r_models_array="[]"
|
|
81
|
+
local _oc_9r_primary=""
|
|
82
|
+
if [[ -n "$_oc_9r_models_json" ]]; then
|
|
83
|
+
_oc_9r_models_array=$(echo "$_oc_9r_models_json" | jq '[.data[] | {id: .id, name: (.root // .id)}]' 2>/dev/null)
|
|
84
|
+
_oc_9r_primary=$(echo "$_oc_9r_models_json" | jq -r '.data[0].id // empty' 2>/dev/null)
|
|
85
|
+
fi
|
|
86
|
+
|
|
87
|
+
# Fallback if query failed or returned no models
|
|
88
|
+
if [[ -z "$_oc_9r_primary" ]]; then
|
|
89
|
+
f_print_warning "Could not query 9Router models — using placeholder"
|
|
90
|
+
_oc_9r_models_array='[{"id": "placeholder", "name": "Configure models in 9Router dashboard"}]'
|
|
91
|
+
_oc_9r_primary="placeholder"
|
|
92
|
+
else
|
|
93
|
+
f_print_substep "Found $(echo "$_oc_9r_models_array" | jq 'length') model(s) from 9Router"
|
|
94
|
+
fi
|
|
95
|
+
|
|
96
|
+
# Write config to temp file first (NEVER use sudo tee — it injects password)
|
|
97
|
+
local _oc_tmp_cfg="/tmp/openclaw_cfg_$$.json"
|
|
98
|
+
cat > "$_oc_tmp_cfg" <<OCCONFIG
|
|
99
|
+
{
|
|
100
|
+
"gateway": {
|
|
101
|
+
"bind": "lan",
|
|
102
|
+
"auth": {
|
|
103
|
+
"mode": "trusted-proxy",
|
|
104
|
+
"trustedProxy": {
|
|
105
|
+
"userHeader": "$_oc_user_header"
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
"trustedProxies": ["$_oc_docker_subnet"],
|
|
109
|
+
"controlUi": {
|
|
110
|
+
"allowInsecureAuth": true,
|
|
111
|
+
"dangerouslyDisableDeviceAuth": true
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
"agents": {
|
|
115
|
+
"defaults": {
|
|
116
|
+
"model": {
|
|
117
|
+
"primary": "9router/$_oc_9r_primary"
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
"models": {
|
|
122
|
+
"providers": {
|
|
123
|
+
"9router": {
|
|
124
|
+
"baseUrl": "http://9router:20128/v1",
|
|
125
|
+
"apiKey": "sk_9router",
|
|
126
|
+
"api": "openai-completions",
|
|
127
|
+
"models": $_oc_9r_models_array
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
OCCONFIG
|
|
133
|
+
sudo cp "$_oc_tmp_cfg" "$_oc_config_dir/openclaw.json"
|
|
134
|
+
rm -f "$_oc_tmp_cfg"
|
|
135
|
+
f_print_success "Configured to use 9Router (model: 9router/$_oc_9r_primary)"
|
|
136
|
+
else
|
|
137
|
+
# No 9Router — write gateway-only config
|
|
138
|
+
local _oc_tmp_cfg="/tmp/openclaw_cfg_$$.json"
|
|
139
|
+
cat > "$_oc_tmp_cfg" <<OCCONFIG
|
|
140
|
+
{
|
|
141
|
+
"gateway": {
|
|
142
|
+
"bind": "lan",
|
|
143
|
+
"auth": {
|
|
144
|
+
"mode": "trusted-proxy",
|
|
145
|
+
"trustedProxy": {
|
|
146
|
+
"userHeader": "$_oc_user_header"
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
"trustedProxies": ["$_oc_docker_subnet"],
|
|
150
|
+
"controlUi": {
|
|
151
|
+
"allowInsecureAuth": true,
|
|
152
|
+
"dangerouslyDisableDeviceAuth": true
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
OCCONFIG
|
|
157
|
+
sudo cp "$_oc_tmp_cfg" "$_oc_config_dir/openclaw.json"
|
|
158
|
+
rm -f "$_oc_tmp_cfg"
|
|
159
|
+
f_print_substep "9Router not found — configure API providers manually after install"
|
|
160
|
+
fi
|
|
161
|
+
sudo chown 1000:1000 "$_oc_config_dir/openclaw.json"
|
|
162
|
+
f_print_substep "Gateway config written (dangerouslyDisableDeviceAuth + trustedProxies)"
|
|
163
|
+
|
|
164
|
+
# Step 2b: Ollama Heartbeat Configuration (optional)
|
|
165
|
+
# If user chose to route heartbeats to Ollama, pull the model and merge config.
|
|
166
|
+
# This runs BEFORE the container restart so all config changes are picked up at once.
|
|
167
|
+
if [[ "${OPENCLAW_OLLAMA_HEARTBEAT:-no}" == "yes" ]]; then
|
|
168
|
+
f_print_substep "Configuring Ollama heartbeat..."
|
|
169
|
+
|
|
170
|
+
# Verify Ollama container is running
|
|
171
|
+
if sudo docker ps --format '{{.Names}}' 2>/dev/null | grep -q '^ollama$'; then
|
|
172
|
+
# Pull the heartbeat model into Ollama
|
|
173
|
+
f_print_substep "Pulling llama3.2:3b model into Ollama (this may take a minute)..."
|
|
174
|
+
if sudo docker exec ollama ollama pull llama3.2:3b 2>&1; then
|
|
175
|
+
f_print_success "Model llama3.2:3b pulled successfully"
|
|
176
|
+
else
|
|
177
|
+
f_print_warning "Failed to pull model — heartbeat will still try at runtime"
|
|
178
|
+
fi
|
|
179
|
+
|
|
180
|
+
# Merge heartbeat config + Ollama provider into openclaw.json using jq
|
|
181
|
+
# IMPORTANT: heartbeat must go under agents.defaults.heartbeat (NOT top-level)
|
|
182
|
+
# OpenClaw rejects top-level "heartbeat" key and crash-loops with "Config invalid"
|
|
183
|
+
f_print_substep "Adding heartbeat and Ollama provider to openclaw.json..."
|
|
184
|
+
local _oc_tmp_config="/tmp/openclaw_config_merge_$$.json"
|
|
185
|
+
if sudo jq '. * {
|
|
186
|
+
"agents": (.agents // {}) * {
|
|
187
|
+
"defaults": ((.agents // {}).defaults // {}) * {
|
|
188
|
+
"heartbeat": {
|
|
189
|
+
"every": "1h",
|
|
190
|
+
"model": "ollama/llama3.2:3b",
|
|
191
|
+
"session": "main",
|
|
192
|
+
"target": "slack",
|
|
193
|
+
"prompt": "Check: Any blockers, opportunities, or progress updates needed?"
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
"models": (.models // {}) * {
|
|
198
|
+
"providers": ((.models // {}).providers // {}) * {
|
|
199
|
+
"ollama": ((.models // {}).providers // {}).ollama // {} | . * {
|
|
200
|
+
"baseUrl": "http://ollama:11434",
|
|
201
|
+
"api": "openai-completions",
|
|
202
|
+
"models": [
|
|
203
|
+
{
|
|
204
|
+
"id": "llama3.2:3b",
|
|
205
|
+
"name": "Llama 3.2 3B (heartbeat)"
|
|
206
|
+
}
|
|
207
|
+
]
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}' "$_oc_config_dir/openclaw.json" > "$_oc_tmp_config" 2>/dev/null; then
|
|
212
|
+
sudo mv "$_oc_tmp_config" "$_oc_config_dir/openclaw.json"
|
|
213
|
+
sudo chown 1000:1000 "$_oc_config_dir/openclaw.json"
|
|
214
|
+
f_print_success "Heartbeat configured to use Ollama (free local LLM)"
|
|
215
|
+
f_print_substep "Heartbeats will use ollama/llama3.2:3b instead of paid API"
|
|
216
|
+
else
|
|
217
|
+
f_print_warning "Failed to merge heartbeat config — configure manually in openclaw.json"
|
|
218
|
+
sudo rm -f "$_oc_tmp_config"
|
|
219
|
+
fi
|
|
220
|
+
else
|
|
221
|
+
f_print_warning "Ollama container not found — skipping heartbeat configuration"
|
|
222
|
+
f_print_substep "Install Ollama first, then reconfigure heartbeat manually"
|
|
223
|
+
fi
|
|
224
|
+
fi
|
|
225
|
+
|
|
226
|
+
# Step 2c: Configure allowedOrigins for gateway Control UI
|
|
227
|
+
# Without correct allowedOrigins, the browser cannot connect to the gateway WebSocket.
|
|
228
|
+
# We construct the origins list from Deployrr environment variables that are available
|
|
229
|
+
# at this point (DOMAINNAME_1, SERVER_LAN_IP, port).
|
|
230
|
+
f_print_substep "Configuring gateway allowedOrigins..."
|
|
231
|
+
|
|
232
|
+
# Try to read existing subdomain from Traefik file provider (reinstall case)
|
|
233
|
+
local _oc_subdomain
|
|
234
|
+
_oc_subdomain=$(f_get_app_subdomain "openclaw" 2>/dev/null)
|
|
235
|
+
# Default: sname with hyphens removed (matches Deployrr's default subdomain pattern)
|
|
236
|
+
[[ -z "$_oc_subdomain" ]] && _oc_subdomain="openclaw"
|
|
237
|
+
|
|
238
|
+
# Build origins array — always include localhost entries
|
|
239
|
+
local _oc_origins
|
|
240
|
+
_oc_origins='["http://localhost:'"$_oc_port"'","http://127.0.0.1:'"$_oc_port"'"]'
|
|
241
|
+
|
|
242
|
+
# Add LAN IP entry if available
|
|
243
|
+
if [[ -n "$SERVER_LAN_IP" ]]; then
|
|
244
|
+
_oc_origins=$(echo "$_oc_origins" | jq '. + ["http://'"${SERVER_LAN_IP}:${_oc_port}"'"]')
|
|
245
|
+
fi
|
|
246
|
+
|
|
247
|
+
# Add Traefik/HTTPS entry if a domain is configured
|
|
248
|
+
if [[ -n "$DOMAINNAME_1" ]]; then
|
|
249
|
+
_oc_origins=$(echo "$_oc_origins" | jq '. + ["https://'"${_oc_subdomain}.${DOMAINNAME_1}"'"]')
|
|
250
|
+
f_print_substep "Added Traefik origin: https://${_oc_subdomain}.${DOMAINNAME_1}"
|
|
251
|
+
fi
|
|
252
|
+
|
|
253
|
+
# Merge allowedOrigins into openclaw.json
|
|
254
|
+
local _oc_tmp_origins="/tmp/openclaw_origins_$$.json"
|
|
255
|
+
if sudo jq --argjson origins "$_oc_origins" \
|
|
256
|
+
'.gateway.controlUi.allowedOrigins = $origins' \
|
|
257
|
+
"$_oc_config_dir/openclaw.json" > "$_oc_tmp_origins" 2>/dev/null; then
|
|
258
|
+
sudo mv "$_oc_tmp_origins" "$_oc_config_dir/openclaw.json"
|
|
259
|
+
sudo chown 1000:1000 "$_oc_config_dir/openclaw.json"
|
|
260
|
+
f_print_success "Gateway allowedOrigins configured"
|
|
261
|
+
else
|
|
262
|
+
f_print_warning "Failed to set allowedOrigins — you may need to configure manually"
|
|
263
|
+
sudo rm -f "$_oc_tmp_origins"
|
|
264
|
+
fi
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
# Step 3: Restart container to apply the new openclaw.json
|
|
269
|
+
# The container must restart to pick up the config changes we just wrote.
|
|
270
|
+
f_print_substep "Restarting container to apply configuration..."
|
|
271
|
+
sudo docker restart "$_oc_container" > /dev/null 2>&1
|
|
272
|
+
sleep 3
|
|
273
|
+
|
|
274
|
+
# Step 4: Wait for gateway to become healthy again after restart
|
|
275
|
+
f_print_substep "Waiting for gateway to come back up..."
|
|
276
|
+
_oc_gateway_ready=false
|
|
277
|
+
for _oc_i in $(seq 1 15); do
|
|
278
|
+
if sudo docker exec "$_oc_container" \
|
|
279
|
+
node openclaw.mjs gateway health 2>/dev/null | grep -qi "healthy"; then
|
|
280
|
+
_oc_gateway_ready=true
|
|
281
|
+
f_print_substep "Gateway is ready"
|
|
282
|
+
break
|
|
283
|
+
fi
|
|
284
|
+
sleep 2
|
|
285
|
+
done
|
|
286
|
+
|
|
287
|
+
if [[ "$_oc_gateway_ready" != true ]]; then
|
|
288
|
+
f_print_warning "Gateway health check timed out after restart — continuing anyway"
|
|
289
|
+
fi
|
|
290
|
+
|
|
291
|
+
# Step 5: Show the gateway URL
|
|
292
|
+
# Trusted-proxy auth mode — Traefik's basicAuth sets X-Forwarded-User header
|
|
293
|
+
# (requires headerField in middlewares-basic-auth.yml). No tokens needed.
|
|
294
|
+
if [[ -n "$DOMAINNAME_1" ]]; then
|
|
295
|
+
whiptail --title "OpenClaw — Setup Complete" --msgbox \
|
|
296
|
+
"The OpenClaw gateway is running!
|
|
297
|
+
|
|
298
|
+
Open the Control UI:
|
|
299
|
+
|
|
300
|
+
https://${_oc_subdomain:-openclaw}.${DOMAINNAME_1}
|
|
301
|
+
|
|
302
|
+
No token or device pairing needed — just open the URL.
|
|
303
|
+
Traefik handles authentication automatically." 14 72
|
|
304
|
+
else
|
|
305
|
+
local _oc_display_token
|
|
306
|
+
_oc_display_token=$(sudo cat "$_oc_secret_file" 2>/dev/null)
|
|
307
|
+
whiptail --title "OpenClaw — Setup Complete" --msgbox \
|
|
308
|
+
"The OpenClaw gateway is running!
|
|
309
|
+
|
|
310
|
+
Open the Control UI:
|
|
311
|
+
|
|
312
|
+
http://${SERVER_LAN_IP}:${_oc_port}
|
|
313
|
+
|
|
314
|
+
You will need your gateway token for LAN access:
|
|
315
|
+
${_oc_display_token:-TOKEN}" 14 72
|
|
316
|
+
fi
|