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.
Requirements
Section titled “Requirements”- Docker with the Compose plugin
- Roughly 2 GB of free RAM for the full stack
Start the stack
Section titled “Start the stack”The main repository ships a single-host deploy/docker-compose.yml wiring
qnop, PostgreSQL and MinIO together:
curl -fsSLO https://raw.githubusercontent.com/qnophq/qnop/main/deploy/docker-compose.ymlQNOP_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 -dThe 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.
First login
Section titled “First login”On first start qnop bootstraps the admin account and prints its one-time
password to the container’s stderr:
docker compose logs qnop | tail -5Open http://localhost:8080, sign in, change the password.
Going further
Section titled “Going further”- 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.