Techservice.cloud

Provisioning

How Techservice creates and tracks managed servers without blocking web requests.

Provisioning must be asynchronous. Creating a server, waiting for networking, validating DNS, and registering checks can take longer than a web request should handle.

Flow

  1. A customer submits a server request or completes payment.
  2. The app writes a server record and a provisioning job to Supabase.
  3. A BullMQ job is pushed to Redis.
  4. A worker creates the server through Hetzner or Netcup.
  5. The worker waits for IPv4 assignment.
  6. The worker installs the selected runtime, such as Coolify.
  7. DNS records are created through Cloudflare when needed.
  8. Health checks are registered in Uptime Kuma.
  9. The dashboard receives updated status and event history.

Job states

StateMeaning
PendingRequest is stored but not claimed by a worker yet.
ProvisioningProvider work or runtime installation is in progress.
WaitingAn external dependency is not ready yet, such as DNS propagation.
OnlineServer is ready and checks are registered.
FailedThe worker needs operator review or retry.

Worker requirements

Provisioning jobs should be idempotent. Retrying a job must not create duplicate provider servers, duplicate DNS records, or duplicate monitoring checks.

Every long-running step should write a durable event so the dashboard can show useful progress instead of a vague loading state.

On this page