Files
EZ-Homelab/scripts
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
..
2026-01-24 21:40:51 -05:00

EZ-Homelab Setup Scripts

This directory contains scripts for automated EZ-Homelab deployment and management:

  1. ez-homelab.sh - Unified setup and deployment script
  2. reset-test-environment.sh - Safe test environment cleanup
  3. reset-ondemand-services.sh - Reload services for Sablier lazy loading

ez-homelab.sh

Unified guided setup and deployment script that handles both system preparation and service deployment in a single interactive session.

What It Does

System Preparation (when needed):

  1. System Update - Updates all system packages
  2. Install Dependencies - Installs required packages (curl, git, etc.)
  3. Install Docker - Adds Docker repository and installs Docker Engine with Compose V2
  4. Configure User Groups - Adds user to sudo and docker groups
  5. Configure SSH - Enables and starts SSH server for remote access
  6. Detect NVIDIA GPU - Checks for NVIDIA graphics card and provides manual driver installation instructions
  7. Create Directories - Sets up /opt/stacks, /opt/dockge, /mnt/media, /mnt/downloads
  8. Create Docker Networks - Creates homelab-network, traefik-network, and media-network

Configuration & Deployment:

  1. Interactive Setup - Guides you through domain, admin credentials, and service selection
  2. Authelia Secrets Generation - Generates JWT, session, and encryption keys
  3. Admin User Creation - Prompts for admin username, email, and password
  4. Service Deployment - Deploys selected stacks based on your choices
  5. SSL Certificate Setup - Obtains wildcard certificate via DNS challenge
  6. Dockge Access - Opens Dockge web UI when ready

Usage

cd ~/EZ-Homelab

# Make the script executable (if needed)
chmod +x scripts/ez-homelab.sh

# Run the script (will use sudo when needed)
./scripts/ez-homelab.sh

Interactive Options

The script will prompt you to:

  • Enter your domain (e.g., yourdomain.duckdns.org)
  • Provide DuckDNS token
  • Set admin credentials for Authelia
  • Choose which service stacks to deploy
  • Configure additional settings as needed

After Running

  1. Access Dockge at https://dockge.yourdomain.duckdns.org
  2. Log in with your configured Authelia credentials
  3. Deploy additional stacks through Dockge's web UI

NVIDIA GPU Support

If an NVIDIA GPU is detected, the script will provide instructions for manual driver installation:

  1. Identify your GPU model from the output
  2. Visit https://www.nvidia.com/Download/index.aspx
  3. Download the official driver for your GPU
  4. Run the installer: sudo bash NVIDIA-Linux-x86_64-XXX.XX.run
  5. Install container toolkit:
    sudo apt-get install -y nvidia-container-toolkit
    sudo nvidia-ctk runtime configure --runtime=docker
    sudo systemctl restart docker
    

This manual approach avoids driver conflicts that often occur with automated installation methods.

Requirements

  • Fresh Debian/Ubuntu installation (or existing system)
  • Root access (via sudo)
  • Internet connection
  • Ports 80 and 443 forwarded to your server

Tested On

  • Debian 11 (Bullseye)
  • Debian 12 (Bookworm)
  • Ubuntu 20.04/22.04

Notes

  • The script is idempotent - safe to run multiple times
  • Creates directories with proper ownership
  • Configures Docker networks automatically
  • SSH is enabled for remote management
  • NVIDIA driver installation requires manual intervention for reliability

reset-test-environment.sh

Safe cleanup script for testing environments. Completely removes all deployed services, data, and configurations while preserving the underlying system setup. Intended for development and testing scenarios only.

What It Does

  1. Stop All Stacks - Gracefully stops dashboards, infrastructure, and core stacks
  2. Preserve SSL Certificates - Backs up acme.json to the repository folder for reuse
  3. Remove Docker Volumes - Deletes all homelab-related named volumes (data will be lost)
  4. Clean Stack Directories - Removes /opt/stacks/core, /opt/stacks/infrastructure, /opt/stacks/dashboards
  5. Clear Dockge Data - Removes Dockge's persistent data directory
  6. Clean Temporary Files - Removes temporary files and setup artifacts
  7. Remove Networks - Deletes homelab-network, traefik-network, dockerproxy-network, media-network
  8. Prune Resources - Runs Docker system prune to clean up unused resources

Usage

cd ~/AI-Homelab

# Make the script executable (if needed)
chmod +x scripts/reset-test-environment.sh

# Run with sudo (required for system cleanup)
sudo ./scripts/reset-test-environment.sh

Safety Features

  • Confirmation Required - Must type "yes" to confirm reset
  • Root Check - Ensures running with sudo but not as root user
  • Colored Output - Clear visual feedback for each step
  • Error Handling - Continues with warnings if some operations fail
  • Preserves System - Docker, packages, user groups, and firewall settings remain intact

After Running

The system will be returned to a clean state ready for re-deployment:

  1. Ensure .env file is properly configured
  2. Run: ./scripts/ez-homelab.sh

Requirements

  • Docker and Docker Compose installed
  • Root access (via sudo)
  • Existing AI-Homelab deployment

Warnings

  • DATA LOSS - All application data, databases, and configurations will be permanently deleted
  • SSL Certificates - Preserved in repository folder but must be manually restored if needed
  • Production Use - This script is for testing only - DO NOT use in production environments

Notes

  • Preserves Docker installation and system packages
  • Maintains user group memberships and firewall rules
  • SSL certificates are backed up to ~/AI-Homelab/acme.json
  • Safe to run multiple times
  • Provides clear next steps after completion

reset-ondemand-services.sh

Service management script for Sablier lazy loading. Restarts stacks to reload configuration changes and stops web services so Sablier can control them on-demand, while keeping databases running.

What It Does

  1. Restart Stacks - Brings down and back up various service stacks to reload compose file changes
  2. Stop Web Services - Stops containers with sablier.enable=true label so Sablier can start them on-demand
  3. Preserve Databases - Leaves database containers running for data persistence

Supported Stacks

The script manages the following stacks:

  • arr-stack (Sonarr, Radarr, Prowlarr)
  • backrest (backup management)
  • bitwarden (password manager)
  • bookstack (documentation)
  • code-server (VS Code server)
  • dokuwiki (wiki)
  • dozzle (log viewer)
  • duplicati (alternative backup)
  • formio (form builder)
  • gitea (git server)
  • glances (system monitor)
  • mealie (recipe manager)
  • mediawiki (wiki)
  • nextcloud (cloud storage)
  • tdarr (media processing)
  • unmanic (media optimization)
  • wordpress (blog/CMS)

Usage

cd ~/AI-Homelab

# Make the script executable (if needed)
chmod +x scripts/reset-ondemand-services.sh

# Run as regular user (docker group membership required)
./scripts/reset-ondemand-services.sh

When to Use

  • After modifying compose files for Sablier lazy loading configuration
  • When services need to reload configuration changes
  • To ensure Sablier has control over web service startup
  • During initial setup of lazy loading for multiple services

Requirements

  • Docker and Docker Compose installed
  • User must be in docker group
  • Sablier must be running in core stack
  • Service stacks must be deployed

Notes

  • Handles different compose file naming conventions (.yml vs .yaml)
  • Stops only services with Sablier labels enabled
  • Databases remain running to preserve data
  • Safe to run multiple times
  • Provides clear feedback on operations performed