#!/bin/bash # Great Lakes Ice Report Deployment Script for Debian 12 ARM64 # Run this script on your server: drone@91.99.139.235 set -e echo "🚀 Starting Great Lakes Ice Report deployment..." # Update system echo "📦 Updating system packages..." sudo apt update && sudo apt upgrade -y # Install Node.js (ARM64 compatible) echo "📦 Installing Node.js..." curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt install -y nodejs build-essential # Install Go (required for xcaddy) echo "📦 Installing Go..." wget -q https://go.dev/dl/go1.21.5.linux-arm64.tar.gz sudo rm -rf /usr/local/go sudo tar -C /usr/local -xzf go1.21.5.linux-arm64.tar.gz export PATH=$PATH:/usr/local/go/bin echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc # Install xcaddy to build Caddy with plugins echo "📦 Installing xcaddy..." go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest export PATH=$PATH:$(go env GOPATH)/bin # Build Caddy with rate limiting plugin echo "🔧 Building Caddy with rate limiting plugin..." xcaddy build --with github.com/mholt/caddy-ratelimit # Install the custom Caddy binary echo "📦 Installing custom Caddy..." sudo mv caddy /usr/local/bin/caddy sudo chmod +x /usr/local/bin/caddy # Create Caddy user and directories sudo groupadd --system caddy sudo useradd --system --gid caddy --create-home --home-dir /var/lib/caddy --shell /usr/sbin/nologin caddy sudo mkdir -p /etc/caddy /var/log/caddy sudo chown -R caddy:caddy /var/log/caddy # Create systemd service for custom Caddy echo "⚙️ Creating Caddy systemd service..." sudo tee /etc/systemd/system/caddy.service > /dev/null < /dev/null # Download Caddyfile template echo "📥 Downloading Caddy configuration..." curl -sSL "$S3_BASE_URL/Caddyfile" | sudo tee /etc/caddy/Caddyfile.template > /dev/null echo "✅ Server setup complete!" echo "" echo "🚀 Next steps to deploy Great Lakes Ice Report:" echo "" echo "1. Clone your repository:" echo " git clone git@github.com:deco/great-lakes-ice-report.git /opt/great-lakes-ice-report" echo "" echo "2. Set up the application:" echo " cd /opt/great-lakes-ice-report" echo " npm install" echo " cp .env.example .env" echo " nano .env # Add your MapBox token and admin password" echo "" echo "3. Configure domain in Caddyfile:" echo " sudo nano /etc/caddy/Caddyfile.template" echo " # Replace 'yourdomain.com' with your actual domain" echo " sudo mv /etc/caddy/Caddyfile.template /etc/caddy/Caddyfile" echo "" echo "4. Set permissions:" echo " sudo chown -R great-lakes-ice-report:great-lakes-ice-report /opt/great-lakes-ice-report" echo " sudo chmod 660 /opt/great-lakes-ice-report/.env" echo "" echo "5. Start services:" echo " sudo systemctl daemon-reload" echo " sudo systemctl enable great-lakes-ice-report caddy" echo " sudo systemctl start great-lakes-ice-report caddy" echo "" echo "6. Check status:" echo " sudo systemctl status great-lakes-ice-report" echo " sudo systemctl status caddy" echo "" echo "🌐 Your Great Lakes Ice Report app will be available at: https://ice.puremichigan.lol"