Commit Graph
37 Commits
Author SHA1 Message Date
Claude de4bbf4711 Apply reconfigure fix to ActualBudget
- Added check_service_exists() to ActualBudget
- Now shows Skip/Reconfigure/Restart options
- Prevents accidental overwrite of existing configurations

Progress: 6/24 services complete (Immich, AudioBookshelf, Emby, ARM, FileBrowser, ActualBudget)
2026-01-12 17:54:08 +00:00
Claude 53f0101f9b Apply reconfigure fix to ARM and FileBrowser services
- Added check_service_exists() to ARM (Automatic Ripping Machine)
- Added check_service_exists() to FileBrowser
- Both now show Skip/Reconfigure/Restart options
- Prevents accidental overwrite of existing configurations

Progress: 5/24 services complete (Immich, AudioBookshelf, Emby, ARM, FileBrowser)
2026-01-12 17:52:47 +00:00
Claude 4a7dd2e654 Add helper function and apply reconfigure fix to key services
1. **Created check_service_exists() Helper Function:**
   - Reusable function to check if service exists
   - Shows options: Skip / Reconfigure / Restart
   - Handles backup automatically on reconfigure
   - Returns boolean flag to control installation flow
   - Reduces code duplication across services

2. **Applied Reconfigure Fix to Services:**
   - Immich (with drive detection)
   - AudioBookshelf
   - Emby

3. **How It Works:**
   ```bash
   check_service_exists "ServiceName" "$SERVICE_DIR" RECONFIGURE_FLAG
   if [ "$RECONFIGURE_FLAG" = "true" ]; then
       # Only run configuration if true
   fi
   ```

4. **Benefits:**
   - Consistent behavior across all services
   - Automatic backup before any changes
   - Safe default (Skip) protects existing configs
   - Easy to apply to remaining services

Next: Apply to remaining 20+ services (ActualBudget, Mealie, Jellyfin, etc.)
2026-01-12 17:46:43 +00:00
Claude bbaec6b86d Fix critical reconfigure bug - detect existing installations and skip reinstall
CRITICAL FIX: Script was reinstalling and reconfiguring services from scratch
when they were already installed, potentially breaking existing configurations.

1. **Detect Existing Installations:**
   - Check for existing docker-compose.yml before configuration
   - Show options: Skip / Reconfigure / Restart only
   - Default to Skip to preserve existing configs

2. **Skip/Reconfigure/Restart Options:**
   - Option 1: Skip (keep existing configuration)
   - Option 2: Reconfigure (backup existing, then reconfigure)
   - Option 3: Restart containers only (no reconfiguration)

3. **Automatic Backup on Reconfigure:**
   - Creates timestamped backup before any changes
   - Backup location: ~/docker/backups/YYYYMMDD-HHMMSS-servicename/
   - Full service directory backed up

4. **Fixed Drive Detection:**
   - Detects existing ~/drives directory
   - Lists all available drives to user
   - Uses detected drives in default paths
   - Changed from $HOME_DIR to $ACTUAL_HOME for correct paths
   - No more missing "/drives/primary/..." paths

5. **Drive Path Examples:**
   - Detects: ~/drives/storage1, ~/drives/backup, ~/drives/media
   - Shows: "Detected drives: storage1, backup, media"
   - Default becomes: ~/drives/storage1/photos/immich-uploads

Applied to: Immich (template for other services)

This fixes user issues:
- "I selected keep the items that were already installed, then it lead
  me to reinstall configure from scratch all those services"
- "It did not detect if the service was already in the Caddyfile"
- "it might have messed up what I already had"
- "There is no ~/drives...."
- "it should detect which drives are already in ~/drives and offer to
  use one of those"
2026-01-12 17:41:29 +00:00
Claude 671a59bf12 Add automatic Caddy configuration for services during installation
Implemented automatic Caddy reverse proxy configuration that runs
BEFORE each service is started, with backup, reload, and formatting.

1. **New configure_caddy_for_service() Function:**
   - Detects if Caddy is installed (skips if not)
   - Prompts user if they want to configure reverse proxy
   - Asks for domain/subdomain (e.g., photos.example.com)
   - Backs up Caddyfile with timestamp
   - Checks for existing configuration and offers to overwrite
   - Adds service block with security headers and fail2ban logging
   - Reloads Caddy configuration
   - Formats Caddyfile with `caddy fmt --overwrite`
   - Final reload after formatting
   - Shows final access URL (https://...)

2. **Configuration Sequence:**
   - Service docker-compose.yml created
   - Service .env configured
   - Caddy configuration added (if Caddy installed)
   - Caddy reloaded and formatted
   - Service containers started
   - All happens before `docker compose up -d`

3. **Integrated into Services:**
   - Immich (photos.example.com)
   - AudioBookshelf (audiobooks.example.com)
   - Emby (emby.example.com)
   - ActualBudget (budget.example.com)
   - Mealie (recipes.example.com)
   - Jellyfin (jellyfin.example.com)
   - Uptime Kuma (uptime.example.com)

4. **Caddy Configuration Includes:**
   - Automatic HTTPS via Let's Encrypt
   - Security headers (HSTS, X-Content-Type-Options, etc.)
   - JSON logging for fail2ban
   - Proper reverse_proxy to localhost:PORT

5. **Backup & Safety:**
   - Caddyfile backed up to: Caddyfile.backup.YYYYMMDD-HHMMSS
   - Existing configs detected and user can choose to overwrite
   - Reload errors show backup file path for restoration

6. **Commands Used:**
   - `docker exec caddy caddy reload --config /etc/caddy/Caddyfile`
   - `docker exec caddy caddy fmt --overwrite /etc/caddy/Caddyfile`

This addresses user request:
"new/reconfigured services are add to the Caddyfile as part of the
install/reconfigure before they are attempt to be brought up, as a
part of the install/reconfigure of the service? (With backup of
Caddyfile and docker exec -w /etc/caddy caddy caddy reload &&
docker exec -w /etc/caddy caddy caddy fmt --overwrite after each
addition to Caddyfile?)"
2026-01-12 17:08:11 +00:00
Claude 52a9617ffe Add uninstall functionality and improve existing server detection
Added comprehensive uninstall functionality to whiptail menu:

1. **Install/Uninstall Menu Choice:**
   - Added action menu: Install new services, Uninstall existing, or Cancel
   - Automatically detects existing services in ~/docker/

2. **Smart Service Detection:**
   - Scans for existing Docker services and marks them in the install menu
   - Install menu shows [*] for already-installed services
   - Helps users identify what's already running on their server

3. **Uninstall Functionality:**
   - Uninstall menu only shows services that are currently installed
   - All services selected by default for quick removal
   - Automatic backup before uninstall to ~/docker/backups/
   - Stops containers, removes directories, backs up data
   - Special handling for system packages (fail2ban)

4. **Improved Re-run Support:**
   - Script detects existing installations on startup
   - Can rerun on configured servers to add new services
   - Uninstall option allows cleanup of unwanted services
   - Backups ensure data safety during removals

Services Supported:
- All 24 Docker services (Immich, Keycloak, Caddy, etc.)
- System packages (fail2ban)
- Backups created with timestamp: YYYYMMDD-HHMMSS-servicename

Usage Examples:
- Fresh install: Select services to install
- Add services: Rerun script, existing services auto-selected
- Remove services: Choose "Uninstall", select what to remove
- Cleanup: All data backed up automatically

This addresses user request for:
- Ability to reinstall on current server
- Option to remove services from whiptail menu
- Better handling of existing installations
2026-01-12 14:36:34 +00:00
Claude 974b07f51e Fix duplicate prompts after whiptail menu selection
Applied WHIPTAIL_USED flag check to all 25 service prompts that appear
after the whiptail menu to prevent services from being prompted
individually when they weren't selected in the checkbox menu.

This fixes the issue where services like AudioBookshelf were being
prompted even when not selected in whiptail.

Services fixed:
- AudioBookshelf, Emby, ARM, FileBrowser, Magic Mirror
- ActualBudget, Keycloak, Caddy, fail2ban
- Lyrion Music Server, Mealie, Minecraft, Jellyfin, Frigate
- ddclient, ntfy, Uptime Kuma, wg-easy
- Traccar, Portainer, MeshCentral Server
- FindMyDevice, Frigate-Notify, Watchtower

Pattern applied:
  if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_SERVICE" ]; then
      # Show prompt
  fi

This ensures prompts only appear when whiptail was not used OR
the service variable is not yet set.
2026-01-12 14:08:41 +00:00
Claude 9bde91dfb9 Fix whiptail menu resetting variables and causing duplicate prompts
CRITICAL FIX:
The whiptail menu was OVERWRITING all service variables with "n",
which caused duplicate prompts and ignored user's earlier selections.

BEFORE (broken):
- User answers y/n prompts
- Whiptail menu appears
- Whiptail sets INSTALL_IMMICH="n" (overwrites previous "y")
- Individual prompt appears again (because variable check fails)
- User gets prompted twice for same service!

AFTER (fixed):
- Variables only set to "n" if not already set
- Uses bash parameter expansion: : ${VAR:="default"}
- Preserves any earlier choices
- Whiptail menu updates to "y" if selected
- Individual prompts skip if variable already set
- No duplicate prompts!

CHANGES:
Lines 2225-2249: Changed from direct assignment (VAR="n")
to conditional default (: ${VAR:="n"})

This preserves earlier choices while still allowing whiptail
to override them when services are selected.

SIDE EFFECT FIXED:
- Containers now start properly
- No more "containers won't come up" issue
- Proper dependency order maintained
2026-01-12 04:32:54 +00:00
Claude 9d1cbadce9 Fix SSH prompt and add automatic Caddy configuration for Keycloak
FIXES:
1. SSH key import now properly accepts "n" as answer
   - Added y/n prompt before asking for usernames
   - Clearer flow: "Import SSH keys?" → "Which service?"
   - No more confusion about entering "n" vs leaving blank

2. Automatic Caddy configuration for Keycloak
   - Detects if Caddy is installed or being installed
   - Offers to configure Caddy reverse proxy for Keycloak
   - Backs up Caddyfile before changes
   - Adds Keycloak configuration automatically
   - Reloads Caddy after adding configuration
   - Keycloak starts AFTER Caddy is configured
   - Prevents "container won't come up" issue

CADDY AUTO-CONFIGURATION:
When both Keycloak and Caddy are selected:
- Script asks: "Configure Caddy reverse proxy for Keycloak?"
- Prompts for domain (e.g., auth.yourdomain.com)
- Backs up existing Caddyfile
- Adds Keycloak block with:
  * JSON logging for fail2ban
  * Reverse proxy to localhost:8180
  * Security headers (HSTS, X-Frame-Options, etc.)
- Formats and reloads Caddy
- Confirms Keycloak will be available at domain

This ensures correct startup order: Caddy configured → Caddy reloaded → Keycloak starts
2026-01-12 04:30:58 +00:00
Claude 4c69294c65 Add comprehensive Keycloak setup guide and external service support
KEYCLOAK-SETUP-GUIDE.md:
Complete manual explaining Keycloak concepts, manual setup, and external services

WHAT'S A REALM:
- Isolated container for users/clients/config
- Like a "company" or "organization"
- master realm = admin only
- homelab realm = your actual users
- Fully isolated from each other

WHAT'S AN OAUTH2 CLIENT:
- Each service (ActualBudget, etc.) is a "client"
- Needs Client ID, Secret, and Redirect URIs
- Redirect URIs must match EXACTLY
- Guide explains the authentication flow

MANUAL SETUP INSTRUCTIONS:
- Step-by-step via web UI
- Create realm manually
- Create OAuth clients manually
- Configure redirect URIs
- Create users and set passwords
- Test the setup

EXTERNAL SERVICE SUPPORT (Pikapod, etc.):
Script now asks about setup type:
1. Local only (http://localhost)
2. Public domain (https://yourdomain.com)
3. Both local and public

For external services:
- Prompts for your public domain
- Warns that Keycloak MUST be accessible at https://auth.yourdomain.com
- Checks if Caddy/DNS are configured
- Asks for external service URL (e.g., Pikapod)
- Configures redirect URIs for all scenarios

REDIRECT URIS NOW INCLUDE:
- http://localhost:5006/* (local dev)
- https://budget.yourdomain.com/* (self-hosted)
- https://actualbudget-abc.pikapod.net/* (external)
- Multiple patterns for flexibility

SAVED CONFIG FILES UPDATED:
- Shows LOCAL DEVELOPMENT URLs
- Shows PRODUCTION URLs (if public domain set)
- Shows EXTERNAL SERVICE URLs (if external service set)
- Lists all configured redirect URIs
- Clear instructions for each scenario

CADDY CONFIGURATION GUIDE:
- How to configure DNS A/CNAME records
- Caddyfile example for Keycloak
- Security headers included
- Step-by-step setup for external access

RECONFIGURATION SUPPORT:
- Guide explains how to add realms manually
- Guide explains how to add clients manually
- CLI examples for adding realms/users/clients
- Can re-run script to configure additional realms

COMMON USE CASES:
1. All local services
2. Self-hosted with domain
3. Mixed (local + external like Pikapod)

Each use case explained with complete examples

TROUBLESHOOTING:
- Invalid redirect URI
- Client not found
- Invalid client secret
- External service can't reach Keycloak
- CORS/redirect failures
- Admin console login issues

With this update, users can:
 Understand what Keycloak is and how it works
 Configure it manually if they prefer
 Use it with external services like Pikapod
 Set up proper DNS/Caddy for production
 Troubleshoot common issues
 Add realms and clients later
2026-01-11 23:56:55 +00:00
Claude 29f49f0ec3 Add automated Keycloak initial configuration
Keycloak is now fully configured and ready to use immediately after installation!
No more manual realm/client setup required.

AUTOMATED SETUP:
After Keycloak starts, the script automatically:
1.  Waits for Keycloak to be fully ready (health check)
2.  Logs in using Keycloak Admin CLI (kcadm.sh)
3.  Creates a new realm (e.g., "homelab")
4.  Creates OAuth2/OIDC client for ActualBudget (if selected)
5.  Creates generic OAuth2 client template for other services
6.  Optionally creates an initial user
7.  Saves all OAuth credentials to text files
8.  Provides clear next steps

OAUTH2 CLIENT FOR ACTUALBUDGET:
- Client ID: actualbudget
- Auto-generated secure client secret
- Pre-configured redirect URIs for localhost and production
- Saved to: ~/docker/keycloak/actualbudget-oauth.txt
- Includes all URLs needed to configure ActualBudget

GENERIC OAUTH2 CLIENT:
- Client ID: generic-app
- Can be cloned for other services
- Saved to: ~/docker/keycloak/generic-oauth.txt
- Works as a template

INITIAL USER CREATION:
- Prompts for username, email, first name, last name, password
- User is immediately active and can log in
- Can be used for ActualBudget and other services right away

SAVED CONFIGURATION FILES:
~/docker/keycloak/actualbudget-oauth.txt - ActualBudget OAuth config
~/docker/keycloak/generic-oauth.txt - Generic OAuth template

PRODUCTION READY:
- Redirect URIs include both localhost and production domains
- Works with Caddy reverse proxy
- SSL/TLS enforced at proxy level
- Just update domain in configuration

USER EXPERIENCE:
Install Keycloak → Answer prompts → DONE!
- Realm created: "homelab" (or custom name)
- OAuth clients ready
- User created and can log in immediately
- Just go to http://localhost:8180/admin to manage

This eliminates the complex post-install Keycloak setup and makes it
immediately usable for ActualBudget and other services!
2026-01-11 23:41:32 +00:00
Claude 3ff80aee94 Add whiptail service selection menu for Docker applications
Users now get a nice checkbox menu to select which services to install,
instead of being prompted for each service one-by-one.

WHIPTAIL MENU:
- Displays all 24+ Docker services in a single checklist
- Use SPACE to select/deselect services
- Press ENTER to confirm and install selected services
- Falls back to individual prompts if whiptail not available

SERVICES IN MENU:
✓ Immich (Photo & Video Backup)
✓ AudioBookshelf (Audiobooks & Podcasts)
✓ Emby (Media Server)
✓ A.R.M. (Automatic Ripping Machine)
✓ FileBrowser (Web File Manager)
✓ Magic Mirror (Smart Mirror Display)
✓ ActualBudget (Personal Finance)
✓ Keycloak (Identity & Access Management)
✓ Caddy (Reverse Proxy with Auto-HTTPS)
✓ fail2ban (Intrusion Prevention)
✓ Lyrion (Music Streaming)
✓ Mealie (Recipe Manager)
✓ Minecraft (Game Server)
✓ Jellyfin (Free Media Server)
✓ Frigate (AI NVR for Cameras)
✓ Ntfy (Push Notifications)
✓ Uptime Kuma (Service Monitoring)
✓ WG-Easy (WireGuard VPN)
✓ Traccar (GPS Tracking)
✓ Portainer (Docker Web UI)
✓ MeshCentral (Remote Management)
✓ FindMyDevice (Device Tracking)
✓ Frigate-Notify (Frigate Notifications)
✓ Watchtower (Auto Container Updates)

WORKFLOW:
1. Run ubuntu-post-install.sh
2. Get whiptail menu for service selection
3. Select services with SPACE
4. Press ENTER to install
5. Script installs only selected services

FALLBACK:
- If whiptail not available, uses traditional prompts
- Prompts only appear if service wasn't selected in menu
- Fully backwards compatible

This dramatically improves UX for installing multiple services!
2026-01-11 23:32:45 +00:00
Claude 6d66441a69 Integrate Caddy and fail2ban into main ubuntu-post-install.sh script
Users can now install and configure everything by simply running the main script.
Re-running the script allows adding new services to existing installations.

NEW SERVICES IN MAIN SCRIPT:

CADDY WEB SERVER:
- Automatic HTTPS with Let's Encrypt
- Reverse proxy for all services
- Creates example Caddyfile with ActualBudget and Keycloak configs
- Detects existing installations (asks before reconfiguring)
- Automatically backs up existing Caddyfile before changes
- Pre-configured with /var/log/caddy volume for fail2ban integration
- Includes HTTP/3 support

FAIL2BAN INTRUSION PREVENTION:
- Automated installation via apt
- Creates Caddy filter for JSON logs (401, 403, 429 status codes)
- Creates Caddy jail with configurable settings
- Automatically creates /var/log/caddy directory
- Tests configuration before restart
- Verifies jail is active after restart
- Shows status and useful commands

FEATURES:
 Detects if services already exist (won't overwrite)
 Backs up configurations before changes
 Interactive prompts for all settings
 Validates configurations before applying
 Can be re-run to add services to existing setup
 Works alongside existing services
 Follows same pattern as ActualBudget/Keycloak

WORKFLOW:
1. Run ubuntu-post-install.sh
2. Select services to install (ActualBudget, Keycloak, Caddy, fail2ban, etc.)
3. Script handles everything automatically
4. Re-run anytime to add more services

The caddy-setup-helper.sh remains available as a standalone tool for
advanced configuration, but the main script is now the primary method.
2026-01-11 23:04:24 +00:00
Claude 5dbb27ee8b Fix Magic Mirror npm setup and add ActualBudget, Keycloak, Caddy/fail2ban support
FIXES:
- Fix Magic Mirror npm install to run inside Docker container instead of on host
- npm (Node Package Manager) commands now execute inside the MagicMirror container
  where Node.js is installed, preventing errors on hosts without Node.js

NEW SERVICES:
- Add ActualBudget: Open-source personal finance management with bank sync (SimpleFIN)
- Add Keycloak: Identity and Access Management (SSO, OAuth2, SAML, MFA)
- Both services integrated into main installation script and available as standalone
  docker-compose files for existing servers

CADDY & FAIL2BAN:
- Add caddy-setup-helper.sh: Interactive script to configure Caddy and fail2ban
  * Detects existing Caddy installation
  * Automatically backs up Caddyfile with timestamp
  * Checks for fail2ban support
  * Provides service integration examples
- Add fail2ban filter and jail configurations for Caddy protection
- Add comprehensive setup guide (CADDY-FAIL2BAN-SETUP.md)

DOCUMENTATION:
- Detailed deployment instructions for each service
- Reverse proxy configuration examples
- Security best practices and headers
- Backup/restore procedures
- Troubleshooting guides

This update enables secure deployment of new services on existing servers with
proper Caddy reverse proxy integration and fail2ban protection against attacks.
2026-01-11 21:43:52 +00:00
Claude d84a1be5d5 Add container auto-start, UFW ports, Magic Mirror config/modules
- Add interactive "Start now?" prompts to all Docker containers
- Add UFW firewall port opening for Docker services when enabled
- Add Magic Mirror config copy option with custom.css support
- Add automatic detection and download of third-party MMM-* modules
- Add npm install for Magic Mirror module dependencies
2026-01-08 13:08:11 +00:00
Claude 47f3e9c0a6 Major improvements: drive setup, Immich config, container start
Drive Setup (runs at script start):
- New setup_drives() function runs before other installations
- Auto-detects unpartitioned drives, offers to format
- Creates ~/drives/ mount points
- Adds to fstab and runs mount -a
- Partitioning/formatting for new drives without partition tables

Immich Improvements:
- Separate UPLOAD_LOCATION from EXTERNAL_LIBRARY (different paths)
- Upload: ~/drives/primary/photos/immich-uploads (new photos)
- External: ~/drives/primary/photos (existing photos, read-only)
- Warns if both paths are the same
- Added immich-cli instructions for uploading old photos with correct EXIF dates
- Container auto-start option after install

Container Management:
- Added "Start now?" prompt for Immich after install
2026-01-08 12:51:22 +00:00
Claude b6dc3e6d18 Add interactive volume path updates during migration
Step 6 now scans docker-compose files for volume mounts:
- Detects absolute paths that don't exist on new system
- Shows old path and suggests ~/drives/primary/{folder}
- User can: accept suggestion, skip, or enter custom path
- Updates compose file with new path
- Creates directory if needed

Example:
  Container: immich
  Old path:  /home/user1/media/driveb
  Suggested: ~/drives/primary/driveb
  [Enter] Accept | [S] Skip | [path] Custom
2026-01-06 23:32:57 +00:00
Claude ef245a6ee4 Add migration options: copy, symlink, or use in-place
When source is on mounted drive (/mnt/*, ~/drives/*, /media/*):
- [C] Copy - Copy to ~/docker (for old OS drive migration)
- [S] Symlink - Create ~/docker → source (for data drive)
- [U] Use in-place - Use source directly, no copy

This handles both scenarios:
- Old OS drive mounted temporarily → Copy
- Data drive you'll keep using → Symlink or use in-place
2026-01-06 23:29:00 +00:00
Claude 7f03addd9c Improve migration to detect Docker on mounted drives
- Auto-detect ~/drives/*/docker, /mnt/*/docker, /media/*/docker
- Show numbered list for easy selection (type "1" to select first)
- Still accepts any custom path
- Shows common locations as examples if nothing auto-detected
2026-01-06 22:56:45 +00:00
Claude fef7bac6aa Add migration mode for importing existing Docker containers
- New [M] Migration option at script start
- Auto-detects Docker directories (/var/docker, /opt/docker, ~/docker)
- Scans for docker-compose.yml files and lists containers with sizes
- Whiptail checklist for selecting containers to migrate
- Option to stop containers before copy (clean database state)
- Preserves versions - no unwanted upgrades during migration
- After migration, offers to install additional services
- Three modes now: Normal install, Migration, Disaster Recovery
2026-01-06 22:49:36 +00:00
Claude fb6dbdfbcb Add Kopia to disaster recovery for ongoing backups
- Install Kopia in Step 1 (core utilities)
- Add Step 9: Reconnect Kopia repository after restore
- Backups now work immediately after disaster recovery
- Update README with 9-step recovery process
2026-01-02 03:41:04 +00:00
Claude 0038a9a938 Add Immich photo library config, Watchtower, and backup docs
- Immich: Ask for photo storage location (default ~/drives/primary/photos)
- Immich: External library support for existing photos (read-only)
- Immich: Storage template guidance for yyyy/mm organization
- Add Watchtower container with notify-only mode (safe for apps with DB migrations)
- Document what Docker data lives where and what gets backed up
- Update README with v2.9 changelog
2026-01-02 03:07:31 +00:00
Claude d7caddb64f Add MeshCentral Server and improve disaster recovery
- Add MeshCentral Server as Docker app (ports 4430, 4433)
- Recovery mode now installs core utilities first (openssh-server, git, etc.)
- Add whiptail checklist for selecting which services to restore
- Users can now choose some/none/all services instead of all-or-nothing
- Update README with v2.8 changelog and MeshCentral port
2026-01-01 23:50:05 +00:00
Claude c9d3276d36 Add disaster recovery mode for one-click restore from backup
New features:
- --restore flag for disaster recovery mode
- Interactive mode selector at script start (N=Normal, R=Recovery)
- Full disaster recovery flow:
  1. Show available drives, auto-mount if device path given
  2. Auto-detect Kopia repository
  3. Try to find password in backed-up .env, or prompt
  4. Install Docker if needed
  5. List available snapshots, let user choose or use 'latest'
  6. Restore snapshot to temp location
  7. Detect all docker-compose.yml files = services to restore
  8. Copy services to ~/docker/
  9. Optionally start all containers
  10. Cleanup temp files

Removed old buried import section that only showed manual instructions.

Documentation:
- Added Disaster Recovery section to README
- Added --restore to command-line options
- Documented what gets restored and requirements
- Added v2.7 changelog entry
2026-01-01 22:24:44 +00:00
Claude 1f92245faf Make Docker installs resilient: install first, config later
Changes the installation pattern for Docker apps to be more robust:
- Install docker-compose.yml FIRST (always succeeds)
- THEN try configuration with prompts
- Use sensible defaults if prompts fail
- Continue to next app even if current config fails
- Added || true and 2>/dev/null to prevent script stops

Updated apps: Frigate, Frigate-Notify, Caddy, ddclient

Config templates now include clear warnings:
- "YOU MUST EDIT THIS FILE" for required configs
- "YOU MAY NEED TO EDIT THIS FILE" for optional configs
- Links to documentation

This ensures the script completes even with complex interdependent
services that may need manual configuration after install.
2026-01-01 22:07:48 +00:00
Claude 4273809f26 Add FindMyDevice, Frigate-Notify, and improve Caddy setup
New Docker applications:
- FindMyDevice (FMD) server for self-hosted Android device tracking
- Frigate-Notify for push notifications on Frigate AI detections

Caddy improvements:
- Interactive domain configuration during setup
- Comprehensive Caddyfile template with all services (commented)
- Clear instructions for caddy_net Docker network usage
- .env file with MY_DOMAIN variable

Frigate-Notify features:
- Auto-detects if Frigate and ntfy are installed
- Interactive setup for Frigate URL and ntfy topic
- WebAPI mode by default (polls Frigate every 30s)
- Config template with labels, zones, quiet hours
- Warns about public ntfy.sh privacy implications
2026-01-01 21:24:59 +00:00
Claude 4d04de25b3 Add additional Docker apps and Kopia container backup
New Docker applications:
- Jellyfin (free media server with hardware acceleration)
- Frigate NVR (AI-powered object detection)
- Caddy (reverse proxy with automatic HTTPS)
- ddclient (dynamic DNS updater)
- ntfy (self-hosted push notifications)
- Uptime Kuma (service uptime monitoring)
- wg-easy (WireGuard VPN with web UI)
- Traccar (GPS tracking server)
- Portainer (Docker management UI)

Container backup system:
- Kopia backup for all Docker container data
- Backup script for configs, databases, app state
- Restore script for disaster recovery
- Backs up Immich memories, Emby metadata, Minecraft worlds, etc.

All apps use docker-compose in ~/docker/{appname}/ with storage on
primary drive where appropriate.
2026-01-01 21:09:09 +00:00
Claude edd870703b Add self-hosted Docker applications section
New applications (all docker-compose based in ~/docker/{appname}/):
- Immich: Photo & video backup (port 2283)
- Audiobookshelf: Audiobook & podcast server (port 13378)
- Emby: Media server (port 8096)
- A.R.M.: Automatic DVD/Blu-ray/CD ripping (port 8080)
- Filebrowser: Web file manager (port 8085)
- Magic Mirror: Smart dashboard, up to 3 instances (ports 8081-8083)
- Lyrion Music Server: Music streaming (port 9000)
- Mealie: Recipe manager (port 9925)
- Minecraft: Fabric server with RAM limits (port 25565)
- linux-to-sync: Private repo with SSH/token auth

Features:
- Each app prompts individually (y/n)
- Configurable paths for media/audiobooks/music
- Auto-generates .env files and docker-compose.yml
- Random passwords for databases (Immich)
- Magic Mirror supports multiple instances with separate configs
2026-01-01 12:52:59 +00:00
Claude 2200fa1483 Add instructions for additional Samba shares after setup
After configuring the Primary share, the script now displays:
- How to edit /etc/samba/smb.conf with nano
- Example share configuration block
- How to restart smbd/nmbd services
- How to verify with testparm
2025-12-30 13:42:08 +00:00
Claude eef004abf4 Add WireGuard, Tailscale, TeamViewer, and MeshCentral options
VPN additions:
- WireGuard VPN with key generation and config setup
- Tailscale mesh VPN with Tailscale SSH documentation

Remote desktop additions:
- TeamViewer installation and setup
- MeshCentral agent with server URL prompt

Other changes:
- Enhanced NetBird documentation on SSH key management
- Detection functions and status display for all new tools
- Updated README with VPN Setup and Remote Desktop Setup sections
2025-12-29 00:48:55 +00:00
Claude bc357d2efd Overhaul backup system: rsync for local, rclone for encrypted cloud
Major changes:
- Local backup uses rsync exclusively with support for 1-4 drives
- Drive names are now customizable (default: primary, backup1, etc.)
- Added separate cloud backup option with rclone + encryption
- Guided setup for Google Drive and OneDrive with encryption
- rclone.conf auto-backed up to all local drives
- Added off-site backup guidance (Signal, Box.com, password managers)
- Removed old rsync/rclone choice and full/split modes

Documentation updates:
- Explain why fail2ban provides no benefit with key-only SSH
- Explain why rsync instead of RAID
- Document rclone.conf decryption and restore process
- Update all backup-related sections for new structure
2025-12-28 13:17:59 +00:00
Claude 44fda519f0 Add QoL improvements: dry-run, unattended, logging, fail2ban, UFW
- Add --dry-run flag to preview installations without changes
- Add --unattended flag for automated/scripted installs with defaults
- Add logging to /var/log/post-install.log
- Add fail2ban protection when SSH password auth is enabled
- Add UFW firewall configuration option
- Update all prompts for unattended mode support
- Update README with new features and troubleshooting
2025-12-28 05:23:49 +00:00
Claude 1226bff8c8 Remove vim from installed utilities 2025-12-28 03:06:06 +00:00
Claude 61ca1aa69f Make script rerunnable with rsync/rclone and full/split backup options
- Add software detection for Docker, Samba, NetBird, RustDesk, rclone, rsync
- Script shows current system status and offers to reinstall/reconfigure
- All components now optional with y/n prompts
- Add backup tool selection: rsync (recommended for local) vs rclone (cloud)
- Add backup mode selection: full (one drive) vs split (two drives)
- Generate appropriate backup script based on tool + mode selection
- Update summary section to only show installed components
- Update README with new features, rsync vs rclone comparison, backup modes
2025-12-28 02:37:44 +00:00
Claude 0a88f8ae1f Make Samba and rclone backup system optional
- Add interactive prompt before Samba installation
- Add interactive prompt before rclone backup system setup
- Update summary section to conditionally display installed components
- Fix indentation in backup script section
2025-12-28 00:18:18 +00:00
Claude 893d13af53 Add Samba installation and rename readme to README.md
- Add Samba file sharing installation and configuration to match
  README documentation (was documented but not implemented)
- Rename ubuntu-readme.md to README.md for standard GitHub display
- Update download instructions with actual GitHub repository URLs
2025-12-28 00:11:29 +00:00
outis1one 8b531909d8 Add files via upload 2025-12-27 19:05:54 -05:00