Skip to main content
This guide covers deploying Hyperspeed on a public server — a VPS, a cloud VM, or a managed hosting panel that runs Docker Compose. Caddy handles TLS automatically using Let’s Encrypt once you point DNS at your server.
Hyperspeed supports one organization per database. The first user to register creates the workspace through a setup wizard. Subsequent users join via invites or open registration (with admin approval). If you need multiple isolated workspaces, run separate Compose stacks with separate databases.

Requirements

  • A server running Docker and Docker Compose v2
  • Ports 80 and 443 available on the host (used by Caddy)
  • A domain name with DNS you control
  • The full repository cloned on the server — not just docker-compose.yml

Deploy to a server

1

Clone the full repository

SSH into your server and clone the entire repository. The Compose file builds apps/api and apps/web; a standalone docker-compose.yml is not enough.
All subsequent commands run from this directory (the repository root, where docker-compose.yml lives).
2

Point DNS at your server

Create an A record (and an AAAA record if your server has IPv6) for your chosen hostname pointing to the server’s public IP address.
Caddy uses the HTTP-01 ACME challenge on port 80 to obtain a certificate from Let’s Encrypt. DNS must resolve before you start the stack, or certificate issuance will fail.
3

Configure your production .env

Copy the example file and set all required variables:
The table below lists every variable you must set for a production deployment.A minimal production .env looks like this:
Do not include https:// in CADDY_PUBLIC_HOST. It must be the hostname only. Setting it to https://app.example.com will break Caddy’s site block.
4

Open required ports

Ensure your server’s firewall or security group allows inbound traffic on these ports:If your hosting panel already occupies ports 80 or 443, consult your panel’s reverse-proxy documentation or adjust the port bindings in docker-compose.yml.
5

Build and start the stack

From the repository root:
Compose builds the API and web images, then starts all six services. Caddy contacts Let’s Encrypt and obtains a certificate for CADDY_PUBLIC_HOST automatically.
6

Verify the deployment

Check that the API is healthy:
A successful response looks like:
GET /health is the canonical health check endpoint. Use it in your load balancer, uptime monitor, or hosting panel’s health probe. It returns "status":"ok" when the API is running and connected to Postgres and Redis. The version and git_sha fields are populated when the image is built with the VERSION and GIT_SHA build args (set HYPERSPEED_VERSION and HYPERSPEED_GIT_SHA in .env and they are forwarded as build args by docker-compose.yml).
Then open https://app.example.com in a browser. The first visit triggers the setup wizard.
7

Complete the setup wizard

Register as the first user. Because no organization exists yet, the registration flow launches the setup wizard:
  1. Enter your name, email, and password.
  2. Name your workspace (organization).
  3. Review the hostname shown in the wizard — it should match your public URL.
After finishing, you are the workspace admin. Invite teammates from workspace settings.

Port reference

Environment variable reference

For all available variables including optional ones, see Environment Variables.

Workspace limit

The open-source Hyperspeed stack allows at most one organization per database. The first user to register creates that organization through the setup wizard. If you need multiple isolated teams, deploy separate stacks with separate databases — do not attempt to create a second organization in the same database.
If the API detects more than one organization in the database (for example after a legacy data migration), it logs a warning at startup and refuses to create additional organizations until only one remains.

Next steps

  • Custom domains and subdomains — See the Domains guide for BYO domain configuration and optional *.hyperspeedapp.com subdomains.
  • TLS behind another proxy — See the TLS guide if Caddy sits behind Traefik, nginx, or a cloud load balancer.
  • Backups — See Backups for Postgres and MinIO backup strategies.
  • Upgrades — See Upgrades for the upgrade process and breaking change notes.