D 2026-03-15T20:41:02.438 L Home N text/x-markdown P 4b56535044165eaf78dbc2a402aae50408aeae598ce791fe5abd009f3dc39018 U dmestas W 3778 # infra Infrastructure-as-code for `vps-nbg1` (Hetzner, Ubuntu 24.04 LTS, arm64). This repo contains install scripts, config templates, and documentation for all services running on the VPS. Each service is self-contained under its own directory with idempotent install scripts. --- ## Services ``` pikchr # Top band: Internet / Cloudflare right CF: box "Cloudflare" color white fill 0x2a4a6b width 5.8 height 0.45 rad 4px # VPS outline VPS: box width 5.8 height 3.8 rad 8px at CF.s + (0, -2.35) fill 0xfafaf0 # Fossil stack (left third) down CFD: box "cloudflared" color white fill 0x5b4a8a width 1.4 height 0.4 rad 4px \ at VPS.nw + (0.9, -0.5) arrow from CFD.s down 0.15 color 0x888888 CDY: box "Caddy :8090" color white fill 0x5b4a8a width 1.4 height 0.4 rad 4px arrow from CDY.s down 0.15 color 0x888888 FSL: box "Fossil :8081" color white fill 0x3a6b3a width 1.4 height 0.4 rad 4px text "edgesync" at FSL.s + (0, -0.18) small text "go-libfossil, infra" at FSL.s + (0, -0.35) small # NATS stack (right third) NT: box "nats-server :4222" color white fill 0x2a4a8a width 1.7 height 0.4 rad 4px \ at VPS.ne + (-1.0, -0.5) arrow from NT.s down 0.15 color 0x888888 JS: box "JetStream" color white fill 0x2a4a8a width 1.7 height 0.4 rad 4px arrow from JS.s down 0.15 color 0x888888 ES: box "EDGESYNC" fill 0xddeeff width 1.5 height 0.35 rad 4px at JS.s + (0, -0.38) box "GO_LIBFOSSIL" fill 0xddeeff width 1.5 height 0.35 rad 4px at ES.s + (0, -0.45) # Coolify (centre) box "Coolify :8000" fill 0xfff0cc width 1.4 height 0.4 rad 4px at VPS.n + (0, -0.7) box "excalidraw" fill 0xfff0cc width 1.4 height 0.4 rad 4px at VPS.n + (0, -1.25) # Arrows from Cloudflare down arrow from CF.s + (-1.9, 0) down 0.1 color white thick text "fossil." small at CF.s + (-1.9, -0.2) arrow from CF.s + (1.9, 0) down 0.1 color white thick text "sync. :4222" small at CF.s + (1.9, -0.2) ``` | Service | Directory | Endpoint | |---------|-----------|---------| | **NATS Server** | `nats/` | `tls://sync.craftdesign.group:4222` | | Fossil SCM | *(managed separately)* | `https://fossil.craftdesign.group/` | | Coolify | *(managed separately)* | `http://localhost:8000` | --- ## NATS Documentation - [NATS Server — Setup & Architecture](NATS Server — Setup & Architecture) - [NATS Server — Operations Runbook](NATS Server — Operations Runbook) - [NATS Server — Docker Image](NATS Server — Docker Image) --- ## Repository Layout ``` nats/ install.sh Phase 1 — binary, user, dirs, TLS cert, systemd unit bootstrap-creds.sh Phase 2 — nsc operator/accounts/users, .creds files start.sh Phase 3 — render config, start service, copy JWTs provision-streams.sh Phase 4 — create JetStream streams nats-server.conf.template Config template (envsubst vars: OPERATOR_JWT, SYS_ACCOUNT_KEY) nats.service Systemd unit Dockerfile Container image (24 MB, tested) docker-entrypoint.sh Entrypoint — renders config, starts server creds/ *.creds files (fossil-ignored, not committed) docs/ superpowers/ specs/ Design documents plans/ Implementation plans ``` --- ## Quickstart — Re-installing NATS ```sh cd ~/Projects/infra export NATS_VERSION=2.10.22 sudo --preserve-env=NATS_VERSION bash nats/install.sh # Phase 1 (root) bash nats/bootstrap-creds.sh # Phase 2 (dmestas) sudo bash nats/start.sh # Phase 3 (root) bash nats/provision-streams.sh # Phase 4 (dmestas) ``` Z 9039f58355a8d504d452411befe179a8