Skip to main content

Deploy on Dokploy

Run the systemprompt.io gateway on Dokploy, a self-hostable PaaS, from a compose blueprint that provisions the gateway and Postgres.

Dokploy is a self-hostable PaaS. The systemprompt.io blueprint provisions the gateway plus a Postgres database from the public GHCR image, with a domain bound to port 8080 through Dokploy's Traefik proxy.

Pick Dokploy when you already run it, or you want a self-hosted control panel that handles domains, TLS, and compose services for you.

Quickstart

Once Dokploy/templates#1032 merges, systemprompt appears in every Dokploy install's template picker and on templates.dokploy.com. Until then, import it manually:

  1. Generate the base64 import payload from the deploy/dokploy/ files (a short Python snippet in the full recipe bundles docker-compose.yml and template.toml).
  2. Dashboard, your project, Create Service, Compose. Open the service's Advanced section, Import, paste the base64, Import. The compose file, environment (with a generated POSTGRES_PASSWORD), and a domain bound to port 8080 are populated for you.
  3. In Environment, set at least one provider key before the first deploy.
  4. In Domains, enable HTTPS (Let's Encrypt) on the generated domain. This is required, not optional.
  5. Deploy. First boot runs migrations and the publish pipeline, so allow up to 5 minutes before /api/v1/health reports healthy, then open the domain root for the admin UI.

Required keys

Set at least one of ANTHROPIC_API_KEY, OPENAI_API_KEY, or GEMINI_API_KEY before the first deploy. The container refuses to boot without a provider key, and blank values are safely ignored.

Domain and TLS

The chosen domain is injected as EXTERNAL_URL (always https://), so the gateway advertises the right public URL and CORS origin out of the box. HTTPS must be enabled: the gateway rejects plain http:// origins other than localhost, and with HTTPS off the container restart-loops with an "Invalid CORS origin" error. POSTGRES_PASSWORD is auto-generated; if you set it manually, do so before the first deploy, since Postgres initialises its volume with the first password it sees.

More detail

For the full import snippet and troubleshooting, see the complete Dokploy recipe in the template repository. For Dokploy itself (projects, domains, TLS), see the Dokploy documentation.