Commit Graph

110 Commits

Author SHA1 Message Date
Kelin
803165a1c8 Remove homelab-network from pihole service 2026-02-09 22:49:47 -05:00
Kelin
377ba6dc20 Add Arcane stack and clean up deprecated files
- Add new Arcane application stack
- Move aliases.sh to scripts/ directory
- Remove deprecated files (IMPLEMENTATION_COMPLETE.md, markup.yml, release notes)
- Remove standalone traefik docker-compose (now part of core stack)
- Update documentation (ai-vscode-setup.md, docker-guidelines.md, core README)
2026-02-09 22:22:40 -05:00
Kelin
9e71d202cb Move pihole from infrastructure to core stack
Changes:
- docker-compose/core/docker-compose.yml: Added pihole service with full Traefik configuration
- docker-compose/infrastructure/docker-compose.yml: Removed pihole service
- docker-compose/dockge/docker-compose.yml.template: Deleted (no longer needed)

Pihole is now part of core infrastructure alongside Traefik, Authelia, and DuckDNS.
This ensures DNS services are always available on the core server.
2026-02-08 15:11:52 -05:00
Kelin
043e1cb64a Fix Option 3: Create traefik-network and improve sed patterns
Issue: Option 3 deployment failed because traefik-network wasn't created,
but the cleanup function didn't properly strip network references from files.

Changes:
- scripts/ez-homelab.sh: Add traefik-network creation in Step 2
  (Network is harmless if unused - prevents docker compose errors)
- Improve sed patterns in configure_remote_server_routing():
  * Use anchored patterns (^ and $) to match exact lines
  * Fix network removal regex to match indentation correctly

The traefik-network will exist but remain unused on additional servers.
Services are accessed via core Traefik's manual HTTP routes.
2026-02-07 22:22:52 -05:00
Kelin
16f7eaa703 Fix: Restore Traefik labels for Option 2 core deployments
The previous commit removed labels from templates, breaking Option 2 (Core Server)
deployments. This commit restores the proper architecture:

Templates (docker-compose files):
- Restore all Traefik labels to dockge/docker-compose.yml
- Restore all Traefik labels to infrastructure services (dozzle, glances, code-server)
- Restore traefik-network references
- Templates now work correctly for Option 2 (Core Server)

Scripts (ez-homelab.sh):
- Rewrite configure_remote_server_routing() to strip labels for Option 3
- Re-add configure_remote_server_routing() call to deploy_remote_server()
- Add as Step 5 (after copying stacks, before deploying them)
- Update remaining step numbers (6-9)

Architecture flow:
Option 2 (Core Server):
  - Uses templates as-is with Traefik labels
  - Local Traefik discovers services via Docker labels
  - Services accessible at https://service.domain

Option 3 (Additional Server):
  - Copies templates with labels (Step 4)
  - Strips out labels and traefik-network (Step 5)
  - Deploys labelless services with exposed ports (Steps 6-8)
  - Core Traefik routes via manual HTTP configs to IP:PORT
  - Services accessible at https://service.hostname.domain
2026-02-07 21:59:21 -05:00
Kelin
ce3fbdb244 Simplify Option 3: Remove local Traefik from additional servers
Major architectural simplification for headless additional servers:

Templates:
- Remove Traefik labels from dockge/docker-compose.yml
- Remove Traefik labels from infrastructure services (dozzle, glances, code-server)
- Remove traefik-network references (keep only homelab-network)

Scripts (ez-homelab.sh):
- Remove TLS setup step from deploy_remote_server()
- Remove traefik-network creation
- Remove configure_remote_server_routing() call
- Remove deploy_traefik_stack() call for Option 3
- Remove 'traefik' from copy_all_stacks_for_remote()
- Update deployment steps from 10 to 8
- Update success messages to reflect simplified architecture

Scripts (common.sh):
- Remove unused generate_traefik_provider_config() function

Config:
- Add ADMIN_SSH_PUB_KEY field to .env.example

Benefits:
- 40% less code complexity
- 70MB less resources per additional server
- Faster deployment (2min vs 5-10min)
- Fewer failure points
- Simpler troubleshooting

Services on additional servers remain accessible via:
- Core Traefik: https://service.hostname.domain
- Direct IP: http://IP:PORT
2026-02-07 21:34:20 -05:00
Kelin
72d3d8b38f Fix remote server Traefik configuration
- Add ports 80/443 to remote Traefik template
- Enable API access (insecure=true) for debugging
- Update configure_remote_server_routing to use HTTP-only config
  - Change entrypoint from websecure to web
  - Remove TLS cert resolver references
  - Remove authelia middleware references
- Replace Docker TLS provider with manual HTTP routes
  - Core Traefik now uses file provider with direct URLs
  - Fixes 404/gateway timeout errors on remote services
  - Routes HTTPS from core to HTTP on remote servers
- Fix port in routes (dozzle uses 8085, not 8082)

Resolves issues with remote server service accessibility.
2026-02-07 20:43:34 -05:00
kelin
44b529a7cb feat: Add Option 3 - Deploy Additional Server with multi-server support
Major features:
- Automated SSH key setup between remote and core servers
- Docker TLS configuration with shared CA certificates
- Automatic deployment of Dockge, Traefik, Sablier, and Infrastructure stacks
- Copy all stacks (except core) to remote server for on-demand deployment
- New standalone Traefik stack for remote server container discovery
- Locale-aware SSH/SCP commands to handle Raspberry Pi warnings
- Variable expansion support in .env files (${VAR} references)
- Comprehensive error handling and verbose deployment logging

Technical improvements:
- setup_ssh_key_to_core() - Automated RSA 4096-bit key generation and installation
- setup_multi_server_tls() - Fetch shared CA from core server via SSH
- copy_all_stacks_for_remote() - Deploy all stacks except core
- deploy_traefik_stack() - Local Traefik for container discovery
- Enhanced localization with envsubst support
- Docker network creation (traefik-network, homelab-network)
- Password authentication with special character handling

Fixes:
- Fixed SSH key path handling for non-root users
- Fixed SCP exit code checking (was checking grep instead of scp)
- Fixed CA file detection with proper test commands
- Removed unnecessary prepare_deployment() function call
- Added ACTUAL_USER variable initialization for remote deployments
2026-02-06 22:00:25 -05:00
kelinfoxy
5b3c4a2c5b Chage homarr image & add SECRET_ENCRYPTION_KEY 2026-02-06 17:17:17 -05:00
kelinfoxy
5cbb106160 Add multi-server support and update docs
Introduce multi-server architecture documentation and reorganize README content. Top-level README now documents Core vs Remote server roles, links to local docs instead of wiki pages, and highlights Traefik/Sablier multi-server behavior. docker-compose/README.md was rewritten to be a template-style reference with single- and multi-server deployment guidance, Traefik label examples, and sablier usage; dockge README was moved into docker-compose/dockge/. docker-compose/core/README.md was updated to describe core responsibilities, shared CA artifacts, and startup order for multi-server deployments. Several obsolete/duplicated docs and action reports were removed and a new multi-server deployment doc was added to centralize on-demand/remote service guidance. Overall this cleans up legacy docs and documents the multi-server workflow and TLS/shared-CA requirements.
2026-02-05 22:30:52 -05:00
copilot-swe-agent[bot]
0052fa4ddc Complete personal data replacement in Traefik configs
- Replace remaining domain references in Traefik dynamic configs
- Replace kelinreij.duckdns.org with yourdomain.duckdns.org in:
  - external-host-homeassistant.yml
  - local-host-production.yml
  - sablier.yml
  - markup.yml service URLs

Co-authored-by: kelinfoxy <67766943+kelinfoxy@users.noreply.github.com>
2026-02-05 18:41:42 +00:00
copilot-swe-agent[bot]
300d870a2b Replace personal data with variables and placeholders
- Replace hardcoded password in code-server config with ${CODE_SERVER_PASSWORD}
- Replace domain kelin-hass.duckdns.org with yourdomain.duckdns.org in docs
- Replace domain kelinreij.duckdns.org with yourdomain.duckdns.org in homepage config
- Replace personal emails with example addresses
- Replace DuckDNS token and credentials in markup.yml with placeholders
- Replace Let's Encrypt account numbers with placeholders

Co-authored-by: kelinfoxy <67766943+kelinfoxy@users.noreply.github.com>
2026-02-05 18:40:44 +00:00
kelin
10aee3b3b1 Fix: Correct Dozzle port and remove unnecessary template files
- Changed Dozzle service port from 8085 to 8080 (correct port)
- Removed authelia config template files (no longer needed)
- Removed db.sqlite3 runtime data file
2026-02-05 13:13:44 -05:00
kelin
d4c9516e00 Fix: Generate users_database.yml in secrets folder with proper variables
- Move users_database.yml template from config/ to secrets/ folder
- Authelia configuration expects users file at /secrets/users_database.yml
- Replace hardcoded values in configuration.yml with variables:
  - jwt_secret, session secret, storage encryption_key
  - Domain references (kelinreij.duckdns.org → ${DOMAIN})
- Update deploy script to not move config files (already in subdirectories)
- Fix sed command path to target config/configuration.yml
- Remove unnecessary mkdir and mv commands from deploy_core()

This ensures Authelia uses the correctly generated file with user credentials.
2026-02-05 12:12:33 -05:00
kelin
a554d00fd3 Fix: Use variables instead of placeholders in docker-compose files
- Replace hardcoded placeholders with Docker Compose variables
- docker-compose.yml: Use ${DUCKDNS_SUBDOMAINS}, ${DUCKDNS_TOKEN}, ${DOMAIN}, ${SERVER_IP}
- traefik.yml: Use ${DEFAULT_EMAIL} for ACME email
- users_database.yml: Use ${AUTHELIA_ADMIN_USER}, ${AUTHELIA_ADMIN_EMAIL}, ${AUTHELIA_ADMIN_PASSWORD_HASH}
- sablier/docker-compose.yml: Fix to use ${DOMAIN} instead of {{DUCKDNS_DOMAIN}}

This aligns with the correct strategy:
- Docker-compose files use variables (${VAR})
- .env files use placeholders or actual values
2026-02-05 11:57:42 -05:00
Kelin
73cb274160 v0.1.2: Multi-server architecture + security cleanup
- Implement multi-server Traefik + Sablier architecture
- Add label-based automatic service discovery
- Create separate Sablier stack deployment
- Add remote server deployment workflow (Option 3)
- Add 9 new functions for multi-server management
- Remove deprecated config-templates folder
- Replace hardcoded private data with placeholders
- Update backup timestamp format to YY_MM_DD_hh_mm
- Add markup.yml to .gitignore

Breaking changes:
- Removed Sablier from core docker-compose.yml (now separate stack)
- Config templates moved from config-templates/ to docker-compose/core/
- REQUIRED_VARS now dynamic based on deployment type
2026-02-04 19:36:18 -05:00
Kelin
59cd225e0e Fix variable substitution in users_database.yml
- Update localize_users_database_file to properly resolve nested variables in AUTHELIA_ADMIN_EMAIL
- Fix template to use correct AUTHELIA_* variables instead of DEFAULT_* variables
- Update deploy-core.sh to only process files containing variables and fix .env path
- Fix file permissions for authelia config files
2026-02-03 22:48:27 -05:00
Kelin
e2a654b3f4 Refactor docker-compose configurations and add new services
- Reorganize Authelia configuration files
- Add new dynamic routing files for Traefik
- Update various service docker-compose files
- Remove outdated templates and scripts
2026-02-03 22:20:09 -05:00
Kelin
ed17bf295a Fix variable substitution in users_database.yml to preserve password hashes
- Modified load_env_file_safely to prevent expansion of $ in .env values
- Updated localize_users_database_file to handle nested variables correctly
- Added fresh template copying in deploy-core.sh to ensure reliable processing
- Fixed password hash corruption during deployment
2026-02-03 21:07:36 -05:00
Kelin
3d5979b5f1 Implement fixes from test results
- Update Docker install to use curl method
- Rename ADMIN_PASSWORD to AUTHELIA_ADMIN_PASSWORD
- Fix Authelia password hash generation (remove grep, no quotes)
- Revert compose labels to single quotes
- Ensure users_database.yml has unquoted password placeholder
2026-02-02 20:59:07 -05:00
Kelin
7e4799f27e Update media docker-compose.yml 2026-02-02 18:48:15 -05:00
Kelin
faaf39002a Replace personal URLs with placeholders and fix variable replacement logic 2026-02-02 13:19:22 -05:00
Kelin
ea5e34935b Resolve merge conflicts and restore local configuration
- Keep local DuckDNS subdomain and token customizations
- Preserve user-specific Authelia configuration
- Maintain local docker-compose customizations
2026-01-31 23:32:42 -05:00
EZ-Homelab Assistant
41d9a4cd7f feat: standardize traefik.docker.network labels across all docker-compose files
- Add traefik.docker.network=traefik-network label to all local services with traefik.enable=true
- Ensures consistent network selection for Traefik IP discovery
- Prevents routing conflicts when services are on multiple networks
- Updated 12 docker-compose files with 32+ service labels
- Maintains dual network access (homelab-network + traefik-network) for web UIs
2026-01-30 23:45:55 -05:00
EZ-Homelab Assistant
90a26a9ac4 Fix homepage Traefik network routing and update configurations
- Add traefik.docker.network=traefik-network label to homepage service
- Prevent Traefik from using wrong IP from homelab-network
- Resolve 504 Gateway Timeout issues after authentication
- Update various docker-compose configurations and templates
- Clean up unused configuration files
2026-01-30 23:29:00 -05:00
Kelin
f141848a10 Add EZ-Homelab Enhanced Setup System
- Complete modular bash-based setup system replacing Python TUI
- Phase 1-4 implementation: Core Infrastructure, Configuration Management, Deployment Engine, Service Orchestration & Management
- 9 production-ready scripts: preflight.sh, setup.sh, pre-deployment-wizard.sh, localize.sh, generalize.sh, validate.sh, deploy.sh, service.sh, monitor.sh, backup.sh, update.sh
- Shared libraries: common.sh (utilities), ui.sh (text interface)
- Template-based configuration system with environment variable substitution
- Comprehensive documentation: PRD, standards, and quick reference guides
- Automated backup, monitoring, and update management capabilities
- Cross-platform compatibility with robust error handling and logging
2026-01-29 19:53:36 -05:00
kelinfoxy
e8c7dc215f feat: Update EZ-Homelab configurations and documentation
- Update .env.example with latest environment variables
- Enhance homepage dashboard configurations and templates
- Improve Traefik routing templates for external hosts
- Update docker-compose files for dashboards and infrastructure
- Add comprehensive TUI documentation and PRD
- Add new Homelab-Audit documentation
- Remove outdated release notes
- Resolve merge conflicts with remote changes
2026-01-28 21:56:54 -05:00
kelinfoxy
7b4f562c68 feat: Update EZ-Homelab configurations and documentation
- Update .env.example with latest environment variables
- Enhance homepage dashboard configurations and templates
- Improve Traefik routing templates for external hosts
- Update docker-compose files for dashboards and infrastructure
- Add comprehensive TUI documentation and PRD
- Add new Homelab-Audit documentation
- Remove outdated release notes
2026-01-28 21:56:33 -05:00
Kelin
d62ea7f3df Update core docker-compose.yml to match working local configuration
- Change sablier volumes to use ./shared-ca:/certs:ro (matches script generation)
- Fix x-dockge URLs to use http:// for local access and correct variable syntax
- Ensure consistency with local working setup
2026-01-28 03:32:50 -05:00
Kelin
1a78578be3 Update Docker Compose files for various stacks 2026-01-26 19:11:16 -05:00
Kelin
89ca29918b Implement shared CA certificate system for multi-server TLS security
- Generate shared CA during core deployment for consistent trust across servers
- Modify setup_docker_tls() to use shared CA instead of per-server CAs
- Update share_certs_with_core() to copy shared CA from core server
- Re-enable TLS verification (DOCKER_TLS_VERIFY=1) in Sablier
- Fix Sablier certificate mounting for proper TLS connection
- Add docker-tls/ to .gitignore to prevent certificate leaks
- Update documentation for shared CA approach
2026-01-25 23:08:01 -05:00
EZ-Homelab
bb65f68571 refactor: Rename docker-compose files to use .yml extension
- Rename transcoders/docker-compose.yaml to .yml
- Rename wikis/docker-compose.yaml to .yml
- Maintains consistency with other docker-compose files in the project

Standardizes file extensions across all Docker Compose configurations.
2026-01-24 23:42:31 -05:00
kelinfoxy
08b184aea7 Standardize Compose Files 2026-01-24 23:11:05 -05:00
EZ-Homelab
a1c9a0958b feat: Add Sablier lazy loading to Jupyter service
- Add Sablier middleware configuration to Jupyter in productivity stack
- Update .gitignore to properly ignore service data files
- Ignore database files, logs, settings.json, and key files

Jupyter now supports on-demand startup via Sablier middleware.
2026-01-24 21:22:49 -05:00
EZ-Homelab
5e7fe08652 feat: Complete Sablier lazy loading implementation
- Add Sablier middleware to all 32 services across stacks
- Update vaultwarden port from 80 to 8091 to avoid conflicts
- Add tdarr-server and unmanic services with lazy loading
- Optimize health checks (wget for some services, dozzle built-in)
- Update Traefik routers and service definitions
- Update port documentation

All services now support on-demand startup via Sablier middleware.
2026-01-24 20:20:11 -05:00
EZ-Homelab
602dc3d12d Add comprehensive health checks for Sablier lazy loading services
- Add health checks to all services using Sablier lazy loading
- Utilities stack: Backrest, Duplicati, Form.io, Vaultwarden
- Productivity stack: Nextcloud, WordPress, Gitea, BookStack, MediaWiki
- Media Management stack: Sonarr, Radarr, Prowlarr, Jellyseerr
- Infrastructure stack: Dozzle, Glances, Code Server
- Dashboards stack: Homarr
- Health checks use curl to service endpoints with 30s intervals
- Appropriate start_period delays for service initialization
- This resolves Sablier warnings about missing health checks
2026-01-24 17:26:52 -05:00
EZ-Homelab
53d4fc0d4b Resolve TasmoAdmin port conflict with MediaWiki
- Change MediaWiki from port 8084 to 8086 to resolve conflict with TasmoAdmin
- Update Traefik loadbalancer port for MediaWiki
- Add MediaWiki to ports-in-use.md documentation
- TasmoAdmin now uses port 8084, MediaWiki uses port 8086
2026-01-24 17:13:33 -05:00
EZ-Homelab
7a1cd5a8a0 Fix port conflicts and standardize service configurations
- Resolve port conflicts: TasmoAdmin (8084), Form.io (3002), Gitea (3010)
- Add missing Authelia SSO and Sablier lazy loading to utilities stack
- Standardize Form.io labels to match TRAEFIK CONFIGURATION guidelines
- Reorganize ports-in-use.md with stack-based table and proper column order
- Remove Dokuwiki deployment from ez-homelab.sh (already in productivity stack)
- Update service restart policies for lazy loading compatibility
2026-01-24 17:01:53 -05:00
EZ-Homelab
7449c14ac6 Remove Bitwarden authelia middleware and simplify networks
- Remove authelia middleware from Vaultwarden (Bitwarden) for app compatibility
- Simplify all compose files to use only homelab-network and traefik-network
- Remove unnecessary isolated networks (nextcloud-network, wordpress-network, etc.)
- Remove monitoring-network, formio-network, and media-network
- All services now communicate through the unified homelab-network
- Maintain traefik-network for proxied services only
2026-01-24 15:30:43 -05:00
EZ-Homelab
93ef87091a Enable Authelia middleware by default for all services
- Uncomment Authelia middleware for Vaultwarden (was disabled for app compatibility but should use SSO by default)
- Verify all other services have Authelia middleware except:
  - Jellyfin (media app access)
  - Plex (media app access)
  - Authelia itself (authentication service)
- All x-dockge sections are properly formatted with urls list
2026-01-24 15:24:10 -05:00
EZ-Homelab
c5d54c6bc7 Fix variable substitution patterns: remove :-default fallbacks
- Replace all ${VARIABLE:-default} with ${VARIABLE} in compose files
- Ensure explicit variable requirements without default values
- Updated 10 docker-compose.yml files across all stacks
- Made reset-ondemand-services.sh executable
2026-01-24 15:20:31 -05:00
EZ-Homelab
1949fe3c2e Fix mediawiki loadbalancer port to match external host (8084) 2026-01-24 15:14:27 -05:00
EZ-Homelab
8997d1ce0c Fix productivity stack port conflicts
- Changed Nextcloud port from 80 to 8099
- Changed Mealie port from 9000 to 9001
- Changed WordPress port from 80 to 8089
- Changed Gitea port from 3000 to 3011
- Changed DokuWiki port from 80 to 8088
- Changed BookStack port from 80 to 6876
- Updated all corresponding Traefik loadbalancer ports
- Resolved conflicts with external host services in external-host-production.yml
2026-01-24 15:01:36 -05:00
EZ-Homelab
a0bb477d8c Update media-management compose: unified Sablier groups, x-dockge format
- Changed all Sablier groups to ${SERVER_HOSTNAME}-arr for coordinated lazy loading
- Moved x-dockge URLs to top-level section with urls list format
- Added both HTTPS and localhost URLs for service discovery
- Updated guidelines and instructions to reflect new x-dockge format
2026-01-24 14:46:50 -05:00
EZ-Homelab
4fa35461be fix: complete TRAEFIK CONFIGURATION standardization for productivity stack
- Update remaining 6 services (mealie, wordpress, gitea, dokuwiki, bookstack, mediawiki) to new format
- Enable authelia middleware for mealie and wordpress (previously disabled)
- Ensure all services except Jellyfin have authelia@docker protection
- Maintain consistent label structure with service metadata, router config, and Sablier settings
2026-01-23 19:24:39 -05:00
EZ-Homelab
576419443d fix: standardize remaining TRAEFIK CONFIGURATION labels
- Update infrastructure services (dozzle, glances, code-server) to new format
- Update dashboards (homarr) to new format
- Update utilities (backrest, duplicati) to new format
- Update productivity (nextcloud) to new format
- Add authelia middleware to all services except Jellyfin
- Ensure consistent label structure across all stacks
2026-01-23 19:22:33 -05:00
EZ-Homelab
436ff0d035 fix: remove SERVER_HOSTNAME default values causing errors
- Change ${SERVER_HOSTNAME:-debian} to ${SERVER_HOSTNAME} in Sablier groups
- Prevents empty default values that were causing configuration errors
- Applied to dashboards, infrastructure, media, productivity, and utilities stacks
2026-01-23 18:50:10 -05:00
EZ-Homelab
3723cebe9c fix: resolve dockerproxy port 2375 conflict
- Remove port mapping from dockerproxy service
- Docker daemon already provides TCP API access on port 2375
- dockerproxy runs for security but doesn't expose conflicting port
- Resolves 'port already allocated' error during deployment
2026-01-23 18:29:52 -05:00
EZ-Homelab
c8ffce2611 feat: standardize Traefik/Sablier labels across all stacks
- Add consistent # TRAEFIK CONFIGURATION headers to all services
- Standardize label structure with service metadata, router config, and Sablier settings
- Update dockerproxy and sablier-service with Docker API requirements documentation
- Fix YAML validation issues in productivity stack
- Ensure all stacks have uniform labeling for easy management

Resolves Docker API connectivity issues for Sablier lazy loading
2026-01-23 17:31:23 -05:00
EZ-Homelab
0f6d6c1583 Standardize media-management stack labels
- Updated readarr, lidarr, lazylibrarian, mylar3, jellyseerr, tdarr-server, unmanic
- Applied consistent TRAEFIK CONFIGURATION headers and comments
- Removed duplicate x-dockge.url labels from jellyseerr
- All media services now use standardized label format matching other stacks
2026-01-23 17:24:13 -05:00