deploy: production moved to OVH BHS128b (native PM2/Postgres), release procedure; Mac copy kept cold
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2 changed files +19 −7
modified
CLAUDE.md
+8 −6
@@ -52,9 +52,11 @@ pytest # tests/ (fixtures in tests/fixtures, no live ne | ||
| 52 | 52 | CelesTrak blocks a second download of the same GP group within 2 h (HTTP 403 "has not updated") — the connector treats it as *unchanged*; |
| 53 | 53 | `si run celestrak_gp --file active=/path/active.json` ingests a local snapshot. |
| 54 | 54 | |
| 55 | −## Production (MacLustr) | |
| 56 | − | |
| 57 | −Deployed by `mld` on **M2M32b** (Mac Studio, dedicated): PM2 `satelliteindex-api` (uvicorn 127.0.0.1:8311), `satelliteindex-scheduler` | |
| 58 | −(`si schedule`), `satelliteindex-web` (Next :8310). Postgres 17 + Redis via Homebrew on the node; data in `~/satelliteindex-data/` | |
| 59 | −(raw snapshots, backups, logs). Public route: MacLustr Tunnel (BHS64 Caddy) `https://www.satelliteindex.io → M2M32b:8310`, apex redirected. | |
| 60 | −Manifest: `deploy/satelliteindex.mld.json` → `M1M32:~/dispatch/apps/satelliteindex.json`. See `docs/DEPLOY.md`. | |
| 55 | +## Production | |
| 56 | + | |
| 57 | +**Since 2026-09-14: OVH server BHS128b** (`ssh BHS128b`, Ubuntu 24.04), outside `mld`: PM2 under systemd (`~/apps/pm2.satelliteindex.config.cjs`, | |
| 58 | +generated from the mld manifest kept in `~/apps/.manifests/`) — `satelliteindex-api` (uvicorn 127.0.0.1:8311), `satelliteindex-scheduler` | |
| 59 | +(`si schedule`), `satelliteindex-web` (Next :8310). Postgres 17 + Redis native; code `~/apps/satelliteindex` (uv Python 3.12 venv), data in | |
| 60 | +`~/satelliteindex-data/`. Public route: MacLustr Tunnel (BHS64 Caddy) `https://www.satelliteindex.io → wg1 10.67.0.62:8310`, apex redirected. | |
| 61 | +Release = rsync + `uv pip install -e .` + `si migrate` + web build + `pm2 restart` (exact command in `docs/DEPLOY.md`). | |
| 62 | +Former home: M2M32b via `mld` (manifest `deploy/satelliteindex.mld.json`), kept as a cold copy. | |
modified
docs/DEPLOY.md
+11 −1
@@ -1,6 +1,16 @@ | ||
| 1 | 1 | # Deploying SatelliteIndex on MacLustr |
| 2 | 2 | |
| 3 | −Production runs on **M2M32b** (Mac Studio M2 Max, 12 c / 32 GB, dedicated) behind the MacLustr Tunnel (BHS64 Caddy → wg1 10.67.0.19). | |
| 3 | +> **Since 2026-09-14 production runs on the OVH server BHS128b** (`ssh BHS128b`, ubuntu@51.161.112.85, Ubuntu 24.04, 16 threads / 128 GB), | |
| 4 | +> outside `mld`: code in `~/apps/satelliteindex` (venv `.venv` = uv Python 3.12, `uv pip install -e .`), Postgres 17 native (db/role | |
| 5 | +> `satelliteindex`/`satelliteindex`, pg_trgm + uuid-ossp, en_US.UTF-8), Redis native db 4 (facet cache, rebuilt on the fly), data in | |
| 6 | +> `~/satelliteindex-data`, PM2 under systemd (`pm2-ubuntu`) with `~/apps/pm2.satelliteindex.config.cjs` generated from the mld manifest by | |
| 7 | +> `~/apps/.manifests/gen-pm2.py` (secrets, 0600). Tunnel route: `mlt add www.satelliteindex.io BHS128b:8310` (BHS64 Caddy → wg1 10.67.0.62); | |
| 8 | +> firewall `ufw allow in on wg1 from 10.67.0.1 to any port 8310 proto tcp`. | |
| 9 | +> **Release on BHS128b**: `rsync -az --exclude .venv --exclude node_modules --exclude .git --exclude 'apps/web/.next' --exclude data . BHS128b:apps/satelliteindex/` | |
| 10 | +> then `ssh BHS128b 'cd apps/satelliteindex && ~/.local/bin/uv pip install --python .venv/bin/python -e . && DATABASE_URL=postgresql+asyncpg://satelliteindex:satelliteindex@127.0.0.1:5432/satelliteindex SI_DATA_DIR=$HOME/satelliteindex-data .venv/bin/si migrate && pnpm install --frozen-lockfile && (cd apps/web && API_URL=http://127.0.0.1:8311 NEXT_PUBLIC_SITE_URL=https://www.satelliteindex.io pnpm build) && pm2 restart satelliteindex-api satelliteindex-scheduler satelliteindex-web && pm2 save'`. | |
| 11 | +> The M2M32b copy (code, Postgres `satelliteindex`, `~/satelliteindex-data`) is kept as a cold copy, retired from `mld` (`--keep-dir`). | |
| 12 | + | |
| 13 | +Production formerly ran on **M2M32b** (Mac Studio M2 Max, 12 c / 32 GB, dedicated) behind the MacLustr Tunnel (BHS64 Caddy → wg1 10.67.0.19). | |
| 4 | 14 | Everything goes through the gateway M1M32 and `mld` (see `~/Desktop/cluster-skill/mld`). |
| 5 | 15 | |
| 6 | 16 | ## Topology |
| 7 | 17 | |