fikadesk cloud is in private alpha. Cells are provisioned by hand and the product is not ready for real customers yet.

Request early access

Self-host

One box, one image, Docker Compose. The single profile runs Caddy, Postgres 18, PgBouncer, Centrifugo, a one-shot migration job, the api, the worker and the mail ingest.

Quickstart

Shell
cp deploy/compose/.env.example deploy/compose/.env
openssl rand -hex 24   # POSTGRES_PASSWORD, FIKADESK_APP_PASSWORD
openssl rand -hex 32   # FIKADESK_AUTH_SECRET, FIKADESK_REALTIME_SECRET
$EDITOR deploy/compose/.env
docker compose -f deploy/compose/compose.yml --profile single up -d --wait
curl http://127.0.0.1/healthz

The first up builds the derived Postgres image and needs network access and a minute or two; later starts reuse it.

First administrator

With sign-up closed, the api prints a one-time setup token while the users table is empty. Spend it on the first administrator; everyone after that joins by invitation.

Shell
docker compose -f deploy/compose/compose.yml logs api | grep setupToken
curl -X POST http://127.0.0.1/api/setup -H 'content-type: application/json' \
  -d '{"token":"<the token>","email":"[email protected]","name":"You","password":"<at least 12 characters>"}'

Go public

Set FIKADESK_DOMAIN=support.example.com and FIKADESK_BIND=0.0.0.0 in .env. Caddy fetches a certificate on start and redirects HTTP to HTTPS.

Upgrade

Every merge to main publishes the OSS image as ghcr.io/fikadesk/fikadesk, tagged with the full commit sha and with main. Migrations run before the new code starts, never at boot.

The full guide covers reverse proxies, backups, email and security defaults: docs/self-hosting.md. A machine-readable version of these steps is at /install.