# verae-bootstrap Clone every Verae Time × Zapier **module repo** from Forgejo and install Node dependencies. Each **server type** has its own directory under `types/` (repos list + README + start notes). **Forgejo:** https://git.georgelambert.org/marchon/verae-bootstrap **SSH:** `ssh://git@git.georgelambert.org:2223/marchon/verae-bootstrap.git` ## Host requirements `scripts/host-deps.sh` **checks** this machine and **installs** anything missing (Debian/Ubuntu `apt`, Alpine `apk`, Node tarball, `nats-server` release). Table: [HOST-DEPS.md](HOST-DEPS.md). Manifest: `host-deps.tsv`. ```bash bash scripts/host-deps.sh --check --type ns1-all-in-one bash scripts/host-deps.sh --type ns1-all-in-one # install ``` | Need | Why | |------|-----| | Node 20+ (`node`, `npm`); middleware wants **22** | All HTTP and worker processes | | Git + SSH to Forgejo **port 2223** | `git clone ssh://git@git.georgelambert.org:2223/marchon/.git` | | `python3` `make` `g++` | Native addon `better-sqlite3` on **zappier-edge** (rebuild on Linux) | | `nats-server -js` on **127.0.0.1:4222** | Archive / all-in-one types only — never a public bind | | `curl` | Health probes | Alpine first line if `bash` is missing: `apk add --no-cache bash git curl`. Zapier cloud never talks to NATS. Do not publish `:4222`. ## Fetch ```bash git clone ssh://git@git.georgelambert.org:2223/marchon/verae-bootstrap.git cd verae-bootstrap export VERAE_SRC=$HOME/verae-src bash scripts/fetch.sh # every repo bash scripts/fetch.sh ns1-all-in-one # one server type ``` `scripts/fetch.sh` runs `host-deps.sh` (OS + Node), then `clone.sh` (`main`), then `install-deps.sh` (`npm install` **on the target OS**, then `npm rebuild`). Do not copy `node_modules` from macOS onto Linux — native addons such as `better-sqlite3` will fail with `invalid ELF header`. ## Server types | Type | Directory | What that host runs | |------|-----------|---------------------| | **ns1-all-in-one** | `types/ns1-all-in-one/` | Control plane + archive workers + keep (NS1 / 70.88.205.138) | | **control-plane** | `types/control-plane/` | Fleet, edges, IAM, billing HTTP (no worm/tree floor) | | **ns1-archive** | `types/ns1-archive/` | NATS + worm ×3 + tree-node ×3 + poller + webhook + aggregator + keep | | **lan-worker** | `types/lan-worker/` | Extra SSH worker (tree-node, archive-worm). Keep disabled until SSH works (`lan-134`). | Each type has `repos.txt` (subset of the master list) and `README.md`. ## NS1 all-in-one notes `:3000` on 70.88.205.138 is already a public app. zappier-edge on that box binds **127.0.0.1:13000**. Public portal remains **access-web `:3021/portal/`**. Archive workers are owned by **verae-keep**; fleet does not double-spawn them.