New deployments/ergo/: the Ergo IRC server behind Caddy for Let's Encrypt TLS and the IRC-over-WebSocket endpoint. Docker rather than a native OpenRC/systemd service, because Alpine's apk ergo trails upstream (3.24 ships 2.18.0 against a 2.19.1 security release) and Debian/Alma package it at all -- so native would mean three install paths plus a per-distro ACME client. Both containers run with network_mode: host. IRC bans, throttling and cloaking key on the client's address, and Docker's userland proxy would hide every IPv6 client behind the bridge gateway; host mode also makes the repo's INPUT firewall genuinely govern 80/443/6697. Caddy reaches Ergo over loopback, which is what lets Ergo honour X-Forwarded-For (proxy-allowed-from defaults to localhost) and mark web sessions secure. - deploy.sh generates ircd.yaml ONCE from the pulled image's own default.yaml (version-matched), rewriting the listeners/websockets blocks wholesale rather than patching lines, then asserts hard post-conditions and validates with `ergo run --smoke` in a throwaway container before anything starts. - update.sh: pinned vX.Y.Z tags, GHSA + "### Security" release-note policies, pre-flight against the new image, user NOTICE + grace, stop-consistent DB snapshot, health check (IRC-level, not a bare TCP connect) and rollback that restores the DB only when the schema actually moved. Compatibility-break releases are held for review. certsync copies Caddy's cert pairwise-atomically and verifies the fingerprint served on 6697 after the rehash. - ergoctl: status/users/logs, validated edit+rehash, oper add/passwd/rm, moderation, backup/restore, cert and update passthrough. Talks IRC to the loopback listener over bash /dev/tcp and strips control characters from replies. - Ergo runs as a non-root system user, read-only rootfs, all caps dropped; Caddy keeps only NET_BIND_SERVICE, with admin API and HTTP/3 off. Reviewed adversarially across six lenses; 20 confirmed findings fixed, notably a dead SIGHUP fallback (`rc=$?` after an `if` is always 0), several `set -e` aborts from non-total pipelines, a release-list cache that only ever populated in a subshell, and re-runs that used shell defaults instead of the deployed .env. Verified locally: bash -n, LF endings, the ircd.yaml render against the real 2.19.1 template in both PLAINTEXT modes, the yaml/oper/version/env helpers, and the IRC client against a fake server (registration, oper, rehash success and 400-failure, control-character stripping, server-down paths). Not yet exercised on a Docker host: the containers themselves, ACME issuance and cert sync. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1085 lines
67 KiB
Bash
1085 lines
67 KiB
Bash
#!/usr/bin/env bash
|
|
#
|
|
# deploy.sh -- deploy Ergo (IRC server) behind Caddy (Let's Encrypt) on Alpine,
|
|
# Debian or Alma. Single-node; runs as root.
|
|
#
|
|
# What this does:
|
|
# 1. Installs docker + compose (and openssl/jq/curl) if missing; creates the
|
|
# `ergo` system user the container runs as.
|
|
# 2. Lays down the stack in $STACK_DIR: docker-compose.yml, caddy/etc/Caddyfile,
|
|
# update.sh, ergoctl (+ /usr/local/bin/ergoctl wrapper), ergolib.sh.
|
|
# 3. Seeds .env on first run, pinning ERGO_TAG to the newest release.
|
|
# 4. Generates ircd/ircd.yaml ONCE from the pulled image's own default config
|
|
# (server name, network name, listeners, websocket origin, admin oper with a
|
|
# random password saved to secrets/admin.pass) and validates it with a
|
|
# throwaway `ergo run --smoke` before anything starts. Never rewritten.
|
|
# 5. Opens 80/443/6697 (+6667 with PLAINTEXT=1) on the host firewall. Both
|
|
# containers use host networking, so this firewall really applies.
|
|
# 6. Pulls images, validates the Caddyfile, brings the stack up, waits for
|
|
# health, copies Caddy's Let's Encrypt cert into ircd/ and rehashes Ergo.
|
|
# 7. Schedules update.sh: certsync every 15 min, update check daily.
|
|
#
|
|
# Idempotent: re-run to apply compose/Caddyfile changes or pull images. It never
|
|
# touches ircd/ircd.yaml, secrets/, caddy/etc/conf.d/ or .env after the first run.
|
|
#
|
|
# Self-contained: docker-compose.yml, Caddyfile, conf.d-readme.caddy, ergo.motd,
|
|
# .env.example, ergolib.sh, update.sh and ergoctl are embedded as a base64
|
|
# tar.gz at the bottom of this file. Rebuild with build.sh after editing them.
|
|
#
|
|
# Usage:
|
|
# bash deploy.sh # interactive prompts
|
|
# ERGO_DOMAIN=irc.example.com ACME_EMAIL=me@x.com NETWORK_NAME=MyNet \
|
|
# SKIP_PROMPTS=1 bash deploy.sh # non-interactive
|
|
# PLAINTEXT=1 bash deploy.sh # FIRST deploy only: also serve plaintext
|
|
# # :6667 publicly (+STS). Fixed thereafter.
|
|
# ERGO_TAG=v2.19.1 bash deploy.sh # pin a specific release
|
|
# UPDATE_POLICY=security bash deploy.sh # also latest | off
|
|
# ERGO_AUTOUPDATE=0 bash deploy.sh # install update.sh but don't schedule the
|
|
# # daily update (certsync is still scheduled)
|
|
# CERT_WAIT=0 bash deploy.sh # don't wait for the first LE cert
|
|
# SKIP_DOCKER_INSTALL=1 bash deploy.sh
|
|
|
|
set -euo pipefail
|
|
|
|
: "${STACK_DIR:=/srv/ergo}"
|
|
: "${SKIP_DOCKER_INSTALL:=0}"
|
|
: "${FORCE:=0}"
|
|
: "${SKIP_PROMPTS:=0}"
|
|
[[ "$SKIP_PROMPTS" == "1" ]] && FORCE=1
|
|
: "${ERGO_DOMAIN:=}"
|
|
: "${ACME_EMAIL:=}"
|
|
: "${NETWORK_NAME:=}"
|
|
: "${ERGO_IMAGE:=ghcr.io/ergochat/ergo}"
|
|
: "${ERGO_TAG:=}" # blank = pin the newest release
|
|
# Remember which settings the caller actually passed, BEFORE the defaults below
|
|
# hide that. On a re-run the rest come from the existing .env instead, so a
|
|
# plain `bash deploy.sh` never silently reverts a deployed stack's settings.
|
|
# (`|| true` on the trailing `&&`s below: a false test makes the whole list
|
|
# return 1, which aborts the script under `set -e` if it ever ends a block.)
|
|
EXPLICIT=""
|
|
for _k in ERGO_TAG PLAINTEXT UPDATE_POLICY FORCE_UPDATE UPDATE_GRACE CADDY_AUTOUPDATE CADDY_TAG; do
|
|
[[ -n "${!_k:-}" ]] && EXPLICIT="${EXPLICIT} ${_k}" || true
|
|
done
|
|
: "${PLAINTEXT:=0}"
|
|
: "${UPDATE_POLICY:=latest}"
|
|
: "${FORCE_UPDATE:=0}"
|
|
: "${UPDATE_GRACE:=60}"
|
|
: "${CADDY_AUTOUPDATE:=0}"
|
|
: "${CADDY_TAG:=2-alpine}"
|
|
: "${ERGO_AUTOUPDATE:=1}" # 0 = install update.sh but don't schedule the daily update
|
|
: "${CERT_WAIT:=180}" # seconds to wait for Caddy's first Let's Encrypt cert
|
|
|
|
log() { printf '\033[1;32m[+]\033[0m %s\n' "$*"; }
|
|
warn() { printf '\033[1;33m[!]\033[0m %s\n' "$*" >&2; }
|
|
die() { printf '\033[1;31m[x]\033[0m %s\n' "$*" >&2; exit 1; }
|
|
|
|
[[ $EUID -eq 0 ]] || die "Run as root."
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Extract the embedded archive; ergolib.sh (shared helpers) comes from it.
|
|
# ---------------------------------------------------------------------------
|
|
SCRIPT_DIR=$(mktemp -d -t ergo-deploy.XXXXXX)
|
|
trap 'rm -rf "$SCRIPT_DIR"' EXIT
|
|
|
|
extract_archive() {
|
|
grep -a -A 9999999 '^__ARCHIVE_BELOW__$' "$0" \
|
|
| tail -n +2 \
|
|
| base64 -d \
|
|
| tar -xz -C "$SCRIPT_DIR"
|
|
}
|
|
|
|
if grep -q -a '^__ARCHIVE_BELOW__$' "$0"; then
|
|
log "Extracting embedded deployment files..."
|
|
extract_archive
|
|
else
|
|
die "No embedded archive found. Run build.sh to embed deployment files."
|
|
fi
|
|
|
|
EMBEDDED=(docker-compose.yml Caddyfile conf.d-readme.caddy ergo.motd .env.example ergolib.sh update.sh ergoctl)
|
|
for f in "${EMBEDDED[@]}"; do
|
|
[[ -f "$SCRIPT_DIR/$f" ]] || die "Embedded archive missing $f"
|
|
done
|
|
|
|
# shellcheck source=ergolib.sh
|
|
. "$SCRIPT_DIR/ergolib.sh"
|
|
ergo_set_paths
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Host packages + Docker (deploy-only helpers; ergolib has the rest)
|
|
# ---------------------------------------------------------------------------
|
|
pkg_install() { # best-effort install across the three families
|
|
case "$(osfam)" in
|
|
alpine) apk add -q "$@" || true ;;
|
|
debian) DEBIAN_FRONTEND=noninteractive apt-get install -y -qq "$@" || true ;;
|
|
rhel) dnf install -y -q "$@" || true ;;
|
|
esac
|
|
}
|
|
|
|
install_docker() {
|
|
if command -v docker >/dev/null 2>&1; then
|
|
log "Docker already installed: $(docker --version)"
|
|
else
|
|
log "Installing Docker (OS: $(osfam))..."
|
|
case "$(osfam)" in
|
|
alpine) apk add -q docker docker-cli-compose openrc ;;
|
|
debian|rhel) command -v curl >/dev/null 2>&1 || pkg_install curl
|
|
curl -fsSL https://get.docker.com | sh ;;
|
|
*) die "Unsupported OS for auto Docker install. Set SKIP_DOCKER_INSTALL=1 and install Docker yourself." ;;
|
|
esac
|
|
fi
|
|
if command -v rc-update >/dev/null 2>&1; then
|
|
rc-update add docker default >/dev/null 2>&1 || true
|
|
rc-service docker status >/dev/null 2>&1 || rc-service docker start
|
|
elif command -v systemctl >/dev/null 2>&1; then
|
|
systemctl enable --now docker >/dev/null 2>&1 || systemctl start docker || true
|
|
fi
|
|
# dockerd may return before its socket listens (esp. OpenRC); don't race it.
|
|
local i
|
|
for i in $(seq 1 30); do
|
|
docker info >/dev/null 2>&1 && return
|
|
sleep 1
|
|
done
|
|
warn "Docker daemon not ready after 30s; continuing (compose may fail -- check 'docker info')."
|
|
}
|
|
|
|
# The container runs as this host user (no login, no home). It owns ./ircd so
|
|
# the DB, config and the copied TLS key are never readable by other local users.
|
|
ensure_ergo_user() {
|
|
if ! getent passwd ergo >/dev/null 2>&1; then
|
|
log "Creating system user 'ergo' (owns $IRCD_DIR; the container runs as it)..."
|
|
case "$(osfam)" in
|
|
alpine) getent group ergo >/dev/null 2>&1 || addgroup -S ergo
|
|
adduser -S -D -H -G ergo -s /sbin/nologin -g "Ergo IRC server" ergo ;;
|
|
*) useradd -r -M -s /usr/sbin/nologin -d /nonexistent -c "Ergo IRC server" ergo 2>/dev/null \
|
|
|| useradd -r -M -s /sbin/nologin -c "Ergo IRC server" ergo ;;
|
|
esac
|
|
fi
|
|
ERGO_UID="$(id -u ergo)"; ERGO_GID="$(id -g ergo)"
|
|
}
|
|
|
|
open_ports() {
|
|
# Host networking: these ports are bound on the host itself, so the INPUT
|
|
# firewall genuinely governs them (unlike Docker-published ports).
|
|
local ports=(80/tcp 443/tcp 6697/tcp)
|
|
[[ "$PLAINTEXT" == "1" ]] && ports+=(6667/tcp)
|
|
if [[ -d /etc/firewall/ports.d && -x /usr/local/sbin/firewall-apply ]]; then
|
|
log "Registering ${ports[*]} with the host firewall..."
|
|
printf '%s\n' "${ports[@]}" > /etc/firewall/ports.d/ergo.rule
|
|
/usr/local/sbin/firewall-apply
|
|
elif command -v ufw >/dev/null 2>&1 && ufw status 2>/dev/null | grep -q '^Status: active'; then
|
|
log "ufw active -- allowing ${ports[*]}..."
|
|
local p; for p in "${ports[@]}"; do ufw allow "$p" >/dev/null; done
|
|
elif command -v firewall-cmd >/dev/null 2>&1 && firewall-cmd --state >/dev/null 2>&1; then
|
|
log "firewalld active -- allowing ${ports[*]}..."
|
|
local p; for p in "${ports[@]}"; do firewall-cmd -q --add-port="$p" --permanent; done
|
|
firewall-cmd -q --reload
|
|
else
|
|
warn "No managed host firewall found; make sure ${ports[*]} are reachable (and nothing else is)."
|
|
fi
|
|
}
|
|
|
|
# Anything already listening on our host ports (only checked while our own
|
|
# containers are not running -- on re-runs they hold the ports themselves).
|
|
check_ports_free() {
|
|
local listing p busy=""
|
|
listing="$(netstat -ltn 2>/dev/null || ss -ltn 2>/dev/null || true)"
|
|
[[ -n "$listing" ]] || return 0
|
|
for p in 80 443 6697 8097 6667; do
|
|
if printf '%s\n' "$listing" | grep -qE "[:.]${p}[[:space:]]"; then busy="${busy} ${p}"; fi
|
|
done
|
|
[[ -z "$busy" ]] || die "Ports already in use on this host:${busy}. Both containers use host networking, so this stack needs 80/443 (Caddy), 6697/6667/8097 (Ergo) to itself. Another Caddy stack on this box? Move it or this."
|
|
}
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Prompt for required vars, then normalise + validate them
|
|
# ---------------------------------------------------------------------------
|
|
prompt() { # <VAR> <message> [default]
|
|
local varname="$1" message="$2" def="${3:-}"
|
|
local -n ref="$varname"
|
|
if [[ -z "${ref:-}" ]]; then
|
|
if [[ "$SKIP_PROMPTS" == "1" ]]; then
|
|
[[ -n "$def" ]] && { ref="$def"; return 0; }
|
|
die "$varname required (set it in the environment; running with SKIP_PROMPTS=1)."
|
|
fi
|
|
if [[ -n "$def" ]]; then read -r -p "$message [$def]: " ref; ref="${ref:-$def}"
|
|
else read -r -p "$message: " ref; fi
|
|
[[ -n "$ref" ]] || die "$varname required."
|
|
fi
|
|
}
|
|
|
|
prompt ERGO_DOMAIN "Public hostname of the IRC server (e.g. irc.example.com)"
|
|
ERGO_DOMAIN="$(printf '%s' "$ERGO_DOMAIN" | tr 'A-Z' 'a-z' | sed -E 's#^https?://##; s#[/.]+$##')"
|
|
[[ "$ERGO_DOMAIN" =~ ^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$ ]] \
|
|
|| die "ERGO_DOMAIN '$ERGO_DOMAIN' is not a valid hostname."
|
|
prompt ACME_EMAIL "Let's Encrypt email"
|
|
prompt NETWORK_NAME "IRC network name (no spaces)" "$ERGO_DOMAIN"
|
|
[[ "$NETWORK_NAME" =~ ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$ ]] \
|
|
|| die "NETWORK_NAME '$NETWORK_NAME' must be 1-64 chars of letters, digits, . _ - (no spaces: it is sent as an IRC parameter)."
|
|
[[ "$PLAINTEXT" == "0" || "$PLAINTEXT" == "1" ]] || die "PLAINTEXT must be 0 or 1."
|
|
case "$UPDATE_POLICY" in latest|security|off) ;; *) die "UPDATE_POLICY must be latest, security or off." ;; esac
|
|
|
|
# Re-run guard: server.name is immutable once Ergo has run with it, and the
|
|
# cert/websocket origin/Caddy site all derive from ERGO_DOMAIN.
|
|
if [[ -f "$IRCD_DIR/ircd.yaml" ]]; then
|
|
existing="$(yaml_server_name "$IRCD_DIR/ircd.yaml" || true)"
|
|
if [[ -n "$existing" && "$existing" != "$ERGO_DOMAIN" ]]; then
|
|
die "This stack is already deployed as '$existing' (ircd/ircd.yaml server.name) but ERGO_DOMAIN=$ERGO_DOMAIN. Ergo cannot rename a running server; re-run with ERGO_DOMAIN=$existing, or stop the stack, move $STACK_DIR away and deploy fresh."
|
|
fi
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Re-run: adopt the deployed settings from .env
|
|
#
|
|
# Everything below (the firewall rule, the scheduled jobs, the summary) must
|
|
# describe the stack as deployed, not this shell's defaults. A setting the
|
|
# caller passed explicitly wins and is written back; PLAINTEXT is the exception,
|
|
# because the listener it selects lives in ircd.yaml, which is never rewritten.
|
|
# ---------------------------------------------------------------------------
|
|
if [[ -f "$ENV_FILE" ]]; then
|
|
for _k in PLAINTEXT UPDATE_POLICY FORCE_UPDATE UPDATE_GRACE CADDY_AUTOUPDATE CADDY_TAG; do
|
|
_v="$(env_get "$_k")"
|
|
[[ -n "$_v" ]] || continue
|
|
if [[ " $EXPLICIT " == *" $_k "* ]]; then
|
|
[[ "${!_k}" == "$_v" ]] && continue
|
|
if [[ "$_k" == "PLAINTEXT" ]]; then
|
|
die "This stack was deployed with PLAINTEXT=${_v} and you passed PLAINTEXT=${!_k}. The listener is fixed in ircd/ircd.yaml, which deploy.sh never rewrites, so re-running cannot change it. To switch: edit the plaintext listener with 'ergoctl edit' ($( [[ "$_v" == 1 ]] && echo '":6667": -> "127.0.0.1:6667":' || echo '"127.0.0.1:6667": -> ":6667":' ) and server.sts.enabled), set PLAINTEXT=${!_k} in $ENV_FILE, run 'ergoctl restart', then re-run this script to fix the firewall."
|
|
fi
|
|
log "${_k}: ${_v} -> ${!_k} (updating $ENV_FILE)."
|
|
else
|
|
printf -v "$_k" '%s' "$_v"
|
|
fi
|
|
done
|
|
[[ "$PLAINTEXT" == "0" || "$PLAINTEXT" == "1" ]] || die "PLAINTEXT in $ENV_FILE must be 0 or 1 (found '$PLAINTEXT')."
|
|
case "$UPDATE_POLICY" in latest|security|off) ;; *) die "UPDATE_POLICY in $ENV_FILE must be latest, security or off (found '$UPDATE_POLICY')." ;; esac
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Host prerequisites
|
|
# ---------------------------------------------------------------------------
|
|
[[ "$SKIP_DOCKER_INSTALL" == "1" ]] || install_docker
|
|
for tool in openssl jq curl; do
|
|
command -v "$tool" >/dev/null 2>&1 || { log "Installing $tool..."; pkg_install "$tool"; }
|
|
command -v "$tool" >/dev/null 2>&1 || die "$tool is required (certsync/updater); install it and re-run."
|
|
done
|
|
command -v docker >/dev/null 2>&1 || die "docker not found."
|
|
docker compose version >/dev/null 2>&1 || die "docker compose (v2 plugin) not found."
|
|
ensure_ergo_user
|
|
|
|
# Other host-network containers share Ergo's trust boundary (its loopback).
|
|
docker info >/dev/null 2>&1 || die "The Docker daemon is not running or not reachable (check 'docker info'). Start it and re-run."
|
|
others="$(docker ps -q 2>/dev/null | xargs -r docker inspect -f '{{.Name}} {{.HostConfig.NetworkMode}}' 2>/dev/null \
|
|
| awk '$2=="host" && $1!="/ergo" && $1!="/ergo-caddy" {print $1}' | tr '\n' ' ' || true)"
|
|
[[ -z "$others" ]] || warn "Other containers use host networking: ${others}-- they can reach Ergo's loopback listeners (see README: Security model)."
|
|
|
|
if [[ -z "$(dc ps -q 2>/dev/null || true)" ]]; then check_ports_free; fi
|
|
open_ports
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Stack directory + files
|
|
# ---------------------------------------------------------------------------
|
|
log "Setting up $STACK_DIR..."
|
|
install -d -m 0700 "$STACK_DIR" "$SECRETS_DIR" "$BACKUP_DIR" "$TEMPLATES_DIR" "$STATE_DIR"
|
|
install -d -m 0700 "$CADDY_DIR" "$CADDY_DIR/data" "$CADDY_DIR/config"
|
|
install -d -m 0755 "$CADDY_DIR/etc" "$CADDY_DIR/etc/conf.d"
|
|
install -m 0640 "$SCRIPT_DIR/docker-compose.yml" "$STACK_DIR/docker-compose.yml"
|
|
# Caddy has no admin API here and bind-mounted file contents are not part of the
|
|
# compose config hash, so `up -d` alone would leave a changed Caddyfile unloaded.
|
|
CADDY_CHANGED=0
|
|
cmp -s "$SCRIPT_DIR/Caddyfile" "$CADDY_DIR/etc/Caddyfile" 2>/dev/null || CADDY_CHANGED=1
|
|
install -m 0644 "$SCRIPT_DIR/Caddyfile" "$CADDY_DIR/etc/Caddyfile"
|
|
[[ -e "$CADDY_DIR/etc/conf.d/00-readme.caddy" ]] || install -m 0644 "$SCRIPT_DIR/conf.d-readme.caddy" "$CADDY_DIR/etc/conf.d/00-readme.caddy"
|
|
install -m 0644 "$SCRIPT_DIR/ergolib.sh" "$STACK_DIR/ergolib.sh"
|
|
install -m 0750 "$SCRIPT_DIR/update.sh" "$STACK_DIR/update.sh"
|
|
install -m 0750 "$SCRIPT_DIR/ergoctl" "$STACK_DIR/ergoctl"
|
|
install -d -m 0755 /usr/local/bin
|
|
cat > /usr/local/bin/ergoctl <<EOF
|
|
#!/bin/sh
|
|
# Auto-generated by the Ergo deploy.sh -- runs the stack's admin CLI from anywhere.
|
|
exec bash "$STACK_DIR/ergoctl" "\$@"
|
|
EOF
|
|
chmod 0755 /usr/local/bin/ergoctl
|
|
install -d -m 0700 -o "$ERGO_UID" -g "$ERGO_GID" "$IRCD_DIR"
|
|
|
|
# Pin ERGO_TAG to the newest release so the running version is explicit.
|
|
if [[ -z "$ERGO_TAG" && -f "$ENV_FILE" ]]; then ERGO_TAG="$(env_get ERGO_TAG)"; fi
|
|
if [[ -z "$ERGO_TAG" || "$ERGO_TAG" == "latest" || "$ERGO_TAG" == "stable" ]]; then
|
|
if _t="$(ergo_latest_tag)"; then ERGO_TAG="$_t"; log "Pinned ERGO_TAG=${ERGO_TAG} (newest release)."
|
|
else warn "Could not resolve the newest release from GitHub; using tag 'stable' for now (update.sh will pin it)."; ERGO_TAG="stable"; fi
|
|
fi
|
|
[[ "$ERGO_TAG" == "stable" || "$ERGO_TAG" == v* ]] || ERGO_TAG="v${ERGO_TAG}" # ghcr tags carry the v
|
|
|
|
if [[ ! -f "$ENV_FILE" ]]; then
|
|
log "Seeding $ENV_FILE..."
|
|
install -m 0600 "$SCRIPT_DIR/.env.example" "$ENV_FILE"
|
|
env_set ERGO_DOMAIN "$ERGO_DOMAIN"
|
|
env_set ACME_EMAIL "$ACME_EMAIL"
|
|
env_set NETWORK_NAME "$NETWORK_NAME"
|
|
env_set ERGO_IMAGE "$ERGO_IMAGE"
|
|
env_set ERGO_TAG "$ERGO_TAG"
|
|
env_set PLAINTEXT "$PLAINTEXT"
|
|
env_set UPDATE_POLICY "$UPDATE_POLICY"
|
|
env_set FORCE_UPDATE "$FORCE_UPDATE"
|
|
env_set UPDATE_GRACE "$UPDATE_GRACE"
|
|
env_set CADDY_AUTOUPDATE "$CADDY_AUTOUPDATE"
|
|
env_set CADDY_TAG "$CADDY_TAG"
|
|
else
|
|
log ".env exists; keeping its settings (ERGO_TAG=$(env_get ERGO_TAG))."
|
|
[[ "$(ergo_domain)" == "$ERGO_DOMAIN" ]] || die ".env has ERGO_DOMAIN=$(env_get ERGO_DOMAIN) but you passed $ERGO_DOMAIN -- the domain cannot change after the first deploy."
|
|
# Persist the settings the caller passed explicitly on this re-run.
|
|
for _k in PLAINTEXT UPDATE_POLICY FORCE_UPDATE UPDATE_GRACE CADDY_AUTOUPDATE CADDY_TAG; do
|
|
[[ " $EXPLICIT " == *" $_k "* ]] && env_set "$_k" "${!_k}" || true
|
|
done
|
|
# A floating tag ('stable', from a first deploy that could not reach GitHub)
|
|
# would let any pull change the running version with no pre-flight, snapshot
|
|
# or rollback. Pin it as soon as we can resolve a real release.
|
|
_envtag="$(env_get ERGO_TAG)"
|
|
if [[ "$ERGO_TAG" == v[0-9]* && "$ERGO_TAG" != "$_envtag" ]]; then
|
|
case "$_envtag" in
|
|
v[0-9]*) [[ " $EXPLICIT " == *" ERGO_TAG "* ]] && { env_set ERGO_TAG "$ERGO_TAG"; log "Pinned ERGO_TAG=${ERGO_TAG} (was ${_envtag})."; } || true ;;
|
|
*) env_set ERGO_TAG "$ERGO_TAG"; log "Pinned ERGO_TAG=${ERGO_TAG} (was '${_envtag}', which floats)." ;;
|
|
esac
|
|
fi
|
|
fi
|
|
env_set ERGO_UID "$ERGO_UID"
|
|
env_set ERGO_GID "$ERGO_GID"
|
|
ERGO_TAG="$(ergo_tag)"
|
|
IMAGE="$(ergo_image)"
|
|
|
|
missing=()
|
|
for var in ERGO_DOMAIN ACME_EMAIL NETWORK_NAME ERGO_TAG ERGO_UID ERGO_GID; do
|
|
grep -E "^${var}=.+$" "$ENV_FILE" >/dev/null || missing+=("$var")
|
|
done
|
|
(( ${#missing[@]} == 0 )) || die "Missing values in $ENV_FILE: ${missing[*]}"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Pull images, validate the Caddyfile (static config -- no admin API needed)
|
|
# ---------------------------------------------------------------------------
|
|
cd "$STACK_DIR"
|
|
log "Pulling images ($IMAGE, caddy:$(env_get CADDY_TAG))..."
|
|
docker compose pull
|
|
log "Validating the Caddyfile..."
|
|
# A one-off `compose run` container gets a generated name (compose drops the
|
|
# service's container_name for these), so this is safe while ergo-caddy runs.
|
|
docker compose run --rm --no-deps -T caddy \
|
|
caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile >/dev/null \
|
|
|| die "Caddyfile validation failed. Check $CADDY_DIR/etc/Caddyfile and conf.d/*.caddy."
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# First run: generate ircd.yaml from the image's own default config
|
|
# ---------------------------------------------------------------------------
|
|
render_ircd_yaml() { # <template> <dest>
|
|
local plain_listener sts_note netname="" listeners ws
|
|
# Cloaked hostnames end in this fake TLD (default "irc"). Use the network's
|
|
# first label when it is hostname-shaped; changing it later re-cloaks everyone.
|
|
netname="$(printf '%s' "$NETWORK_NAME" | tr 'A-Z' 'a-z' | cut -d. -f1)"
|
|
[[ "$netname" =~ ^[a-z0-9]([a-z0-9-]{0,30}[a-z0-9])?$ ]] || netname=""
|
|
if [[ "$PLAINTEXT" == "1" ]]; then
|
|
plain_listener=' # PLAINTEXT=1: plaintext IRC on ALL interfaces. STS is advertised (server.sts)
|
|
# so capable clients pin TLS after first contact. Anything sent here crosses
|
|
# the internet unencrypted. Loopback probes (ergoctl, healthcheck) use it too.
|
|
":6667":'
|
|
else
|
|
plain_listener=' # Loopback plaintext: the compose healthcheck and `ergoctl` use it (loopback is
|
|
# exempt from ip-limits/bans and treated as secure). To serve plaintext publicly
|
|
# instead (not recommended): change this to ":6667", enable server.sts above, set
|
|
# PLAINTEXT=1 in ../.env, `ergoctl restart`, then re-run deploy.sh for the firewall.
|
|
"127.0.0.1:6667":'
|
|
fi
|
|
listeners=" listeners:
|
|
${plain_listener}
|
|
|
|
# Public TLS port. fullchain.pem/privkey.pem are Caddy's Let's Encrypt cert,
|
|
# kept current by 'update.sh certsync' (self-signed from mkcerts until the
|
|
# first sync). Rehash (SIGHUP) reloads them without dropping anyone.
|
|
\":6697\":
|
|
tls:
|
|
cert: fullchain.pem
|
|
key: privkey.pem
|
|
proxy: false
|
|
min-tls-version: 1.2
|
|
|
|
# IRC over WebSocket for browser clients; TLS is terminated by Caddy on :443
|
|
# (wss://${ERGO_DOMAIN}/webirc), which proxies here over loopback with
|
|
# X-Forwarded-For -- trusted because 127.0.0.1 is in proxy-allowed-from.
|
|
\"127.0.0.1:8097\":
|
|
websocket: true
|
|
|
|
"
|
|
ws=" websockets:
|
|
# Only pages served from these origins may open a websocket (anchored,
|
|
# case-sensitive globs). Add the origin of any web client you host elsewhere.
|
|
# Non-browser clients should use :6697 directly.
|
|
allowed-origins:
|
|
- \"https://${ERGO_DOMAIN}\"
|
|
|
|
"
|
|
MARKER="# Generated by deployments/ergo/deploy.sh on $(date -u +%FT%TZ) from the ${IMAGE} default config.
|
|
# Edit freely; apply with 'ergoctl rehash' (or 'ergoctl edit', which validates first).
|
|
# server.name, datastore.path, casemapping and enforce-utf8 need 'ergoctl restart'.
|
|
# The pristine template is kept in ../templates/ for diffing after upgrades." \
|
|
DOMAIN="$ERGO_DOMAIN" NETWORK_NAME="$NETWORK_NAME" HASH="$ADMIN_HASH" PLAINTEXT="$PLAINTEXT" \
|
|
NETNAME="$netname" LISTENERS_BLOCK="$listeners" WS_BLOCK="$ws" \
|
|
awk '
|
|
BEGIN { print ENVIRON["MARKER"]; top=""; sub4=""; oper=""; skip=0 }
|
|
{
|
|
line=$0
|
|
# while replacing a 4-space block, drop its children (8+ spaces) and blanks
|
|
if (skip) { if (line ~ /^ / || line ~ /^[ \t]*$/) next; skip=0 }
|
|
if (line ~ /^[a-z][a-z-]*:/) { top=line; sub(/:.*/,"",top); sub4=""; oper="" }
|
|
if (top=="server") {
|
|
if (line ~ /^ [a-z"-]/) { sub4=line; sub(/^ /,"",sub4); sub(/:.*/,"",sub4) }
|
|
if (line ~ /^ name:/) { print " name: " ENVIRON["DOMAIN"]; next }
|
|
if (line ~ /^ listeners:/) { printf "%s", ENVIRON["LISTENERS_BLOCK"]; skip=1; next }
|
|
if (line ~ /^ websockets:/) { printf "%s", ENVIRON["WS_BLOCK"]; skip=1; next }
|
|
if (sub4=="sts" && ENVIRON["PLAINTEXT"]=="1" && line ~ /^ enabled: false/) { print " enabled: true"; next }
|
|
if (sub4=="ip-cloaking" && ENVIRON["NETNAME"]!="" && line ~ /^ netname:/) { print " netname: \"" ENVIRON["NETNAME"] "\""; next }
|
|
}
|
|
if (top=="network" && line ~ /^ name:/) { print " name: \"" ENVIRON["NETWORK_NAME"] "\""; next }
|
|
if (top=="opers") {
|
|
if (line ~ /^ [A-Za-z0-9_.-]+:/) { oper=line; sub(/^ /,"",oper); sub(/:.*/,"",oper) }
|
|
if (oper=="admin" && line ~ /^ password:/) { print " password: \"" ENVIRON["HASH"] "\""; next }
|
|
}
|
|
if (top=="languages" && line ~ /^ path: languages/) { print " path: /ircd-bin/languages"; next }
|
|
print line
|
|
}' "$1" > "$2"
|
|
}
|
|
|
|
assert_ircd_yaml() { # hard post-conditions -- a silent sed miss would be a public :6667 or a dead admin oper
|
|
local f="$1" fail=0
|
|
_chk() { if ! grep -qE -- "$1" "$f"; then warn "ircd.yaml check failed: expected $2"; fail=1; fi; }
|
|
_nochk() { if grep -qE -- "$1" "$f"; then warn "ircd.yaml check failed: unexpected $2"; fail=1; fi; }
|
|
_chk '^ name: '"$ERGO_DOMAIN"'$' "server.name = $ERGO_DOMAIN"
|
|
_chk '^ name: "'"$NETWORK_NAME"'"$' "network.name"
|
|
_chk '^ ":6697":' "TLS listener :6697"
|
|
_chk '^ "127.0.0.1:8097":' "websocket listener"
|
|
_chk '^ - "https://'"$ERGO_DOMAIN"'"$' "websocket allowed origin"
|
|
_chk '^ password: "\$2[ab]\$' "admin oper bcrypt hash"
|
|
_nochk '^ password: "\$2a\$04\$0123456789abcdef' "placeholder oper hash still active (the commented examples are fine)"
|
|
_nochk '"\[::1\]:6667"' "[::1] listener (fails on IPv6-less hosts)"
|
|
_chk '^ path: /ircd-bin/languages' "languages path"
|
|
_nochk '^ path: languages$' "unpatched languages path"
|
|
if [[ "$PLAINTEXT" == "1" ]]; then _chk '^ ":6667":' "public plaintext listener"; _nochk '^ "127.0.0.1:6667":' "loopback-only listener with PLAINTEXT=1"
|
|
else _chk '^ "127.0.0.1:6667":' "loopback plaintext listener"; _nochk '^ ":6667":' "PUBLIC plaintext listener with PLAINTEXT=0"; fi
|
|
(( fail == 0 ))
|
|
}
|
|
|
|
CONF="$IRCD_DIR/ircd.yaml"
|
|
FIRST_RUN=0
|
|
if [[ ! -f "$CONF" ]]; then
|
|
FIRST_RUN=1
|
|
log "Generating $CONF from the image's default config..."
|
|
TEMPLATE="$TEMPLATES_DIR/default.yaml.${ERGO_TAG}"
|
|
ergo_extract_template "$IMAGE" "$TEMPLATE" || die "Could not read /ircd-bin/default.yaml from $IMAGE."
|
|
chmod 0600 "$TEMPLATE"
|
|
|
|
# Admin oper: random password (plaintext 0600 on the host, hash in the yaml).
|
|
ADMIN_PW="$(ergo_random_password 24)"
|
|
ADMIN_HASH="$(ergo_genpasswd "$IMAGE" "$ADMIN_PW")" || die "ergo genpasswd did not return a bcrypt hash."
|
|
( umask 077; printf '%s\n' "$ADMIN_PW" > "$ADMIN_PASS_FILE" )
|
|
|
|
render_ircd_yaml "$TEMPLATE" "$CONF"
|
|
assert_ircd_yaml "$CONF" || { rm -f "$CONF"; die "Generated ircd.yaml failed its checks (the upstream template layout changed?). Nothing started. Template kept at $TEMPLATE."; }
|
|
|
|
# MOTD: the bind mount hides the image's ergo.motd, and a missing MOTD is silently
|
|
# ignored (clients get ERR_NOMOTD) -- so always ship one.
|
|
sed -e "s|__NETWORK_NAME__|${NETWORK_NAME}|g" -e "s|__DOMAIN__|${ERGO_DOMAIN}|g" "$SCRIPT_DIR/ergo.motd" > "$IRCD_DIR/ergo.motd"
|
|
|
|
chmod 0600 "$CONF"; chmod 0644 "$IRCD_DIR/ergo.motd"
|
|
chown -R "$ERGO_UID:$ERGO_GID" "$IRCD_DIR"
|
|
|
|
log "Validating the generated config (ergo run --smoke in a throwaway container)..."
|
|
if ! ergo_validate_config "$IMAGE"; then
|
|
tail -n 20 "$VALIDATE_LOG" >&2 || true
|
|
rm -f "$CONF"
|
|
die "ircd.yaml did not load in $IMAGE. Nothing started; fix the cause above and re-run."
|
|
fi
|
|
rm -f "$VALIDATE_LOG"
|
|
else
|
|
log "$CONF exists; leaving it alone."
|
|
chown -R "$ERGO_UID:$ERGO_GID" "$IRCD_DIR"
|
|
fi
|
|
ADMIN_PW="$(head -n1 "$ADMIN_PASS_FILE" 2>/dev/null || echo '<not on file>')"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Confirm
|
|
# ---------------------------------------------------------------------------
|
|
if [[ "$FORCE" != "1" ]]; then
|
|
cat <<EOF
|
|
|
|
About to start the Ergo stack from $STACK_DIR (host networking).
|
|
|
|
Caddy will request a Let's Encrypt cert for ${ERGO_DOMAIN}. DNS for that name must
|
|
already point at this host and ports 80/443 must be reachable from the internet.
|
|
IRC clients connect on 6697 (TLS)$( [[ "$PLAINTEXT" == "1" ]] && printf ' and 6667 (PLAINTEXT -- credentials in clear)' ).
|
|
|
|
Continue? [y/N]
|
|
EOF
|
|
read -r ans
|
|
[[ "${ans,,}" == "y" || "${ans,,}" == "yes" ]] || { warn "Aborted."; exit 0; }
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Up + health
|
|
# ---------------------------------------------------------------------------
|
|
log "Starting stack..."
|
|
docker compose up -d --remove-orphans
|
|
if (( CADDY_CHANGED )) && [[ "$(svc_state caddy)" == running* ]]; then
|
|
log "Caddyfile changed; restarting Caddy to load it..."
|
|
docker compose restart caddy >/dev/null 2>&1 || warn "Could not restart Caddy; run 'ergoctl caddy-restart'."
|
|
fi
|
|
|
|
log "Waiting for services to become healthy..."
|
|
wait_healthy caddy 60 || warn "Caddy is not healthy yet (docker compose logs caddy)."
|
|
if ! wait_healthy ergo 120; then
|
|
docker compose logs --tail 30 ergo >&2 || true
|
|
die "Ergo did not become healthy. See the log above."
|
|
fi
|
|
log "Ergo is up ($(ergo_version_running))."
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# TLS: wait for Caddy's cert, copy it into ircd/, rehash
|
|
# ---------------------------------------------------------------------------
|
|
log "Waiting up to ${CERT_WAIT}s for Caddy to obtain the Let's Encrypt certificate..."
|
|
deadline=$(( $(date +%s) + CERT_WAIT ))
|
|
have_cert=0
|
|
while (( $(date +%s) < deadline )); do
|
|
if ergo_cert_source >/dev/null 2>&1; then have_cert=1; break; fi
|
|
sleep 5
|
|
done
|
|
if [[ "$have_cert" == 1 ]]; then
|
|
sleep 2 # let certmagic finish writing the .json sidecar
|
|
bash "$STACK_DIR/update.sh" certsync || warn "Cert sync did not complete; the 15-minute job will retry."
|
|
else
|
|
warn "No certificate from Caddy yet (DNS not pointing here, or 80/443 unreachable?)."
|
|
warn "Ergo is serving a SELF-SIGNED cert on 6697 until certsync succeeds (every 15 min). Check: docker compose logs caddy"
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Schedule certsync (15 min) + the daily update check
|
|
# ---------------------------------------------------------------------------
|
|
log "Installing scheduled jobs (certsync every 15 min; daily update check, policy=${UPDATE_POLICY})..."
|
|
STACK_DIR="$STACK_DIR" UPDATE_POLICY="$UPDATE_POLICY" FORCE_UPDATE="$FORCE_UPDATE" UPDATE_GRACE="$UPDATE_GRACE" \
|
|
CADDY_AUTOUPDATE="$CADDY_AUTOUPDATE" SCHEDULE_UPDATES="$ERGO_AUTOUPDATE" \
|
|
bash "$STACK_DIR/update.sh" install || warn "Scheduling failed (non-fatal): run '$STACK_DIR/update.sh install' by hand."
|
|
|
|
echo
|
|
log "Stack status:"
|
|
docker compose ps
|
|
echo
|
|
cat <<EOF
|
|
================================================================
|
|
DEPLOYED -- Ergo IRC server
|
|
|
|
Network: ${NETWORK_NAME}
|
|
Server: ${ERGO_DOMAIN} port 6697 (TLS)$( [[ "$PLAINTEXT" == "1" ]] && printf ', port 6667 (plaintext)' )
|
|
WebSocket: wss://${ERGO_DOMAIN}/webirc (landing page: https://${ERGO_DOMAIN})
|
|
Stack dir: ${STACK_DIR}
|
|
|
|
Oper login: /OPER admin ${ADMIN_PW}
|
|
(stored in ${ADMIN_PASS_FILE}; rotate with: ergoctl passwd rotate)
|
|
|
|
Config: ${IRCD_DIR}/ircd.yaml MOTD: ${IRCD_DIR}/ergo.motd
|
|
ergoctl edit / ergoctl motd (validates, then rehashes)
|
|
|
|
Administer (from anywhere on this host):
|
|
ergoctl status versions, health, cert, user count
|
|
ergoctl users who is on
|
|
ergoctl oper add <name> add an operator (prints a generated password)
|
|
ergoctl announce <text> NOTICE to everyone
|
|
ergoctl kill|ban|defcon ... moderation (see: ergoctl help)
|
|
ergoctl cmd <raw IRC line> anything else, as the admin oper
|
|
ergoctl logs -f server log (health-probe noise filtered)
|
|
ergoctl backup stop-consistent backup of config + database
|
|
|
|
TLS: Caddy holds the Let's Encrypt cert; 'update.sh certsync' copies it to
|
|
Ergo and rehashes (every 15 min, silent when unchanged). Check with
|
|
'ergoctl cert'. If it says self-signed, DNS/80/443 are not right yet.
|
|
|
|
Updates: ergoctl update check current vs latest (+ security advisories)
|
|
ergoctl update update update now (health-checked, DB snapshot, rollback)
|
|
$( [[ "$ERGO_AUTOUPDATE" == "1" ]] \
|
|
&& printf "Daily automatic run, policy '%s' (edit it in %s)." "$UPDATE_POLICY" "$ENV_FILE" \
|
|
|| printf "Daily run NOT scheduled (ERGO_AUTOUPDATE=0); enable it with 'ergoctl update install'." )
|
|
Restarting Ergo disconnects every user; the daily run warns them first.
|
|
|
|
Re-running this script is idempotent (it never touches ircd.yaml, secrets or .env).
|
|
================================================================
|
|
EOF
|
|
|
|
# IMPORTANT: do not put any code below this exit. Everything after the
|
|
# __ARCHIVE_BELOW__ marker is the embedded tar.gz payload (base64), appended by
|
|
# build.sh.
|
|
exit 0
|
|
__ARCHIVE_BELOW__
|
|
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
|
|
9fnr89DP/wY35ASUAGgBAA==
|