Skip to content

Quickstart

qnop ships as a single container image plus two infrastructure services: PostgreSQL and an S3-compatible object storage. The released image is qnophq/qnop-ce on Docker Hub (multi-arch: amd64/arm64), mirrored to ghcr.io/qnophq/qnop-ce.

  • Docker with the Compose plugin
  • Roughly 2 GB of free RAM for the full stack

The main repository ships a single-host deploy/docker-compose.yml wiring qnop, PostgreSQL and MinIO together:

Terminal window
curl -fsSLO https://raw.githubusercontent.com/qnophq/qnop/main/deploy/docker-compose.yml
QNOP_VERSION=latest \
QNOP_DB_PASSWORD="$(openssl rand -base64 24)" \
QNOP_S3_ACCESS_KEY=qnop \
QNOP_S3_SECRET_KEY="$(openssl rand -base64 24)" \
QNOP_AUTH_JWT_SECRET="$(openssl rand -base64 48)" \
QNOP_AUTH_ENCRYPTION_KEY="$(openssl rand -base64 48)" \
QNOP_AUTH_ENCRYPTION_SALT="$(openssl rand -hex 32)" \
docker compose up -d

The server fails fast when a required secret is missing or still a placeholder — there are no insecure defaults. In practice, keep the values in an env file outside version control.

On first start qnop bootstraps the admin account and prints its one-time password to the container’s stderr:

Terminal window
docker compose logs qnop | tail -5

Open http://localhost:8080, sign in, change the password.

  • Configuration — every environment variable, and the settings that live in the admin area instead.
  • Deployment — reverse proxy and TLS, health checks, schema migration.
  • Operations — backups, upgrades, monitoring.

Rolling development builds of main are published to GHCR only, as ghcr.io/qnophq/qnop-ce:main, for evaluation — production deployments pin a release version.