#!/usr/bin/env bash # Install Spark SNI vhosts into the shared host nginx (do not replace nginx.conf). set -euo pipefail ROOT="$(cd "$(dirname "$0")" && pwd)" HOST_DIR="$ROOT/host" BACKUP="/root/nginx-backup-$(date +%Y%m%d%H%M%S)" DOMAINS=(sparkapi.wyrs365.com sparkim.wyrs365.com sparkr.wyrs365.com) cert_ok() { [[ -f "/etc/letsencrypt/live/$1/fullchain.pem" ]] } all_certs_ok() { local d for d in "${DOMAINS[@]}"; do cert_ok "$d" || return 1 done } install_acme_domain() { local d=$1 mkdir -p /var/www/certbot cat > "/etc/nginx/conf.d/spark-acme-${d}.conf" < /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh <<'HOOK' #!/bin/sh systemctl reload nginx HOOK chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh if grep -RInE 'listen[[:space:]]+(\[::\]:)?443[[:space:]]+ssl' /etc/nginx/conf.d; then echo "http still binds public 443" >&2 exit 1 fi nginx -t systemctl reload nginx } mkdir -p "$BACKUP" cp -a /etc/nginx "$BACKUP/nginx" echo "backup $BACKUP" if ! all_certs_ok; then issue_missing_certs fi if ! all_certs_ok; then echo "certificates missing" >&2 exit 1 fi install_sni echo "nginx sni ready"