diff --git a/.env.example b/.env.example index 58f1543..589eb2d 100644 --- a/.env.example +++ b/.env.example @@ -22,6 +22,8 @@ DEFAULT_USER=admin DEFAULT_PASSWORD=changeme DEFAULT_EMAIL=admin@example.com +# ADMIN_SSH_PUB_KEY= + # FOLDER PATHS USERDIR=/opt/stacks # all docker-compose stacks MEDIADIR=/mnt/media # Large media files on separate drive diff --git a/docker-compose/dockge/docker-compose.yml b/docker-compose/dockge/docker-compose.yml index 4ecf120..0c4da81 100644 --- a/docker-compose/dockge/docker-compose.yml +++ b/docker-compose/dockge/docker-compose.yml @@ -22,7 +22,6 @@ services: restart: unless-stopped networks: - homelab-network - - traefik-network ports: - '5001:5001' # Optional: direct access volumes: @@ -34,24 +33,9 @@ services: - DOCKGE_STACKS_DIR=/opt/stacks - DOCKGE_ENABLE_CONSOLE=true labels: - # TRAEFIK CONFIGURATION - # ========================================== - # Service metadata - 'homelab.category=infrastructure' - - 'homelab.description=Docker Compose stack manager (PRIMARY)' - # 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.enable=true' - - 'traefik.docker.network=traefik-network' - - 'traefik.http.routers.dockge.rule=Host(`dockge.${DOMAIN}`)' - - 'traefik.http.routers.dockge.entrypoints=websecure' - - 'traefik.http.routers.dockge.tls.certresolver=letsencrypt' - - 'traefik.http.routers.dockge.middlewares=authelia@docker' - - 'traefik.http.services.dockge.loadbalancer.server.port=5001' + - 'homelab.description=Docker Compose stack manager' networks: homelab-network: - external: true - traefik-network: external: true \ No newline at end of file diff --git a/docker-compose/infrastructure/docker-compose.yml b/docker-compose/infrastructure/docker-compose.yml index 212420e..1ba6bb4 100644 --- a/docker-compose/infrastructure/docker-compose.yml +++ b/docker-compose/infrastructure/docker-compose.yml @@ -125,7 +125,6 @@ services: restart: no networks: - homelab-network - - traefik-network ports: - '8085:8080' volumes: @@ -141,24 +140,9 @@ services: retries: 3 start_period: 30s labels: - # TRAEFIK CONFIGURATION - # Service metadata - 'com.centurylinklabs.watchtower.enable=true' - 'homelab.category=infrastructure' - 'homelab.description=Real-time Docker log viewer' - - 'traefik.enable=true' - - 'traefik.docker.network=traefik-network' - # Router configuration - - 'traefik.http.routers.dozzle.rule=Host(`dozzle.jasper.${DOMAIN}`)' - - 'traefik.http.routers.dozzle.entrypoints=websecure' - - 'traefik.http.routers.dozzle.tls=true' - - 'traefik.http.routers.dozzle.middlewares=authelia@docker' - # Service configuration - - 'traefik.http.services.dozzle.loadbalancer.server.port=8080' - # Sablier configuration - - 'sablier.enable=true' - - 'sablier.group=jasper-dozzle' - - 'sablier.start-on-demand=true' # Glances - System monitoring # Uses Sablier lazy loading - starts on-demand, stops after 30min inactivity @@ -177,7 +161,6 @@ services: restart: no networks: - homelab-network - - traefik-network ports: - '61208:61208' pid: host @@ -193,24 +176,9 @@ services: retries: 3 start_period: 30s labels: - # TRAEFIK CONFIGURATION - # Service metadata - 'com.centurylinklabs.watchtower.enable=true' - 'homelab.category=infrastructure' - 'homelab.description=System and Docker monitoring' - - 'traefik.enable=true' - - 'traefik.docker.network=traefik-network' - # Router configuration - - 'traefik.http.routers.glances.rule=Host(`glances.jasper.${DOMAIN}`)' - - 'traefik.http.routers.glances.entrypoints=websecure' - - 'traefik.http.routers.glances.tls=true' - - 'traefik.http.routers.glances.middlewares=authelia@docker' - # Service configuration - - 'traefik.http.services.glances.loadbalancer.server.port=61208' - # Sablier configuration - - 'sablier.enable=true' - - 'sablier.group=jasper-glances' - - 'sablier.start-on-demand=true' # Code Server - VS Code in browser # Uses Sablier lazy loading - starts on-demand, stops after 30min inactivity @@ -229,7 +197,6 @@ services: restart: no networks: - homelab-network - - traefik-network ports: - '8079:8443' volumes: @@ -249,24 +216,9 @@ services: retries: 3 start_period: 60s labels: - # TRAEFIK CONFIGURATION - # Service metadata - 'com.centurylinklabs.watchtower.enable=true' - 'homelab.category=infrastructure' - 'homelab.description=VS Code in browser' - - 'traefik.enable=true' - - 'traefik.docker.network=traefik-network' - # Router configuration - - 'traefik.http.routers.code-server.rule=Host(`code.${DOMAIN}`)' - - 'traefik.http.routers.code-server.entrypoints=websecure' - - 'traefik.http.routers.code-server.tls.certresolver=letsencrypt' - - 'traefik.http.routers.code-server.middlewares=authelia@docker' - # Service configuration - - 'traefik.http.services.code-server.loadbalancer.server.port=8443' - # Sablier configuration - - 'sablier.enable=true' - - 'sablier.group=jasper-code-server' - - 'sablier.start-on-demand=true' x-dockge: urls: @@ -284,5 +236,3 @@ x-dockge: networks: homelab-network: external: true - traefik-network: - external: true diff --git a/scripts/common.sh b/scripts/common.sh index f684589..9f33bda 100644 --- a/scripts/common.sh +++ b/scripts/common.sh @@ -232,46 +232,6 @@ detect_server_role() { fi } -# Generate Traefik provider configuration for a remote Docker host -generate_traefik_provider_config() { - local server_ip="$1" - local server_hostname="$2" - local output_file="$3" - - debug_log "Generating Traefik provider config for $server_hostname ($server_ip)" - - if [ -z "$server_ip" ] || [ -z "$server_hostname" ] || [ -z "$output_file" ]; then - log_error "generate_traefik_provider_config requires server_ip, server_hostname, and output_file" - return 1 - fi - - # Get domain from environment or use a default - local domain="${DOMAIN:-${DUCKDNS_DOMAIN}}" - - cat > "$output_file" </dev/null && log_success "Created traefik-network" || log_info "traefik-network already exists" + # Step 2: Create required Docker networks + log_info "Step 2: Creating required Docker networks..." docker network create homelab-network 2>/dev/null && log_success "Created homelab-network" || log_info "homelab-network already exists" echo "" - # Step 4: Install envsubst if not present + # Step 3: Install envsubst if not present if ! command -v envsubst &> /dev/null; then log_info "Installing envsubst (gettext-base)..." sudo apt-get update -qq && sudo apt-get install -y gettext-base >/dev/null 2>&1 log_success "envsubst installed" fi - # Step 5: Copy all stacks to remote server - log_info "Step 5: Copying all stacks to remote server..." + # Step 4: Copy all stacks to remote server + log_info "Step 4: Copying all stacks to remote server..." copy_all_stacks_for_remote echo "" - # Step 5.5: Configure remote services with server-specific subdomains - log_info "Step 5.5: Configuring server-specific routing..." - configure_remote_server_routing - echo "" - - # Step 6: Deploy Dockge - log_info "Step 6: Deploying Dockge..." + # Step 5: Deploy Dockge + log_info "Step 5: Deploying Dockge..." deploy_dockge echo "" - # Step 7: Deploy Traefik (local instance for container discovery) - log_info "Step 7: Deploying local Traefik..." - deploy_traefik_stack - echo "" - - # Step 8: Deploy Sablier stack for local lazy loading - log_info "Step 8: Deploying Sablier stack..." + # Step 6: Deploy Sablier stack for local lazy loading + log_info "Step 6: Deploying Sablier stack..." deploy_sablier_stack echo "" - # Step 9: Deploy Infrastructure stack - log_info "Step 9: Deploying Infrastructure stack..." + # Step 7: Deploy Infrastructure stack + log_info "Step 7: Deploying Infrastructure stack..." deploy_infrastructure echo "" - # Step 10: Register this remote server with core Traefik - log_info "Step 10: Registering with core Traefik..." + # Step 8: Register this remote server with core Traefik + log_info "Step 8: Registering with core Traefik..." register_remote_server_with_core echo "" log_success "Remote server deployment complete!" echo "" echo "This server is now configured to:" - echo " - Accept Docker API connections via TLS (port 2376)" - echo " - Run local Traefik for container discovery" + echo " - Run Dockge for local stack management" echo " - Run Sablier for local container lazy loading" - echo " - Run infrastructure services" - echo " - Have its containers discovered by core Traefik" + echo " - Run infrastructure services with exposed ports" + echo " - Be accessible via core Traefik routes" echo "" - echo "Services deployed on this server will automatically:" - echo " - Be discovered by Traefik on the core server" - echo " - Get SSL certificates via core Traefik" - echo " - Be accessible at: https://servicename.${DOMAIN}" + echo "Services deployed on this server are accessible at:" + echo " - Via core Traefik: https://servicename.${SERVER_HOSTNAME}.${DOMAIN}" + echo " - Via direct IP: http://${SERVER_IP}:PORT" echo "" echo "Additional stacks available in /opt/stacks/ (not started):" echo " - dashboards, media, media-management, monitoring, productivity" @@ -1968,7 +1946,7 @@ copy_all_stacks_for_remote() { sudo chown -R "$ACTUAL_USER:$ACTUAL_USER" /opt/stacks sudo chown -R "$ACTUAL_USER:$ACTUAL_USER" /opt/dockge - # List of stacks to copy (all except core and dockge - dockge is handled separately) + # List of stacks to copy (all except core, dockge, and traefik) local stacks=( "alternatives" "dashboards" @@ -1979,7 +1957,6 @@ copy_all_stacks_for_remote() { "monitoring" "productivity" "sablier" - "traefik" "transcoders" "utilities" "vpn"