Documentation
Self-hosting
Run Katagami with PostgreSQL and storage that you control.
Choose your storage
Production Compose starts only PostgreSQL and Katagami. It does not run MinIO. Point Katagami at an S3-compatible bucket that you operate.
cp .env.prod.example .env
chmod 600 .env
docker compose --env-file .env -f docker-compose.prod.yml up --build -d
The example uses an external MinIO service:
S3_ENDPOINT=https://minio.example.internal
S3_FORCE_PATH_STYLE=true
Use S3_FORCE_PATH_STYLE=false for AWS S3. The storage identity needs HeadBucket,
CreateBucket, GetObject, and PutObject permissions. Katagami uses conditional
object creation, so the provider must support If-None-Match: *.
Protect the service
The container binds the renderer to 127.0.0.1. Put a TLS reverse proxy and your own
access policy in front of it when remote clients need access. Keep PostgreSQL private.
Treat .env as a secret.
Upgrade safely
- Back up PostgreSQL and the object-storage bucket.
- Start one updated renderer.
- Call
GET /v1/templatesand render a known template version. - Start more renderer replicas only after the first renderer loads successfully.
Schema migrations move forward only. A manifest and the objects it names are one durable unit, so restore both PostgreSQL and object storage together.