#!/usr/bin/env bash # One-time droplet setup. Copy this script and Caddyfile.tmpl to the droplet # and run ON the droplet as root: # bash setup-droplet.sh '__DOMAIN__, __SLUG__..sslip.io' # The argument is the Caddy site address line: one name, or several # separated by commas. Every name must already resolve to this droplet. # __NAME__ is a static site: Caddy serves the built files and terminates # TLS. There is no application process to install or supervise. set -euo pipefail HOST="${1:?usage: setup-droplet.sh }" apt-get update -q apt-get install -qy curl rsync # Caddy (auto-HTTPS) apt-get install -qy debian-keyring debian-archive-keyring apt-transport-https curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' \ | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' \ | tee /etc/apt/sources.list.d/caddy-stable.list apt-get update -q && apt-get install -qy caddy # Site directory, readable by Caddy. mkdir -p /opt/__SLUG__/build chown -R root:caddy /opt/__SLUG__ chmod -R g+rX /opt/__SLUG__ # Caddy: the site and the game server's paths, from the template beside this script. sed "s|__HOST__|$HOST|" "$(dirname "$0")/Caddyfile.tmpl" > /etc/caddy/Caddyfile caddy validate --config /etc/caddy/Caddyfile # Validation as root touches the access log; Caddy runs as caddy and must own it. chown -R caddy:caddy /var/lib/caddy systemctl restart caddy # Firewall: ssh + web only. ufw allow OpenSSH ufw allow 80/tcp ufw allow 443/tcp ufw --force enable echo "droplet ready: now run deploy/deploy.sh from your machine"