Installation
Choosing a method
Ports
The Geekit API and the integrated service both listen on 8801. The frontend
dev servers use separate ports and take no part in production. When publishing,
the ingress layer (Caddy or Nginx) terminates TLS and proxies to 8801.
Database
Use PostgreSQL in production. Point SQL_DSN at it:
Without SQL_DSN, the container falls back to SQLite and stores data in the
mounted /sqlite directory.
The log database can be split out with LOG_SQL_DSN; unset means it shares the
main database.
Cache
Setting REDIS_CONN_STRING enables Redis for rate limiting, distributed
caching, and shared state across replicas. Redis is mandatory for multi-replica
deployments.
Multiple replicas
Only the master node applies schema changes and runs scheduled jobs. Start the
others with NODE_TYPE=slave. Every replica must share one database and one
Redis instance.
Reverse proxy
The ingress layer must let SSE (streamed responses) through: disable response
buffering and raise read timeouts to minutes, otherwise long answers get cut off
mid-stream. Use /api/status for health checks.
Data changes
Schema and data changes that must reach existing installations ship as versioned
revisions under migration/. They are recorded by ordered ID in the
schema_revisions table and replayed by the master node at startup. An applied
revision is never edited, renamed, or reordered.