Skip to content

From source

Before just up: the stack needs somewhere to be reached from. compose.yaml attaches to an external Docker network named traefik and asks a step-ca resolver for certificates on *.dev.localhost. None of that is created for you, and an absent network makes just up fail rather than degrade. Reverse proxy has both ready-made setups: examples/traefik-stepca/ for the hostnames the rest of this page assumes, and examples/no-proxy/ if you would rather bind a port and skip TLS.

Terminal window
just up # start nginx, php-fpm, postgres
just composer install # runs inside the php-fpm container
just migrate-run # set up the database
just exec bin/console app:dev:seed # dev@loupe.test or admin@loupe.test / password
just exec bin/console league:oauth2-server:generate-keypair --skip-if-exists # OAuth keys in var/oauth/

just --list shows every recipe. just mercure-up also starts the Mercure hub. The hub carries live updates for the board, the inbox count, worker runs and site review.

Once you are in, the seed command above is what gives you an account — registration will not create the first one. “Ways to run it” lists the alternatives.

Copy the environment overrides you need into .env.local (never commit it):

DATABASE_URL="postgresql://app:!ChangeMe!@db.loupe.dev.localhost:5432/app?serverVersion=16&charset=utf8"

That host is the traefik-stepca example’s TCP route, and it assumes COMPOSE_PROJECT_NAME=loupe. Under examples/no-proxy/ the database is on 127.0.0.1 instead.

Set a real MERCURE_JWT_SECRET, APP_SECRET, and (if you use encrypted columns) APP_ENCRYPTION_KEY per environment. .env documents every variable inline; Environment variables has the commands that generate these three. Never commit real secrets.