Quick start
The fastest way to run Norish is Docker Compose. Save the file below as
docker-compose.yml and run:
docker compose up -d
Then open http://localhost:3000. The first user to sign in becomes the server owner and admin — see First run below.
services:
norish:
image: norishapp/norish:latest
container_name: norish-app
restart: always
ports:
- "3000:3000"
user: "1000:1000"
volumes:
- norish_data:/app/uploads
environment:
AUTH_URL: http://localhost:3000
DATABASE_URL: postgres://postgres:norish@db:5432/norish
MASTER_KEY: REPLACE_WITH_A_RANDOM_KEY
CHROME_WS_ENDPOINT: ws://chrome-headless:3000
REDIS_URL: redis://redis:6379
UPLOADS_DIR: /app/uploads
depends_on:
- db
- redis
db:
image: postgres:17-alpine
container_name: norish-db
restart: unless-stopped
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: norish
POSTGRES_DB: norish
volumes:
- db_data:/var/lib/postgresql/data
chrome-headless:
image: zenika/alpine-chrome:latest
container_name: chrome-headless
restart: unless-stopped
command:
- "--no-sandbox"
- "--disable-gpu"
- "--disable-dev-shm-usage"
- "--remote-debugging-address=0.0.0.0"
- "--remote-debugging-port=3000"
- "--headless"
redis:
image: redis:8.4.0
container_name: norish-redis
restart: unless-stopped
volumes:
- redis_data:/data
volumes:
db_data:
norish_data:
redis_data:
MASTER_KEYThe compose above already includes a random MASTER_KEY, freshly generated in
your browser each time you load this page (it is never sent anywhere). To create
your own instead, run:
openssl rand -base64 32
Keep it secret and stable — it derives the encryption keys, so changing it later invalidates previously encrypted data.
What's in the stack
| Service | Why it's needed |
|---|---|
norish | The Norish app server. |
db | PostgreSQL — your recipes, groceries, and planning data. |
redis | Real-time events and background jobs. |
chrome-headless | Headless Chrome used to scrape recipe pages on URL import. |
First run
The first user to sign in becomes the server owner and server admin. After that first sign-in, user registration is disabled automatically and ongoing settings are managed in Settings → Admin.
Norish includes email & password sign-in out of the box, so you can create your owner account right away. You can also use OIDC, GitHub, or Google — see Authentication.
Next steps
- Authentication — password, OIDC, GitHub, Google
- AI provider — enable recipe AI, video, and image import
- Server & runtime — logging, uploads, trusted origins, limits
- Admin settings — what you can change from the UI
A fuller, commented template lives in the repository at
docker-compose.example.yml.