← back to Re Flyer Aggregator
deploy/finish_kamatera_ssl.sh
71 lines
#!/bin/bash
# TK-10708 — finish SSL + nginx for the two APPROVED re-flyer deploys on Kamatera.
# Steve approved both (2026-08-19). flyers = PUBLIC; advertising = BASIC-AUTH gated (admin / $ADV_PW).
# DNS already created (flyers proxied, advertising DNS-only). Static files already rsynced.
# This box serves ACME centrally from /var/www/certbot; issue via --webroot then write :443 vhosts.
# Run: ! bash ~/Projects/re-flyer-aggregator/deploy/finish_kamatera_ssl.sh
set -euo pipefail
: "${ADV_PW:?set ADV_PW env var before running -- password is NOT stored in git}"
ssh root@45.61.58.125 "ADV_PW=$(printf %q "$ADV_PW") bash -s" <<'REMOTE'
set -e
echo "== 1/4 issue certs via shared webroot =="
certbot certonly --webroot -w /var/www/certbot -d flyers.crcp.agentabrams.com \
--non-interactive --agree-tos -m info@designerwallcoverings.com
certbot certonly --webroot -w /var/www/certbot -d advertising.crcp.agentabrams.com \
--non-interactive --agree-tos -m info@designerwallcoverings.com
echo "== 2/4 basic-auth htpasswd for advertising (admin / \$ADV_PW) =="
: "${ADV_PW:?ADV_PW must be set}"
if ! command -v htpasswd >/dev/null 2>&1; then apt-get install -y apache2-utils >/dev/null 2>&1 || true; fi
htpasswd -bc /etc/nginx/.htpasswd-advertising admin "$ADV_PW"
echo "== 3/4 write :443 static vhosts =="
# --- flyers.crcp.agentabrams.com : PUBLIC static showcase ---
cat > /etc/nginx/sites-enabled/flyers.crcp.agentabrams.com <<'NG'
server {
listen 45.61.58.125:443 ssl;
server_name flyers.crcp.agentabrams.com;
ssl_certificate /etc/letsencrypt/live/flyers.crcp.agentabrams.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/flyers.crcp.agentabrams.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
root /var/www/flyers.crcp.agentabrams.com;
index index.html;
location ^~ /.well-known/acme-challenge/ { root /var/www/certbot; default_type "text/plain"; try_files $uri =404; }
location / { try_files $uri $uri/ =404; }
}
NG
# --- advertising.crcp.agentabrams.com : BASIC-AUTH gated (DNS-only, origin cert) ---
cat > /etc/nginx/sites-enabled/advertising.crcp.agentabrams.com <<'NG'
server {
listen 45.61.58.125:443 ssl;
server_name advertising.crcp.agentabrams.com;
ssl_certificate /etc/letsencrypt/live/advertising.crcp.agentabrams.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/advertising.crcp.agentabrams.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
root /var/www/advertising.crcp.agentabrams.com;
index index.html;
auth_basic "CRCP Advertising Intel";
auth_basic_user_file /etc/nginx/.htpasswd-advertising;
# ACME renewal must stay open (no auth) or cert renew fails:
location ^~ /.well-known/acme-challenge/ { auth_basic off; root /var/www/certbot; default_type "text/plain"; try_files $uri =404; }
location / { try_files $uri $uri/ =404; }
}
NG
echo "== 4/4 test + reload =="
nginx -t && systemctl reload nginx && echo "nginx reloaded — vhosts live"
REMOTE
echo
echo "== SMOKE TEST =="
echo -n "flyers (public, expect 200): "; curl -s -o /dev/null -w '%{http_code}\n' https://flyers.crcp.agentabrams.com/
echo -n "flyers flyers.json (expect 200): "; curl -s -o /dev/null -w '%{http_code}\n' https://flyers.crcp.agentabrams.com/flyers.json
echo -n "advertising no-auth (expect 401): "; curl -s -o /dev/null -w '%{http_code}\n' https://advertising.crcp.agentabrams.com/
echo -n "advertising w/ auth (expect 200): "; curl -s -u "admin:$ADV_PW" -o /dev/null -w '%{http_code}\n' https://advertising.crcp.agentabrams.com/
echo
echo "If flyers cert failed (CF proxy can block http-01): grey-cloud flyers in CF, re-run, re-proxy."