Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
42 lines
1.6 KiB
Bash
Executable File
42 lines
1.6 KiB
Bash
Executable File
#!/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__.<droplet-ip>.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 <hostname>}"
|
|
|
|
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 <ip> from your machine"
|