Deploy on Dokploy
Run the systemprompt.io gateway on Dokploy, a self-hostable PaaS, from a compose blueprint that provisions the gateway and Postgres.
On this page
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:
- Generate the base64 import payload from the
deploy/dokploy/files (a short Python snippet in the full recipe bundlesdocker-compose.ymlandtemplate.toml). - 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. - In Environment, set at least one provider key before the first deploy.
- In Domains, enable HTTPS (Let's Encrypt) on the generated domain. This is required, not optional.
- Deploy. First boot runs migrations and the publish pipeline, so allow up to 5 minutes before
/api/v1/healthreports 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.