#!/bin/bash # Mana Mac Mini Auto-Start Setup # Run this ONCE on the Mac Mini to configure automatic startup on boot # # This sets up: # 1. Cloudflared tunnel (via launchd) # 2. Docker containers (via launchd, after Docker starts) # 3. Periodic health checks (every 5 minutes) set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" USER_HOME="$HOME" LAUNCH_AGENTS_DIR="$USER_HOME/Library/LaunchAgents" echo "=== Mana Mac Mini Auto-Start Setup ===" echo "" echo "Project root: $PROJECT_ROOT" echo "User: $(whoami)" echo "" # Create LaunchAgents directory mkdir -p "$LAUNCH_AGENTS_DIR" # Make scripts executable chmod +x "$SCRIPT_DIR/startup.sh" chmod +x "$SCRIPT_DIR/health-check.sh" chmod +x "$SCRIPT_DIR/setup-cloudflared-service.sh" # ============================================ # 1. Cloudflared Tunnel Service # ============================================ echo "=== Setting up Cloudflared Service ===" TUNNEL_ID="bb0ea86d-8253-4a54-838b-107bb7945be9" CLOUDFLARED_CONFIG="$PROJECT_ROOT/cloudflared-config.yml" CREDENTIALS_FILE="$USER_HOME/.cloudflared/${TUNNEL_ID}.json" # Check if credentials exist if [ ! -f "$CREDENTIALS_FILE" ]; then echo "" echo "WARNING: Cloudflare credentials not found!" echo "Run these commands first:" echo " cloudflared tunnel login" echo " cloudflared tunnel create mana-server" echo "" echo "Then run this script again." echo "" else # Create cloudflared plist CLOUDFLARED_PLIST="$LAUNCH_AGENTS_DIR/com.cloudflare.cloudflared.plist" cat > "$CLOUDFLARED_PLIST" << EOF Label com.cloudflare.cloudflared ProgramArguments /opt/homebrew/bin/cloudflared tunnel --config ${CLOUDFLARED_CONFIG} run RunAtLoad KeepAlive StandardOutPath /tmp/cloudflared.log StandardErrorPath /tmp/cloudflared.error.log EOF echo "Created: $CLOUDFLARED_PLIST" # Load cloudflared service launchctl unload "$CLOUDFLARED_PLIST" 2>/dev/null || true launchctl load "$CLOUDFLARED_PLIST" echo "Cloudflared service loaded" fi # ============================================ # 2. Mana Docker Startup Service # ============================================ echo "" echo "=== Setting up Docker Startup Service ===" DOCKER_PLIST="$LAUNCH_AGENTS_DIR/com.mana.docker-startup.plist" cat > "$DOCKER_PLIST" << EOF Label com.mana.docker-startup ProgramArguments /bin/bash ${SCRIPT_DIR}/startup.sh RunAtLoad StartInterval 0 StandardOutPath /tmp/mana-startup.log StandardErrorPath /tmp/mana-startup.error.log EnvironmentVariables PATH /opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin EOF echo "Created: $DOCKER_PLIST" # Load docker startup service launchctl unload "$DOCKER_PLIST" 2>/dev/null || true launchctl load "$DOCKER_PLIST" echo "Docker startup service loaded" # ============================================ # 3. Health Check Service (every 5 minutes) # ============================================ echo "" echo "=== Setting up Health Check Service ===" HEALTH_PLIST="$LAUNCH_AGENTS_DIR/com.mana.health-check.plist" cat > "$HEALTH_PLIST" << EOF Label com.mana.health-check ProgramArguments /bin/bash ${SCRIPT_DIR}/health-check.sh StartInterval 300 StandardOutPath /tmp/mana-health.log StandardErrorPath /tmp/mana-health.error.log EnvironmentVariables PATH /opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin EOF echo "Created: $HEALTH_PLIST" # Load health check service launchctl unload "$HEALTH_PLIST" 2>/dev/null || true launchctl load "$HEALTH_PLIST" echo "Health check service loaded (runs every 5 minutes)" # ============================================ # Summary # ============================================ echo "" echo "==========================================" echo " Auto-Start Setup Complete!" echo "==========================================" echo "" echo "Services configured:" echo " 1. Cloudflared tunnel (starts on login)" echo " 2. Docker containers (starts on login)" echo " 3. Health checks (every 5 minutes)" echo "" echo "Log files:" echo " /tmp/cloudflared.log" echo " /tmp/mana-startup.log" echo " /tmp/mana-health.log" echo "" echo "Manual commands:" echo " Check status: launchctl list | grep -E 'cloudflare|mana'" echo " View logs: tail -f /tmp/mana-startup.log" echo " Health check: $SCRIPT_DIR/health-check.sh" echo " Restart docker: launchctl kickstart -k gui/\$(id -u)/com.mana.docker-startup" echo "" echo "IMPORTANT: Make sure Docker Desktop is set to start on login!" echo " Docker Desktop > Settings > General > 'Start Docker Desktop when you sign in'" echo "" # Optional: Configure notifications echo "Optional: To enable push notifications on failures, set:" echo " export NTFY_TOPIC=your-topic-name" echo " in your .zshrc or .bashrc" echo ""