Skip to main content

Server Provisioning

Server Provisioning — ɳSelf documentation.

nself Cloud provisions Hetzner VPS instances on your behalf. This page covers server types, regions, DNS setup, SSH bootstrap, and backup configuration.


Server Types

Type vCPU RAM Disk Hetzner Price
cx11 2 2 GB 20 GB ~€4.51/mo
cx21 2 4 GB 40 GB ~€8.21/mo
cx31 2 8 GB 80 GB ~€15.90/mo
cx41 4 16 GB 160 GB ~€30.99/mo
cx51 8 32 GB 240 GB ~€59.98/mo

Minimum: cx11 for development or light workloads. Recommended: cx21 for a personal ɳChat or ɳClaw backend. cx31 for teams or ɳTV.


Regions

Region Location Notes
fsn1 Falkenstein, Germany Default, best latency for EU
nbg1 Nuremberg, Germany EU alternative
hel1 Helsinki, Finland EU North, lower latency for Nordics
ash Ashburn, USA US East
hil Hillsboro, USA US West

Pick the region closest to your users.


DNS

During provisioning, nself Cloud creates a Cloudflare DNS A record pointing your chosen subdomain at the Hetzner server IP.

Your domain must be managed by Cloudflare (or you provide an existing server IP). If you bring your own DNS, set the A record yourself before provisioning completes, the health check waits up to 10 minutes for DNS propagation.


SSH Bootstrap

After the VM is up, the provisioner:

  1. Generates an SSH key pair for the server (private key stored encrypted in our database)
  2. SSHes in as root
  3. Runs the standard bootstrap:
    apt-get update -qq
    apt-get install -y docker.io docker-compose-plugin curl
    curl -sSL https://install.nself.org | bash
  4. Runs nself install with your configured plugins
  5. Sets up a daily backup cron via nself backup enable

The private SSH key is used only by the Cloud control plane for remote CLI commands (nself upgrade, log streaming, metrics). It is never exposed to users.


Automated Backups

Every provisioned server gets daily Hetzner Snapshots. Backups are retained for 30 days.

To restore from a backup:

  1. Dashboard → Servers → select server → Backups
  2. Choose a snapshot date
  3. Click Restore: the server is stopped, snapshot applied, then restarted

Restoration takes 5-15 minutes depending on disk size.


Provisioning Status

The dashboard polls /api/provision/[jobId] every 5 seconds during provisioning. Status values:

Status Meaning
queued Job created, waiting for worker
creating_vm Hetzner API call in progress
bootstrapping SSH into new VM, installing Docker + CLI
installing nself install running
configuring_dns Cloudflare A record being set
issuing_tls Let’s Encrypt cert request
health_check Waiting for stack to report healthy
running Complete, server is live
failed Provisioning failed, see error message

Destroying a Server

Dashboard → Servers → select server → Danger Zone → Destroy Server.

Destroying a server:

  1. Cancels the Stripe subscription (prorated credit applied)
  2. Runs nself destroy on the remote, stops all containers, removes volumes
  3. Deletes the Hetzner VM
  4. Removes the DNS A record
  5. Marks the server record as destroyed in the dashboard

Data is permanently deleted. Export your data before destroying.