Commit Graph

59 Commits

Author SHA1 Message Date
EZ-Homelab
f6563a67f7 Standardize labels across remaining stacks - Part 1
- Updated core services (traefik, authelia, sablier) with standardized labels
- Updated monitoring services (prometheus, grafana, cadvisor, uptime-kuma, loki)
- Updated utilities services (duplicati, formio, vaultwarden)
- Updated media management services (sonarr, radarr, prowlarr)
- Updated homeassistant services (esphome)
- Added proper TRAEFIK CONFIGURATION headers and comments
- Maintained service-specific configurations (authelia middleware, vaultwarden SSO disabled)
2026-01-23 16:41:12 -05:00
EZ-Homelab
874a5b31ed Remove Nextcloud application files from repo and add to .gitignore
- Removed docker-compose/productivity/nextcloud/html/ directory containing Nextcloud app files
- Added exclusion for Nextcloud html directory in .gitignore
- Nextcloud should install its files via Docker volume mounts, not be committed to repo
2026-01-23 16:24:00 -05:00
EZ-Homelab
38732817e1 refactor: Standardize compose file labels using dashboards template
- Apply consistent label structure across all compose files
- Include complete Traefik and Sablier labels for all services
- Enable Sablier by default for services with middleware definitions
- Comment out Sablier labels for services without middleware
- Add explanatory comments for remote Traefik configurations
- Comment out Authelia middleware where not appropriate (media apps, public services)
- Maintain existing configuration data and functionality
2026-01-23 16:20:26 -05:00
EZ-Homelab
a8835801a7 refactor: Refine compose files with improved Traefik/Sablier labels
- Enable Sablier by default for services with middleware definitions
- Update label comments to indicate 'enabled by default - comment out to disable'
- Ensure x-dockge sections have proxied URLs first, then direct IP:port
- Remove any x-dockge labels from service configurations
- Maintain well-documented, concise label sections for easy enable/disable
2026-01-23 15:53:22 -05:00
EZ-Homelab
3701b11a73 feat: Update Sablier configs for debian hostname and reorganize .env.example
- Change Traefik configs to use ${SERVER_HOSTNAME} placeholder (defaults to debian)
- Update ez-homelab.sh to replace SERVER_HOSTNAME in config templates
- Set Sablier session duration to 5m for testing (increase to 30m for production)
- Add SERVER_HOSTNAME prompt and saving in setup script
- Reorganize .env.example with better structure and SMTP variables
- Add production guidance comments to docker-compose files
- Intentional SMTP variable redundancy for service flexibility
2026-01-23 15:25:25 -05:00
EZ-Homelab
970231fc04 Add health check and theme to Jellyfin for Sablier lazy loading
- Added healthcheck to ensure Jellyfin is ready before Sablier redirects
- Added hacker-terminal theme to Sablier starting page
- This should help Sablier detect when Jellyfin is fully ready
2026-01-22 23:04:02 -05:00
EZ-Homelab
a81b14b457 Revert infrastructure services back to Sablier lazy loading
- Restored Sablier labels and restart: no for Dozzle, Glances, Code Server
- Remote Sablier can control local containers via dockerproxy
- Services will start on-demand when accessed
2026-01-22 20:45:25 -05:00
EZ-Homelab
6de8036e01 Remove Sablier lazy loading from infrastructure services since Sablier runs remotely
- Changed Dozzle, Glances, Code Server from restart: no to unless-stopped
- Removed Sablier labels from all three services
- Updated comments to reflect continuous running
- Kept dockerproxy environment variables for local Docker operations
2026-01-22 20:42:45 -05:00
EZ-Homelab
9cc0e93c79 feat: Add comprehensive restart policy documentation and Sablier lazy loading support
- Add SERVER_HOSTNAME env var for Sablier group naming
- Update default hostname from 'jarvis' to 'debian' for generic repo compatibility
- Add restart policy documentation to all docker-compose files
- Add Sablier labels to lazy-loaded services (jellyfin, dozzle, glances, code-server, homarr, dokuwiki)
- Update sablier.yml template to use debian- prefixes
- Enhance deploy script to auto-detect hostname and update configurations
- Ensure all YAML files remain syntactically valid
2026-01-22 19:49:24 -05:00
EZ-Homelab
30bf095fd3 fix: Configure Sablier lazy loading for docker-compose services
- Change restart policy from 'unless-stopped' to 'no' for services configured with Sablier middleware
- Services affected: jellyfin, dozzle, glances, code-server, homarr, dokuwiki
- Allows Sablier to control container startup/shutdown for lazy loading
- Improves resource utilization by only running services when accessed
2026-01-22 19:12:35 -05:00
EZ-Homelab
4140a32adb fix: Update script to replace ${DEFAULT_EMAIL} in authelia users database
- Add sed replacement for ${DEFAULT_EMAIL} with actual admin email
- Ensures email addresses are properly configured during deployment
2026-01-22 19:05:18 -05:00
EZ-Homelab
71d9a1e152 feat: Complete EZ-Homelab deployment system overhaul
- Add unified ez-homelab.sh script with guided menu interface
- Create dedicated Dockge stack in /opt/dockge for clean isolation
- Move dockerproxy from core to infrastructure stack
- Fix Authelia configuration with proper variable placeholders
- Update all compose files to use  variables
- Enhance script with comprehensive variable replacement
- Fix sed delimiter conflicts and middleware issues
- Add proper step numbering and error handling
- Prepare all stacks for Dockge management
- Update README with new deployment instructions
2026-01-22 18:56:20 -05:00
EZ-Homelab
dd15a7c641 Remove remaining redundant docker-compose .yml files
- Remove alternatives.yml, development.yml, homeassistant.yml
- Keep folder-based structure for all stacks
- Note: development stack was removed as it was incomplete
2026-01-22 16:45:02 -05:00
EZ-Homelab
89760895f2 Refactor docker-compose structure to folder-based organization
- Remove redundant .yml files from main docker-compose folder
- Update deploy script to use folder-based structure for all stacks
- Update documentation to reflect new folder-based organization
- Standardize all stacks to use docker-compose.yml in individual folders

This eliminates confusion between file-based and folder-based structures,
making the repository more maintainable and consistent.
2026-01-22 16:44:44 -05:00
kelinfoxy
43f78b384f Rename project from AI-Homelab to EZ-Homelab
- Updated all documentation references from AI-Homelab to EZ-Homelab
- Changed repository URLs and directory paths
- Updated wiki content and navigation
- Maintained AI assistance functionality while emphasizing ease of use
- Updated copilot instructions and agent guidelines
2026-01-21 19:54:27 -05:00
kelinfoxy
30e0481685 copilot Instructions improvements
and documentation updates
2026-01-21 18:52:40 -05:00
kelinfoxy
ec6a46a52d Apply stashed changes after merge 2026-01-20 19:40:27 -05:00
kelinfoxy
ae35eafdb6 Merge remote changes and resolve conflict in copilot-instructions.md 2026-01-20 19:40:20 -05:00
kelinfoxy
16b7e1f1a7 Documentation Reorganization
Major upgrade to the documentation.
2026-01-20 19:01:21 -05:00
kelinfoxy
21ee910267 Merge remote updates, accepting remote versions for conflicted files 2026-01-17 20:22:10 -05:00
15582a36ad Add x-dockge.url labels to all services with web UIs
- Added x-dockge.url=https://service. labels to all services that have Traefik routers
- Enables Dockge to display direct links to service web interfaces
- Covers all stacks: core, infrastructure, media, productivity, monitoring, utilities, etc.
2026-01-16 20:19:14 -05:00
4a7e36723b Configure Traefik to use Let's Encrypt staging server
- Add caServer to ACME resolver for staging certificates
- Prevents hitting production rate limits during testing
2026-01-16 20:06:27 -05:00
86fc009350 Update Homepage services: add Lidarr/Readarr/Radarr to Media Management, fix Formio URL 2026-01-16 16:25:35 -05:00
35b0280f80 Fix Formio: remove old Mongo data volume to resolve compatibility issue 2026-01-16 16:20:08 -05:00
42de942488 Fix Formio: use calipseo/formio image and mongo:4.4 for compatibility 2026-01-16 16:18:06 -05:00
71c99fa8d1 Fix Formio: change MONGO_URL to MONGO env var and correct Traefik port to 3001 2026-01-16 16:14:44 -05:00
1a5fd8d5f9 Enable Formio service in utilities stack: update image to unfao/formio, uncomment services, add to x-dockge 2026-01-16 16:09:52 -05:00
2c323cfc5c Update stacks: move Jupyter to productivity, remove development stack, update homepage config, add Authelia bypass for dev services 2026-01-16 00:04:40 -05:00
0c9d7e1457 Update development stack with proper images and Traefik configuration
- Update GitLab to latest image and configure for HTTPS via Traefik
- Update pgAdmin to latest image and add Traefik routing
- Update Jupyter to latest image and add Traefik routing
- Add traefik-network to all web-accessible services
- Configure unique hostnames: gitlab, pgadmin, jupyter
- Remove direct port exposure in favor of Traefik reverse proxy
- Update service descriptions and access URLs
2026-01-15 22:29:32 -05:00
c7675dcf06 Fix Prometheus and Loki permission errors
- Remove user directives from Prometheus and Loki services to allow root access to volumes
- Add resource limits to all monitoring services (Prometheus, Grafana, Uptime Kuma, Loki)
- Fixes permission denied errors when writing to named volumes
2026-01-15 22:11:36 -05:00
321ce1c3f6 Fix dashboard stack resource limits corruption
- Fix malformed deploy.resources sections in homepage and homarr
- Ensure proper YAML indentation for reservations sections
- Apply web service resource limits (0.5 CPU, 256MB memory each)
- Validate both deployed and repository configurations
2026-01-15 21:41:52 -05:00
2f249d8dc7 Fix infrastructure stack resource limits corruption
- Fix malformed deploy.resources sections in dockge, pihole, glances
- Add missing resource limits to dozzle and code-server
- Ensure proper YAML indentation for reservations sections
- Apply researched resource limits based on service types:
  * Lightweight: dockge (0.5 CPU), pihole (0.25 CPU)
  * Web services: dozzle, glances (0.5 CPU each)
  * Heavy apps: code-server (1.5 CPU for full IDE)
- Validate both deployed and repository configurations
2026-01-15 21:36:14 -05:00
87790c45ef Update Uptime Kuma installation process and homepage configuration 2026-01-15 16:06:56 -05:00
ab43dc79d5 Update docker-compose files from test system changes 2026-01-15 15:09:54 -05:00
0cf25e09a1 Update repo with latest changes 2026-01-15 14:46:49 -05:00
29ce66aeca Fix: Add Docker socket permissions for Homepage container status
- Added user field with DOCKER_GID to allow homepage to read Docker socket
- Ensures container status monitoring works properly
- DOCKER_GID defaults to 999, should be set to actual docker group ID in .env
2026-01-15 01:59:36 -05:00
0b90bce7d0 Fix: Update vaultwarden subdomain from bitwarden to vault
- Changed Traefik routing to use vault. instead of bitwarden.
- Matches homepage dashboard configuration
- Ensures consistent URL naming across services
2026-01-15 01:19:00 -05:00
f95275d5c0 Refactor: Create downloaders stack for VPN-routed services
- Created new downloaders stack with Gluetun + qBittorrent unified
- Moved Gluetun from core stack to downloaders stack
- Moved qBittorrent from media-management to downloaders stack
- Uses network_mode: service:gluetun for better maintainability
- Eliminates cross-stack container ID dependencies
- Both services now start/stop together as a logical unit
2026-01-15 00:53:53 -05:00
14421a8a9e Fix Traefik routing for qbittorrent and vaultwarden
- Add tls=true label to vaultwarden for HTTPS routing
- Add Traefik routing labels to Gluetun for qbittorrent access
- Move qbittorrent service to media-management stack (proper location)
- Update copilot-instructions.md with project-specific architecture details
- Clean up outdated gluetun.yml references in media.yml template

Both services now accessible via HTTPS with proper SSL certificates.
2026-01-15 00:25:32 -05:00
adb894d35e Round 10: Add Traefik routing to monitoring services
- Added Traefik labels and routing to prometheus, grafana, loki, cadvisor
- Fixed Grafana ROOT_URL to use domain-based URL (https://grafana.${DOMAIN})
- Added uptime-kuma bypass rule in Authelia (needs initial setup)
- Updated all services to use traefik-network
- Synced domain from kelin-hass to kelin-casa across all configs
- Fixed missing tls=true label on uptime-kuma
- Note: Loki is API-only service (no web UI, accessed via Grafana)
2026-01-14 23:08:37 -05:00
650700ed0a Re-enable Watchtower with correct Docker API version
Fixes:
- docker-compose/infrastructure.yml:
  - Uncommented Watchtower service
  - Updated image from 1.7.1 to latest
  - Changed DOCKER_API_VERSION from 1.44 to 1.52 (current Docker version)
  - Added default empty value for WATCHTOWER_NOTIFICATION_URL

- scripts/deploy-homelab.sh:
  - Removed "temporarily disabled" note
  - Added Watchtower to infrastructure stack list

- docs/services-overview.md:
  - Updated infrastructure stack count from 7 to 8
  - Added Watchtower to service list

Watchtower now runs successfully with scheduled updates at 4 AM daily
2026-01-14 02:25:20 -05:00
f79a2ab6f1 Fix infrastructure.yml networks section
- Added missing 'networks:' header
- Changed homelab-network and dockerproxy-network to external: true
- Added missing traefik-network definition
- Removed incorrect 'driver: bridge' declarations
2026-01-14 01:39:59 -05:00
aa3f927b2c Reorganize docker-compose stacks for better service grouping
Stack changes:
- Renamed media-extended.yml → media-management.yml (better clarity)
- Moved Plex from media → alternatives (Jellyfin is primary)
- Moved code-server from utilities → infrastructure
- Moved Sonarr, Radarr, Prowlarr from media → media-management
- Moved Calibre-web from media-management → media

New stack organization:
- media.yml (3): Jellyfin, Calibre-web, qBittorrent
- media-management.yml (13): All *arr apps, transcoders
- alternatives.yml (6): Plex, Portainer, Authentik
- infrastructure.yml (7): Added code-server
- utilities.yml (6): Removed code-server

Documentation updated:
- README.md: Updated stack descriptions
- services-overview.md: Updated service counts and locations
- All service docs: Updated file paths media-extended → media-management
2026-01-14 01:32:20 -05:00
487f645652 Round 9: Homepage variable replacement and additional stack deployment
Features added:
 Homepage config variable replacement - Fixed HOMEPAGE_VAR_DOMAIN substitution
  - Homepage doesn't support environment variables in configs
  - Deploy script now uses sed to replace {{HOMEPAGE_VAR_DOMAIN}} with actual domain
  - All homepage/*.yaml files processed after template copy

 Additional stacks deployment to Dockge
  - 7 additional stacks now copied to /opt/stacks/: media, media-extended,
    homeassistant, productivity, monitoring, utilities, alternatives
  - Stacks are NOT started automatically - user deploys via Dockge UI as needed
  - Optional image pre-pull with user prompt (defaults to no)
  - Significantly improves first-time Dockge experience

 Watchtower temporarily disabled
  - Documented Docker API v1.44 compatibility issue with Docker 29.x
  - Added clear instructions for re-enabling when issue is resolved
  - Infrastructure stack now deploys 6 services (was 7)

Deployment workflow:
1. Core stack (4 services) - DuckDNS, Traefik, Authelia, Gluetun
2. Infrastructure stack (6 services) - Dockge, Pi-hole, Dozzle, Glances, Docker Proxy
3. Dashboards stack (2 services) - Homepage (configured), Homarr
4. Additional stacks (7 stacks copied, not started)

Tested: All 11 active containers healthy, all stacks visible in Dockge
2026-01-13 21:36:38 -05:00
cf061f35d2 Fix: Resolve password hash corruption in Authelia users_database.yml
Critical fix for argon2 password hash preservation:
- Root cause: Bash variable expansion of $ characters in argon2id hashes
- Solution: Write hash directly from Docker output to file, bypass bash variables entirely
- setup-homelab.sh: Stream Docker output directly to /tmp/authelia_password_hash.tmp
- deploy-homelab.sh: Read hash file in Python to avoid any bash expansion
- Result: Password hash correctly preserved with full $argon2id$v=19$m=... format

Other changes:
- Added DOCKER_API_VERSION=1.44 env var for watchtower (API compatibility)
- Watchtower still has issues with Docker 29.1.4 - keeping version pinned for investigation

Tested on Debian 12 with Docker 29.1.4:
 All 11 critical containers healthy
 Authelia authentication working correctly
 Password hash preserved through entire deployment workflow
⚠️  Watchtower restart loop (non-critical, under investigation)
2026-01-13 21:02:49 -05:00
f0a3907002 Round 4 improvements: automated config, relative paths, simplified deployment
- Automate Traefik email substitution in deploy script
- Auto-generate Authelia admin password (saved to ADMIN_PASSWORD.txt)
- Standardize all volume paths to use relative paths (./service/config)
- Switch Traefik to HTTP challenge by default (DNS challenge optional)
- Update documentation with improved setup instructions
- Enhance troubleshooting guide
- Update AGENT_INSTRUCTIONS with new conventions
- Simplify .env.example with clearer guidance

These changes reduce manual configuration steps and improve deployment reliability.
2026-01-13 18:30:06 -05:00
f92424ed6d Fix critical deployment issues for Round 4
- Add DOCKER_API_VERSION=1.44 to Watchtower (fixes crash loop)
- Add dockerproxy-network creation to deploy script (fixes dashboard deployment)
- Add explicit acme.json file creation with 600 permissions (fixes SSL cert acquisition)
- Fix setup script to correctly resolve user home directory when run with sudo

These fixes resolve all critical blockers discovered in Round 3 testing.
2026-01-13 17:36:47 -05:00
a53effad10 Add docker-compose configurations and SSL troubleshooting docs
- Added compose files for core, infrastructure, and dashboards stacks
- Added Traefik, Authelia, and DuckDNS configuration files
- Added dockge.managed and dockge.url labels to all services
- Updated Watchtower to latest version with DOCKER_API_VERSION=1.44
- Created comprehensive SSL certificate troubleshooting guide for DuckDNS issues
2026-01-13 16:40:13 -05:00
bbcc4c19c9 Update Homepage dashboard and deployment scripts
- Homepage: Reorganize services by stack instead of by category
- Homepage: Add comprehensive Available to Install sections for all stacks
- Homepage: Update config templates with {{HOMEPAGE_VAR_DOMAIN}} placeholder
- Homepage: Change layout from row to column style
- Scripts: Add sudo requirement to deploy-homelab.sh
- Scripts: Replace NVIDIA driver installation with official installer method
- Scripts: Add build prerequisites and nouveau blacklisting
- Docs: Add AI Automation Guidelines section to docker-guidelines.md
- Docs: Document Homepage auto-update requirements and workflow
- Config: Add bookmarks.yaml template for Homepage
- Config: Add alternatives.yml compose file (Portainer, Authentik)
- Config: Update .env.example and authelia configuration
2026-01-13 00:04:43 -05:00
90462cd179 Fix SSL wildcard certificate setup
- Remove individual certresolver labels from all services except Traefik
- Configure wildcard certificate (*.kelin-hass.duckdns.org) on Traefik only
- Remove AUTHELIA_NOTIFIER_SMTP_PASSWORD env var (filesystem notifier only)
- Fix infrastructure.yml networks section syntax
- Add wildcard SSL certificate setup action report

All services now use single wildcard Let's Encrypt certificate.
Resolves DNS challenge conflicts with DuckDNS provider.
2026-01-12 23:19:27 -05:00