Create a Hetzner orchestrator with systemd and tailnet HTTPS access.
Create an always-on orchestrator in a gateway’s Hetzner private network.
For a VPS or another Linux machine without this gateway setup, host usine on a Linux server.
Prerequisites
Section titled “Prerequisites”A configured gateway and private network, a matching usine checkout, hcloud, SSH keys registered in the Hetzner project, and Tailscale with MagicDNS and HTTPS certificates enabled. Use remote workers; this server image has no child harnesses.
Procedure
Section titled “Procedure”-
In the tailnet policy, permit your devices to reach
tag:usine-orchestratoron TCP 22 and 443, and configure who can apply that tag. Remove broader grants that would allow unintended access. -
Create the server from the checkout:
Terminal window SSH_KEY=usine-worker ./infra/hetzner/gateway/gateway.sh orchestrator ~/.ssh/id_ed25519.pubThe script creates its private-network connection, firewall, Unix user, Node.js installation, global usine package, and systemd units. It prints the private address.
-
Wait for cloud-init through the gateway, then join the tailnet and publish HTTPS:
Terminal window ssh -J usine-gateway -i ~/.ssh/usine_worker root@10.42.0.4 cloud-init status --waitGATEWAY_SSH=usine-gateway ./infra/hetzner/gateway/gateway.sh orchestrator-tailnet-up -i ~/.ssh/usine_workerReplace the sample private address. Complete the printed Tailscale login. The script enables nftables, which restricts SSH to the tailnet, and prints the HTTPS address.
-
Connect as
usineover the tailnet. Set up the gateway and worker SSH aliases, private keys, and trusted known-hosts entries in/home/usine/.ssh/. Checkssh usine-gateway trueand each fixed worker connection as this user. -
Create
/home/usine/factoryand initialize it using the quickstart, or move an existing instance. Configure remote workers. SetUSINE_ORIGINin the instance’s private.envto the printed HTTPS address, and, for agents withcoordinator: session, supply the Pi parent credential as theusineuser. -
Start the service from the instance folder:
Terminal window systemctl start usine.servicejournalctl -u usine.service -fComplete setup and member enrollment through the local sign-in link before sharing access.
Check the result
Section titled “Check the result”usine status reports usine.service as managed with systemctl. The HTTPS UI requires sign-in and shows the expected projects and workers. Startup recovery finishes before readiness succeeds.
The unit starts at boot and restarts after failures. Run usine stop or usine restart from the instance folder to retain systemd management. The service reads .env itself and inherits no shell variables. Keep credentials there or in its configured credential files.
The listener stays on loopback. Tailscale access rules restrict network reachability; instance role bindings govern product access. Upgrade an instance describes the included upgrade helper.