diff --git a/docker-compose/dashboards/docker-compose.yml b/docker-compose/dashboards/docker-compose.yml index 57ef23e..450330e 100644 --- a/docker-compose/dashboards/docker-compose.yml +++ b/docker-compose/dashboards/docker-compose.yml @@ -26,7 +26,7 @@ services: - homelab-network - traefik-network ports: - - "3000:3000" + - "3003:3000" volumes: - ./homepage:/app/config - /var/run/docker.sock:/var/run/docker.sock # For Docker integration do not mount RO @@ -50,7 +50,7 @@ services: - "traefik.http.routers.homepage.entrypoints=websecure" - "traefik.http.routers.homepage.tls=true" - "traefik.http.routers.homepage.middlewares=authelia@docker" - - "traefik.http.services.homepage.loadbalancer.server.port=3000" + - "traefik.http.services.homepage.loadbalancer.server.port=3003" # Sablier lazy loading (disabled by default - uncomment to enable) # - "sablier.enable=true" # - "sablier.group=${SERVER_HOSTNAME}-homarr" diff --git a/docker-compose/homeassistant/docker-compose.yml b/docker-compose/homeassistant/docker-compose.yml index 81892e0..c0a54b9 100644 --- a/docker-compose/homeassistant/docker-compose.yml +++ b/docker-compose/homeassistant/docker-compose.yml @@ -92,7 +92,7 @@ services: - homelab-network - traefik-network ports: - - "80:80" + - "8084:80" volumes: - /opt/stacks/tasmoadmin/data:/data environment: @@ -111,7 +111,7 @@ services: - "traefik.http.routers.tasmoadmin.entrypoints=websecure" - "traefik.http.routers.tasmoadmin.tls.certresolver=letsencrypt" - "traefik.http.routers.tasmoadmin.middlewares=authelia@docker" - - "traefik.http.services.tasmoadmin.loadbalancer.server.port=80" + - "traefik.http.services.tasmoadmin.loadbalancer.server.port=8084" # MotionEye - Video surveillance # Access at: https://motioneye.${DOMAIN} diff --git a/docker-compose/infrastructure/docker-compose.yml b/docker-compose/infrastructure/docker-compose.yml index 5b12f43..2c6222f 100644 --- a/docker-compose/infrastructure/docker-compose.yml +++ b/docker-compose/infrastructure/docker-compose.yml @@ -233,7 +233,7 @@ services: - homelab-network - traefik-network ports: - - "8443:8443" + - "8079:8443" volumes: - ./code-server/config:/config - /opt/stacks:/opt/stacks # Access to all stacks diff --git a/docker-compose/media-management/docker-compose.yml b/docker-compose/media-management/docker-compose.yml index 5c724d4..62dda42 100644 --- a/docker-compose/media-management/docker-compose.yml +++ b/docker-compose/media-management/docker-compose.yml @@ -27,7 +27,6 @@ services: container_name: sonarr restart: no networks: - - homelab-network - homelab-network - traefik-network ports: @@ -66,7 +65,6 @@ services: container_name: radarr restart: no networks: - - homelab-network - homelab-network - traefik-network ports: @@ -105,7 +103,6 @@ services: container_name: prowlarr restart: no networks: - - homelab-network - homelab-network - traefik-network ports: @@ -142,7 +139,6 @@ services: container_name: readarr restart: no networks: - - homelab-network - homelab-network - traefik-network ports: @@ -181,7 +177,6 @@ services: container_name: lidarr restart: no networks: - - homelab-network - homelab-network - traefik-network ports: @@ -220,7 +215,6 @@ services: container_name: lazylibrarian restart: no networks: - - homelab-network - homelab-network - traefik-network ports: @@ -260,7 +254,6 @@ services: container_name: mylar3 restart: no networks: - - homelab-network - homelab-network - traefik-network ports: @@ -299,7 +292,6 @@ services: container_name: jellyseerr restart: no networks: - - homelab-network - homelab-network - traefik-network ports: @@ -349,7 +341,6 @@ services: container_name: tdarr-server restart: no networks: - - homelab-network - homelab-network - traefik-network ports: @@ -419,11 +410,10 @@ services: container_name: unmanic restart: no networks: - - homelab-network - homelab-network - traefik-network ports: - - "8888:8888" + - "8889:8888" volumes: - ./unmanic/config:/config - /mnt/media:/library @@ -447,10 +437,11 @@ services: - "traefik.http.routers.unmanic.entrypoints=websecure" - "traefik.http.routers.unmanic.tls.certresolver=letsencrypt" - "traefik.http.routers.unmanic.middlewares=authelia@docker" - - "traefik.http.services.unmanic.loadbalancer.server.port=8888" + - "traefik.http.services.unmanic.loadbalancer.server.port=8889" - "sablier.enable=true" - "sablier.group=${SERVER_HOSTNAME}-arr" - "sablier.start-on-demand=true" + x-dockge: urls: - https://sonarr.${DOMAIN} @@ -473,6 +464,7 @@ x-dockge: - http://localhost:8265 - https://unmanic.${DOMAIN} - http://localhost:8888 + networks: homelab-network: external: true diff --git a/docker-compose/media/docker-compose.yml b/docker-compose/media/docker-compose.yml index e8f6081..dcc46d7 100644 --- a/docker-compose/media/docker-compose.yml +++ b/docker-compose/media/docker-compose.yml @@ -33,7 +33,6 @@ services: container_name: jellyfin restart: no networks: - - homelab-network - homelab-network - traefik-network ports: @@ -91,7 +90,6 @@ services: container_name: calibre-web restart: unless-stopped networks: - - homelab-network - homelab-network - traefik-network ports: diff --git a/docker-compose/monitoring/docker-compose.yml b/docker-compose/monitoring/docker-compose.yml index 88dd814..04a9df3 100644 --- a/docker-compose/monitoring/docker-compose.yml +++ b/docker-compose/monitoring/docker-compose.yml @@ -34,7 +34,6 @@ services: container_name: prometheus restart: unless-stopped networks: - - homelab-network - homelab-network - traefik-network ports: @@ -83,7 +82,6 @@ services: container_name: grafana restart: unless-stopped networks: - - homelab-network - homelab-network - traefik-network ports: @@ -146,7 +144,6 @@ services: container_name: cadvisor restart: unless-stopped networks: - - homelab-network - homelab-network - traefik-network ports: @@ -193,7 +190,6 @@ services: container_name: uptime-kuma restart: unless-stopped networks: - - homelab-network - homelab-network - traefik-network ports: @@ -234,7 +230,6 @@ services: container_name: loki restart: unless-stopped networks: - - homelab-network - homelab-network - traefik-network ports: diff --git a/docker-compose/utilities/docker-compose.yml b/docker-compose/utilities/docker-compose.yml index 0449455..2d13ac6 100644 --- a/docker-compose/utilities/docker-compose.yml +++ b/docker-compose/utilities/docker-compose.yml @@ -59,14 +59,12 @@ services: - "sablier.enable=true" - "sablier.group=${SERVER_HOSTNAME}-backrest" - "sablier.start-on-demand=true" - - "x-dockge.url=https://backrest.${DOMAIN}" - - "x-dockge.url=https://backrest.${DOMAIN}" # Duplicati - Backup solution # Access at: https://duplicati.${DOMAIN} duplicati: image: lscr.io/linuxserver/duplicati:2.0.7 container_name: duplicati - restart: unless-stopped + restart: no networks: - homelab-network - traefik-network @@ -95,18 +93,22 @@ services: - "traefik.http.routers.duplicati.middlewares=authelia@docker" # Service configuration - "traefik.http.services.duplicati.loadbalancer.server.port=8200" + # Sablier configuration + - "sablier.enable=true" + - "sablier.group=${SERVER_HOSTNAME}-duplicati" + - "sablier.start-on-demand=true" # Form.io - Form builder # Uncomment and configure if formio/formio image becomes available formio: image: calipseo/formio:latest container_name: formio - restart: unless-stopped + restart: no networks: - homelab-network - traefik-network - - homelab-network + ports: - - "3001:3001" + - "3002:3001" environment: - MONGO=mongodb://formio-mongo:27017/formio - JWT_SECRET=${FORMIO_JWT_SECRET} @@ -117,18 +119,22 @@ services: # TRAEFIK CONFIGURATION # ========================================== # Service metadata + - "com.centurylinklabs.watchtower.enable=true" - "homelab.category=utilities" - "homelab.description=Form builder platform" - # Traefik reverse proxy (comment/uncomment to disable/enable) - # If Traefik is on a remote server: these labels are NOT USED; - # configure external yml files in /traefik/dynamic folder instead. + # Traefik labels - "traefik.enable=true" + # Router configuration - "traefik.http.routers.formio.rule=Host(`forms.${DOMAIN}`)" - "traefik.http.routers.formio.entrypoints=websecure" - "traefik.http.routers.formio.tls.certresolver=letsencrypt" - "traefik.http.routers.formio.middlewares=authelia@docker" + # Service configuration - "traefik.http.services.formio.loadbalancer.server.port=3001" - + # Sablier configuration + - "sablier.enable=true" + - "sablier.group=${SERVER_HOSTNAME}-formio" + - "sablier.start-on-demand=true" formio-mongo: image: mongo:4.4 container_name: formio-mongo @@ -145,7 +151,7 @@ services: vaultwarden: image: vaultwarden/server:1.30.1 container_name: vaultwarden - restart: unless-stopped + restart: no networks: - homelab-network - traefik-network @@ -182,6 +188,10 @@ services: # SSO disabled for browser extension and mobile app compatibility # - "traefik.http.routers.vaultwarden.middlewares=authelia@docker" - "traefik.http.services.vaultwarden.loadbalancer.server.port=80" + # Sablier configuration + - "sablier.enable=true" + - "sablier.group=${SERVER_HOSTNAME}-vaultwarden" + - "sablier.start-on-demand=true" # Authelia Redis - Session storage for Authelia # No web UI - backend service # authelia-redis: diff --git a/docs/ports-in-use.md b/docs/ports-in-use.md index 9d149af..62014da 100644 --- a/docs/ports-in-use.md +++ b/docs/ports-in-use.md @@ -1,45 +1,55 @@ # Ports in Use -This document tracks all ports used by services in the AI-Homelab. Update this document whenever services are added or ports are changed. +This document tracks all ports used by services in the EZ-Homelab. Update this document whenever services are added or ports are changed. -## Core Stack ([core.yml](../docker-compose/core.yml)) - -| Service | Port | Protocol | Purpose | Internal Port | -|---------|------|----------|---------|---------------| -| [Traefik](../service-docs/traefik.md) | 80 | TCP | HTTP (redirects to HTTPS) | 80 | -| [Traefik](../service-docs/traefik.md) | 443 | TCP | HTTPS | 443 | -| [Traefik](../service-docs/traefik.md) | 8080 | TCP | Dashboard (protected) | 8080 | - -## Infrastructure Stack ([infrastructure.yml](../docker-compose/infrastructure.yml)) - -| Service | Port | Protocol | Purpose | Internal Port | -|---------|------|----------|---------|---------------| -| [Dockge](../service-docs/dockge.md) | 5001 | TCP | Web UI | 5001 | -| [Pi-hole](../service-docs/pihole.md) | 53 | TCP/UDP | DNS | 53 | -| [Docker Proxy](../service-docs/docker-proxy.md) | 127.0.0.1:2375 | TCP | Docker API proxy | 2375 | - -## Home Assistant Stack ([homeassistant.yml](../docker-compose/homeassistant.yml)) - -| Service | Port | Protocol | Purpose | Internal Port | -|---------|------|----------|---------|---------------| -| [MotionEye](../service-docs/motioneye.md) | 8765 | TCP | Web UI | 8765 | -| [Mosquitto](../service-docs/mosquitto.md) | 1883 | TCP | MQTT | 1883 | -| [Mosquitto](../service-docs/mosquitto.md) | 9001 | TCP | MQTT Websockets | 9001 | - -## Monitoring Stack ([monitoring.yml](../docker-compose/monitoring.yml)) - -| Service | Port | Protocol | Purpose | Internal Port | -|---------|------|----------|---------|---------------| -| [Prometheus](../service-docs/prometheus.md) | 9090 | TCP | Web UI/Metrics | 9090 | - -## VPN Stack ([vpn.yml](../docker-compose/vpn.yml)) - -| Service | Port | Protocol | Purpose | Internal Port | -|---------|------|----------|---------|---------------| -| [Gluetun](../service-docs/gluetun.md) | 8888 | TCP | HTTP proxy | 8888 | -| [Gluetun](../service-docs/gluetun.md) | 8388 | TCP/UDP | Shadowsocks | 8388 | -| [Gluetun](../service-docs/gluetun.md) | 8081 | TCP | qBittorrent Web UI | 8080 | -| [Gluetun](../service-docs/gluetun.md) | 6881 | TCP/UDP | qBittorrent | 6881 | +| Stack | Service | External Port | Internal Port | Protocol | Purpose | +|-------|---------|---------------|---------------|----------|---------| +| **Core** | [Traefik](../service-docs/traefik.md) | 80 | 80 | TCP | HTTP (redirects to HTTPS) | +| **Core** | [Traefik](../service-docs/traefik.md) | 443 | 443 | TCP | HTTPS | +| **Core** | [Traefik](../service-docs/traefik.md) | 8080 | 8080 | TCP | Dashboard (protected) | +| **Infrastructure** | [Dockge](../service-docs/dockge.md) | 5001 | 5001 | TCP | Web UI | +| **Infrastructure** | [Pi-hole](../service-docs/pihole.md) | 53 | 53 | TCP/UDP | DNS | +| **Infrastructure** | [Docker Proxy](../service-docs/docker-proxy.md) | 127.0.0.1:2375 | 2375 | TCP | Docker API proxy | +| **Home Assistant** | [ESPHome](../service-docs/esphome.md) | 6052 | 6052 | TCP | Web UI | +| **Home Assistant** | [TasmoAdmin](../service-docs/tasmoadmin.md) | 8084 | 80 | TCP | Web UI | +| **Home Assistant** | [MotionEye](../service-docs/motioneye.md) | 8765 | 8765 | TCP | Web UI | +| **Home Assistant** | [Node-RED](../service-docs/nodered.md) | 1880 | 1880 | TCP | Web UI | +| **Home Assistant** | [Mosquitto](../service-docs/mosquitto.md) | 1883 | 1883 | TCP | MQTT | +| **Home Assistant** | [Mosquitto](../service-docs/mosquitto.md) | 9001 | 9001 | TCP | MQTT Websockets | +| **Media** | [Jellyfin](../service-docs/jellyfin.md) | 8096 | 8096 | TCP | Web UI | +| **Media** | [Calibre-Web](../service-docs/calibre-web.md) | 8083 | 8083 | TCP | Web UI | +| **Media Management** | [Sonarr](../service-docs/sonarr.md) | 8989 | 8989 | TCP | Web UI | +| **Media Management** | [Radarr](../service-docs/radarr.md) | 7878 | 7878 | TCP | Web UI | +| **Media Management** | [Prowlarr](../service-docs/prowlarr.md) | 9696 | 9696 | TCP | Web UI | +| **Media Management** | [Readarr](../service-docs/readarr.md) | 8787 | 8787 | TCP | Web UI | +| **Media Management** | [Lidarr](../service-docs/lidarr.md) | 8686 | 8686 | TCP | Web UI | +| **Media Management** | [Lazylibrarian](../service-docs/lazylibrarian.md) | 5299 | 5299 | TCP | Web UI | +| **Media Management** | [Mylar3](../service-docs/mylar3.md) | 8090 | 8090 | TCP | Web UI | +| **Media Management** | [Jellyseerr](../service-docs/jellyseerr.md) | 5055 | 5055 | TCP | Web UI | +| **Media Management** | [Unmanic](../service-docs/unmanic.md) | 8888 | 8888 | TCP | Web UI | +| **Media Management** | [Tdarr Server](../service-docs/tdarr.md) | 8266 | 8266 | TCP | Web UI | +| **Media Management** | [Tdarr Node](../service-docs/tdarr.md) | 8267 | 8267 | TCP | Worker port | +| **Media Management** | [Flaresolverr](../service-docs/flaresolverr.md) | 8191 | 8191 | TCP | HTTP proxy | +| **Monitoring** | [Prometheus](../service-docs/prometheus.md) | 9090 | 9090 | TCP | Web UI/Metrics | +| **Monitoring** | [Grafana](../service-docs/grafana.md) | 3000 | 3000 | TCP | Web UI | +| **Monitoring** | [cAdvisor](../service-docs/cadvisor.md) | 8082 | 8080 | TCP | Web UI | +| **Monitoring** | [Uptime Kuma](../service-docs/uptime-kuma.md) | 3001 | 3001 | TCP | Web UI | +| **Monitoring** | [Loki](../service-docs/loki.md) | 3100 | 3100 | TCP | Web UI | +| **Monitoring** | [Node Exporter](../service-docs/node-exporter.md) | 9100 | 9100 | TCP | Metrics | +| **Utilities** | [Backrest](../service-docs/backrest.md) | 9898 | 9898 | TCP | Web UI | +| **Utilities** | [Duplicati](../service-docs/duplicati.md) | 8200 | 8200 | TCP | Web UI | +| **Utilities** | [Form.io](../service-docs/formio.md) | 3002 | 3001 | TCP | Web UI | +| **Utilities** | [Vaultwarden](../service-docs/vaultwarden.md) | 80 | 80 | TCP | Internal port | +| **VPN** | [Gluetun](../service-docs/gluetun.md) | 8888 | 8888 | TCP | HTTP proxy | +| **VPN** | [Gluetun](../service-docs/gluetun.md) | 8388 | 8388 | TCP/UDP | Shadowsocks | +| **VPN** | [Gluetun](../service-docs/gluetun.md) | 8081 | 8080 | TCP | qBittorrent Web UI | +| **VPN** | [Gluetun](../service-docs/gluetun.md) | 6881 | 6881 | TCP/UDP | qBittorrent | +| **VPN** | [qBittorrent](../service-docs/qbittorrent.md) | N/A | N/A | N/A | Routed through Gluetun | +| **Productivity** | [DokuWiki](../service-docs/dokuwiki.md) | 80 | 80 | TCP | Internal port | +| **Productivity** | [Nextcloud](../service-docs/nextcloud.md) | 80 | 80 | TCP | Internal port | +| **Productivity** | [Gitea](../service-docs/gitea.md) | 3010 | 3000 | TCP | Web UI | +| **Productivity** | [MinIO](../service-docs/minio.md) | 9000 | 9000 | TCP | API | +| **Productivity** | [MinIO](../service-docs/minio.md) | 9001 | 9001 | TCP | Web UI | ## Port Range Reference @@ -51,12 +61,13 @@ This document tracks all ports used by services in the AI-Homelab. Update this d ## Common Port Conflicts -- **Port 80/443**: Used by Traefik for HTTP/HTTPS +- **Port 80**: Used by Traefik for HTTP (conflicts with internal services only) +- **Port 3000**: Used by Grafana +- **Port 3001**: Used by Uptime Kuma +- **Port 8888**: Used by Gluetun HTTP proxy - **Port 53**: Used by Pi-hole for DNS - **Port 2375**: Used by Docker Proxy (localhost only) - **Port 5001**: Used by Dockge -- **Port 5432**: Used by PostgreSQL -- **Port 6379**: Used by Redis - **Port 8080**: Used by Traefik dashboard - **Port 9090**: Used by Prometheus @@ -88,4 +99,4 @@ This document should be updated whenever: Run this command to find all port mappings in compose files: ```bash grep -r "ports:" docker-compose/ | grep -v "^#" | sort -``` \ No newline at end of file +``` diff --git a/scripts/ez-homelab.sh b/scripts/ez-homelab.sh index b4a1c02..5e18688 100755 --- a/scripts/ez-homelab.sh +++ b/scripts/ez-homelab.sh @@ -470,47 +470,6 @@ perform_deployment() { if [ "$SETUP_STACKS" = true ]; then setup_stacks_for_dockge fi - - # Deploy Dokuwiki (always deployed as it's part of the base setup) - deployed_count=3 # Dockge is always deployed - [ "$DEPLOY_CORE" = true ] && deployed_count=$((deployed_count + 1)) - [ "$DEPLOY_INFRASTRUCTURE" = true ] && deployed_count=$((deployed_count + 1)) - [ "$DEPLOY_DASHBOARDS" = true ] && deployed_count=$((deployed_count + 1)) - step_num=$((deployed_count + 1)) - log_info "Step $step_num: Deploying Dokuwiki wiki platform..." - log_info " - DokuWiki (File-based wiki with pre-configured content)" - echo "" - - # Create Dokuwiki directory - mkdir -p /opt/stacks/dokuwiki/config - - # Copy Dokuwiki compose file - cp "$REPO_DIR/config-templates/dokuwiki/docker-compose.yml" /opt/stacks/dokuwiki/docker-compose.yml - - # Replace domain placeholders in Dokuwiki - sed -i "s/\${DOMAIN}/${DOMAIN}/g" /opt/stacks/dokuwiki/docker-compose.yml - - # Copy pre-configured Dokuwiki config, content, and keys - if [ -d "$REPO_DIR/config-templates/dokuwiki/conf" ]; then - cp -r "$REPO_DIR/config-templates/dokuwiki/conf" /opt/stacks/dokuwiki/config/ - fi - - if [ -d "$REPO_DIR/config-templates/dokuwiki/data" ]; then - cp -r "$REPO_DIR/config-templates/dokuwiki/data" /opt/stacks/dokuwiki/config/ - fi - - if [ -d "$REPO_DIR/config-templates/dokuwiki/keys" ]; then - cp -r "$REPO_DIR/config-templates/dokuwiki/keys" /opt/stacks/dokuwiki/config/ - fi - - # Set proper ownership for Dokuwiki config - sudo chown -R 1000:1000 /opt/stacks/dokuwiki/config - - # Deploy Dokuwiki - cd /opt/stacks/dokuwiki - docker compose up -d - log_success "Dokuwiki deployed with pre-configured content" - echo "" } # Setup stacks for Dockge function