CodeIssuesDiscussionsWikiPull RequestsProjectsCommitsActionsReleasesContributorsPulse● GatesSecuritySettingsDeploymentsPipelineInsightsAgents✨ Explain✨ Ask AI✨ Workspace✨ Spec✨ Tests▓ Debt Map✨ NL Search🏛 Archaeology
Blame · Line-by-line history
DEPLOY_METAL.md
Each line is annotated with the commit that last touched it. Click any SHA to jump to that commit and see the surrounding change.
| fe8ae12 | 1 | # DEPLOY_METAL.md — Hetzner Gluecron-1 deploy |
| 5843260 | 2 | |
| fe8ae12 | 3 | Prod home: **Hetzner Cloud server `Gluecron-1`** at `178.104.208.252` |
| 4 | (Falkenstein, eu-central, CPX22 x86 80GB). Replaces the obsolete Vultr | |
| 5 | box at `45.76.171.37`. | |
| 6 | ||
| 7 | This is the shortest path to gluecron.com being live on Hetzner. The | |
| 8 | `Dockerfile`, `docker-compose.yml`, and `Caddyfile` in the repo bring | |
| 9 | up the app + reverse proxy + auto-HTTPS in one command. Cloudflare DNS | |
| 10 | remains the resolver; Cloudflare proxying stays OFF so Let's Encrypt | |
| 11 | can complete HTTP-01. | |
| 5843260 | 12 | |
| 13 | ## What's already in place | |
| 14 | ||
| fe8ae12 | 15 | - DNS target: `gluecron.com` + `www.gluecron.com` A-records should point at |
| 16 | `178.104.208.252`, proxy status "DNS only" (grey cloud) in Cloudflare. | |
| 17 | If they still point at `45.76.171.37`, fix that first. | |
| 18 | - `Dockerfile`, `docker-compose.yml`, `Caddyfile` are all in the repo. | |
| 19 | `docker compose up -d` brings up both the app and Caddy (auto-HTTPS | |
| 20 | via Let's Encrypt). | |
| 21 | - App exposes `/healthz`, `/readyz`, `/status`, `/metrics`. | |
| 5843260 | 22 | |
| 23 | ## One-time box setup | |
| 24 | ||
| fe8ae12 | 25 | 1. SSH in: `ssh root@178.104.208.252` (or use the Hetzner Console "Open Console" button) |
| 5843260 | 26 | 2. Install Docker (skip if already installed): |
| 27 | ```sh | |
| fe8ae12 | 28 | command -v docker >/dev/null || curl -fsSL https://get.docker.com | sh |
| 5843260 | 29 | ``` |
| 30 | 3. Clone the repo: | |
| 31 | ```sh | |
| 32 | git clone https://github.com/ccantynz-alt/Gluecron.com.git /opt/gluecron | |
| 33 | cd /opt/gluecron | |
| fe8ae12 | 34 | git checkout claude/new-session-xk1l7 # while this branch is the deploy target |
| 5843260 | 35 | ``` |
| fe8ae12 | 36 | 4. Create `.env` (copy from `.env.example` and fill real values — at |
| 5843260 | 37 | minimum `DATABASE_URL` pointing at Neon): |
| 38 | ```sh | |
| 39 | cp .env.example .env | |
| fe8ae12 | 40 | nano .env |
| 5843260 | 41 | ``` |
| 42 | ||
| 43 | ## Deploy | |
| 44 | ||
| 45 | ```sh | |
| 46 | cd /opt/gluecron | |
| 47 | git pull | |
| 48 | docker compose up -d --build | |
| 49 | ``` | |
| 50 | ||
| fe8ae12 | 51 | First run: Caddy requests Let's Encrypt certs. Watch: |
| 5843260 | 52 | ```sh |
| 53 | docker compose logs -f caddy | |
| 54 | ``` | |
| 55 | ||
| 56 | Once you see `certificate obtained successfully`, hit: | |
| 57 | - `https://gluecron.com/healthz` → `ok` | |
| 58 | - `https://gluecron.com/readyz` → `ok` | |
| 59 | - `https://gluecron.com/status` → status page | |
| fe8ae12 | 60 | - `https://gluecron.com/metrics` → Prometheus-format metrics |
| 5843260 | 61 | |
| 62 | ## First-time DB migration | |
| 63 | ||
| 64 | ```sh | |
| 65 | docker compose exec gluecron bun run db:migrate | |
| 66 | ``` | |
| 67 | ||
| 68 | ## Later redeploys | |
| 69 | ||
| 70 | ```sh | |
| 71 | cd /opt/gluecron && git pull && docker compose up -d --build | |
| 72 | ``` | |
| 73 | ||
| 74 | ## Rollback | |
| 75 | ||
| 76 | ```sh | |
| 77 | cd /opt/gluecron && git checkout <prev-sha> && docker compose up -d --build | |
| 78 | ``` | |
| 79 | ||
| fe8ae12 | 80 | ## Decommission the old Vultr box |
| 81 | ||
| 82 | The Vultr server at `45.76.171.37` was the previous home and now serves | |
| 83 | stale content. Once Hetzner Gluecron-1 is serving correctly and DNS has | |
| 84 | fully propagated (check from a phone on cellular), destroy the Vultr | |
| 85 | box via its provider dashboard. | |
| 86 | ||
| 87 | ## When Crontech absorbs hosting | |
| 5843260 | 88 | |
| fe8ae12 | 89 | Gluecron stays where it is. Crontech-prod-01 (Hetzner, `178.156.251.6`, |
| 90 | Ashburn) becomes the deploy target for additional empire projects via | |
| 91 | the BLK-009 git-push pipeline. Gluecron-1 keeps serving the git host + | |
| 92 | CI surface; Crontech keeps serving the deploy + runtime surface. |