feat(templates): add systemprompt (#1032)

* feat(templates): add systemprompt

* fix header comment: accurate in both repos
This commit is contained in:
Edward Burton
2026-07-20 03:09:19 +02:00
committed by GitHub
parent fff1708ebd
commit 34f3577b81
5 changed files with 117 additions and 0 deletions

View File

@@ -0,0 +1,56 @@
# Dokploy blueprint compose for the systemprompt gateway.
# Canonical copy: systempromptio/systemprompt-template deploy/dokploy/,
# published to Dokploy/templates blueprints/systemprompt/.
# Dokploy conventions: version 3.8, no ports/container_name/networks,
# main service name MUST equal the blueprint folder name (systemprompt).
version: "3.8"
services:
systemprompt:
image: ghcr.io/systempromptio/systemprompt-template:0
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
environment:
DATABASE_URL: postgres://systemprompt:${POSTGRES_PASSWORD}@postgres:5432/systemprompt
ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY}
OPENAI_API_KEY: ${OPENAI_API_KEY}
GEMINI_API_KEY: ${GEMINI_API_KEY}
EXTERNAL_URL: ${EXTERNAL_URL}
HOST: 0.0.0.0
PORT: 8080
expose:
- 8080
volumes:
- systemprompt_web:/app/web
- systemprompt_storage:/app/storage/data
- systemprompt_profiles:/app/services/profiles/docker
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/api/v1/health"]
interval: 30s
timeout: 10s
start_period: 300s
retries: 3
postgres:
image: postgres:18-alpine
restart: unless-stopped
environment:
POSTGRES_USER: systemprompt
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: systemprompt
volumes:
# postgres:18+ stores data under major-version subdirectories of
# /var/lib/postgresql — mounting the old .../data path aborts startup.
- postgres_data:/var/lib/postgresql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U systemprompt -d systemprompt"]
interval: 5s
timeout: 5s
retries: 10
volumes:
systemprompt_web:
systemprompt_storage:
systemprompt_profiles:
postgres_data:

View File

@@ -0,0 +1,23 @@
# systemprompt
## Getting started
1. Before the first deploy, set at least one AI provider key in **Environment**:
`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, or `GEMINI_API_KEY`. The container
will not boot without one.
2. Enable **HTTPS** (Let's Encrypt) on the generated domain. The app validates
`EXTERNAL_URL` and refuses plain `http://` origins other than localhost —
with HTTPS off it restart-loops with an "Invalid CORS origin" error.
3. Deploy. The first boot runs database migrations and the publish pipeline;
allow up to 5 minutes before the healthcheck goes green.
4. Verify at `https://<your-domain>/api/v1/health`, then open the domain root
for the admin UI.
## Notes
- `POSTGRES_PASSWORD` is auto-generated by the template; `EXTERNAL_URL` is
derived from the domain you assign.
- Web assets, storage, profile state, and Postgres data persist in the
`systemprompt_web`, `systemprompt_storage`, `systemprompt_profiles`, and
`postgres_data` volumes.
- Docs: https://systemprompt.io/documentation/

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="6" fill="#f79938"/>
<path d="M14 10 L8 16 L14 22" stroke="#fff" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
<path d="M24 10 L18 22" stroke="#fff" stroke-width="2.5" stroke-linecap="round" fill="none"/>
</svg>

After

Width:  |  Height:  |  Size: 384 B

View File

@@ -0,0 +1,16 @@
{
"id": "systemprompt",
"name": "systemprompt",
"version": "0.21.0",
"description": "Self-owned AI control plane: governance gateway for Claude, OpenAI, and Gemini with policy checks, audit trails, rate limits, and MCP orchestration. Requires at least one AI provider API key.",
"logo": "logo.svg",
"links": {
"github": "https://github.com/systempromptio/systemprompt-template",
"website": "https://systemprompt.io",
"docs": "https://systemprompt.io/documentation/"
},
"tags": [
"ai",
"self-hosted"
]
}

View File

@@ -0,0 +1,16 @@
[variables]
main_domain = "${domain}"
postgres_password = "${password:32}"
[config]
[[config.domains]]
serviceName = "systemprompt"
port = 8080
host = "${main_domain}"
[config.env]
POSTGRES_PASSWORD = "${postgres_password}"
EXTERNAL_URL = "https://${main_domain}"
ANTHROPIC_API_KEY = ""
OPENAI_API_KEY = ""
GEMINI_API_KEY = ""