• English
  • Installation

    Choosing a method

    MethodSuitsNotes
    Docker ComposeMost casesApp, database, and cache orchestrated together; upgrade by pulling a new image
    A single Docker containerSingle-host trialSQLite or an external database instance
    BT panelExisting panel setupsSee docs/installation/BT.md in the repository
    KubernetesMultiple replicasUses the same listening port 8801 as the container deployment

    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:

    SQL_DSN=postgres://geekit:PASSWORD@db-host:5432/geekit

    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.

    REDIS_CONN_STRING=redis://:PASSWORD@redis-host:6379/0

    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.