Hetzner Bootstrap
Date: 2026-05-05
Objective
Define the first server bootstrap gate for the Hetzner rebuild.
This is not an auto-install script. It is a readiness checklist for the server before source sync, Docker builds, env validation, and health checks.
What Was Added
scripts/hetzner-bootstrap.mjsRead-only host bootstrap checker.package.jsonscripts:hetzner:bootstrap:planhetzner:bootstraphetzner:bootstrap:check
Bootstrap Commands
Print the bootstrap plan:
npm run hetzner:bootstrap:plan
Inspect the current host:
npm run hetzner:bootstrap
Run the strict bootstrap gate:
npm run hetzner:bootstrap:check
What The Gate Checks
The bootstrap gate checks:
- native Linux x64/amd64 host;
- Node.js 20+;
- at least 8 GiB RAM, with 16 GiB recommended;
npm;- Docker Engine;
- Docker Compose;
rsync;curl;tar;gzip;openssl;lsof;- Docker daemon availability;
- whether the current user can reasonably run Docker.
Server Preparation Order
Use this sequence on Hetzner:
- Provision the server.
- Create or choose a non-root deploy user.
- Install Node.js 20+, npm, Docker Engine, Docker Compose, rsync, curl, tar, gzip, openssl, and lsof.
- Make Docker usable by the deploy user through the
dockergroup or an intentional sudo policy. - Configure firewall policy:
- allow SSH from trusted admin IPs;
- allow
80/tcpand443/tcpwhen the reverse proxy is ready; - keep internal staging ports private unless intentionally debugging.
- Sync the project source.
- Run
npm install. - Run
npm run hetzner:bootstrap:check. - Run
npm run hetzner:host:check.
Only after those pass should the staging env files, image builds, and health checks be treated as the next milestone.
Current Verification Evidence
npm run hetzner:bootstrap:planprints the server bootstrap order.npm run hetzner:bootstrapruns locally and reports why this Mac is not the target host.npm run hetzner:bootstrap:checkis expected to fail locally because this Mac is not native Linux x64/amd64 and does not have Docker Compose in the local Docker CLI.
Known Blockers
- No Hetzner server bootstrap evidence exists yet.
- Exact installation commands depend on the chosen Linux image and should be run from that server's maintained package/vendor instructions.