← back to Emoji Agentabrams

deploy/emoji.agentabrams.com.deploy.sh

44 lines

#!/bin/bash
# emoji.agentabrams.com — full first deploy (DNS + rsync + nginx + SSL).
# Idempotent: re-running after go-live just re-rsyncs content. Steve-gated.
set -euo pipefail
KAMATERA=root@45.61.58.125
SITE=emoji.agentabrams.com
HERE="$(cd "$(dirname "$0")/.." && pwd)"

# 1. DNS: A record emoji -> Kamatera (DNS-only, matches fleet pattern)
export $(grep -E "^CLOUDFLARE_API_TOKEN=" ~/Projects/secrets-manager/.env)
ZONE=$(curl -s -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  "https://api.cloudflare.com/client/v4/zones?name=agentabrams.com" \
  | python3 -c "import sys,json; print(json.load(sys.stdin)['result'][0]['id'])")
EXISTS=$(curl -s -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  "https://api.cloudflare.com/client/v4/zones/$ZONE/dns_records?name=$SITE" \
  | python3 -c "import sys,json; print(len(json.load(sys.stdin)['result']))")
if [ "$EXISTS" = "0" ]; then
  curl -s -X POST -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" -H "Content-Type: application/json" \
    "https://api.cloudflare.com/client/v4/zones/$ZONE/dns_records" \
    -d "{\"type\":\"A\",\"name\":\"emoji\",\"content\":\"45.61.58.125\",\"ttl\":300,\"proxied\":false}" \
    | python3 -c "import sys,json; r=json.load(sys.stdin); assert r['success'], r['errors']; print('DNS record created')"
else
  echo "DNS record already exists"
fi

# 2. Content
ssh $KAMATERA "mkdir -p /var/www/$SITE"
rsync -az --exclude .git --exclude deploy "$HERE/" $KAMATERA:/var/www/$SITE/
echo "content rsynced"

# 3. nginx (this conf is the post-certbot state; on a fresh box strip the :443 block first
#    so nginx -t passes before the cert exists, then let certbot re-add it).
scp -q "$HERE/deploy/$SITE.nginx" $KAMATERA:/etc/nginx/sites-available/$SITE
ssh $KAMATERA "ln -sf /etc/nginx/sites-available/$SITE /etc/nginx/sites-enabled/$SITE && nginx -t && systemctl reload nginx"
echo "nginx staged"

# 4. Wait for DNS, then SSL
for i in $(seq 1 30); do
  [ -n "$(dig +short $SITE @1.1.1.1)" ] && break
  sleep 10
done
ssh $KAMATERA "certbot --nginx -d $SITE --non-interactive --agree-tos -m steve@designerwallcoverings.com --redirect && systemctl reload nginx"
echo "SSL live — https://$SITE"