← back to Wallco Ai
Add curator.wallpapersback.com tunnel finish-script (post cloudflared-login: create tunnel, ingress, DNS route, LaunchAgent)
a641549ca997efac0ca7d457ca326c65bd2e867d · 2026-06-24 11:22:56 -0700 · Steve
Files touched
A deploy/curator-tunnel-finish.sh
Diff
commit a641549ca997efac0ca7d457ca326c65bd2e867d
Author: Steve <steve@designerwallcoverings.com>
Date: Wed Jun 24 11:22:56 2026 -0700
Add curator.wallpapersback.com tunnel finish-script (post cloudflared-login: create tunnel, ingress, DNS route, LaunchAgent)
---
deploy/curator-tunnel-finish.sh | 65 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 65 insertions(+)
diff --git a/deploy/curator-tunnel-finish.sh b/deploy/curator-tunnel-finish.sh
new file mode 100755
index 0000000..b4ac3d0
--- /dev/null
+++ b/deploy/curator-tunnel-finish.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+# curator-tunnel-finish.sh — run AFTER `cloudflared tunnel login` succeeds.
+# Idempotent: creates the wpb-curator tunnel, writes its ingress config, routes
+# curator.wallpapersback.com → the tunnel, and installs a persistent LaunchAgent.
+# No sudo. Requires ~/.cloudflared/cert.pem (from `cloudflared tunnel login`).
+set -euo pipefail
+
+TUNNEL=wpb-curator
+HOSTNAME=curator.wallpapersback.com
+LOCAL_NGINX=http://127.0.0.1:9916
+CFDIR="$HOME/.cloudflared"
+PLIST="$HOME/Library/LaunchAgents/com.steve.wpb-curator-tunnel.plist"
+
+[ -f "$CFDIR/cert.pem" ] || { echo "ERROR: $CFDIR/cert.pem missing — run 'cloudflared tunnel login' first."; exit 1; }
+
+# 1. Create the tunnel if it doesn't exist; capture its UUID.
+if ! cloudflared tunnel list 2>/dev/null | awk '{print $2}' | grep -qx "$TUNNEL"; then
+ echo "→ creating tunnel $TUNNEL"
+ cloudflared tunnel create "$TUNNEL"
+else
+ echo "→ tunnel $TUNNEL already exists"
+fi
+TID=$(cloudflared tunnel list 2>/dev/null | awk -v n="$TUNNEL" '$2==n{print $1}')
+echo " tunnel id: $TID"
+CREDS="$CFDIR/$TID.json"
+
+# 2. Write ingress config.
+cat > "$CFDIR/config.yml" <<YAML
+tunnel: $TID
+credentials-file: $CREDS
+ingress:
+ - hostname: $HOSTNAME
+ service: $LOCAL_NGINX
+ - service: http_status:404
+YAML
+echo "→ wrote $CFDIR/config.yml"
+
+# 3. Route the hostname to this tunnel (creates the proxied CNAME in the CF zone).
+cloudflared tunnel route dns "$TUNNEL" "$HOSTNAME" 2>&1 | sed 's/^/ /' || true
+
+# 4. Persistent LaunchAgent (auto-respawn, survives reboot/login).
+cat > "$PLIST" <<PLISTEOF
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0"><dict>
+ <key>Label</key><string>com.steve.wpb-curator-tunnel</string>
+ <key>ProgramArguments</key>
+ <array>
+ <string>$(command -v cloudflared)</string>
+ <string>tunnel</string><string>--config</string><string>$CFDIR/config.yml</string>
+ <string>run</string><string>$TUNNEL</string>
+ </array>
+ <key>RunAtLoad</key><true/>
+ <key>KeepAlive</key><true/>
+ <key>StandardOutPath</key><string>$HOME/Library/Logs/wpb-curator-tunnel.log</string>
+ <key>StandardErrorPath</key><string>$HOME/Library/Logs/wpb-curator-tunnel.log</string>
+</dict></plist>
+PLISTEOF
+echo "→ wrote $PLIST"
+
+launchctl bootout "gui/$(id -u)/com.steve.wpb-curator-tunnel" 2>/dev/null || true
+launchctl bootstrap "gui/$(id -u)" "$PLIST"
+launchctl kickstart -k "gui/$(id -u)/com.steve.wpb-curator-tunnel" 2>/dev/null || true
+echo "✓ tunnel service installed + started. Log: ~/Library/Logs/wpb-curator-tunnel.log"
+echo " (curator.wallpapersback.com resolves only after the GoDaddy→Cloudflare NS cutover.)"
← d5ea384 auto-save: 2026-06-23T16:22:58 (1 files) — data/logs/gate-re
·
back to Wallco Ai
·
Add API-path tunnel finish-script (DTD-C: scoped CF token, n 6a41dda →