Get the Compose file
Download both files into an empty host directory: curl -O https://selfhostedseo.com/docs/docker-compose.sentinel.yml curl -O https://selfhostedseo.com/docs/env.sentinel.example
artifactsPull-only install
Download the pinned Compose file, leave ADMIN_* unset for browser-first setup, and start the stack. No repository checkout and no `--build` — the images are public on GHCR.
The signal behind the check
The pull-only Compose file installs image tag v0.1.12. The optional JS worker image is published for hosts that opt into `--profile js`; leave that profile off unless you need Chromium checks.
Built to be specific
Download both files into an empty host directory: curl -O https://selfhostedseo.com/docs/docker-compose.sentinel.yml curl -O https://selfhostedseo.com/docs/env.sentinel.example
artifactscp env.sentinel.example .env # edit it: set your public base URL and the two database passwords the template marks required, and leave the admin variables unset so the browser runs setup docker compose -f docker-compose.sentinel.yml up -d Images: ghcr.io/user256/portal-sentinel-appliance-app:v0.1.12 and ghcr.io/user256/portal-sentinel-appliance-worker:v0.1.12.
composeOnly if you need JS-render checks: docker compose -f docker-compose.sentinel.yml --profile js up -d. That pulls ghcr.io/user256/portal-sentinel-appliance-worker-js:v0.1.12 (~2 GiB).
profile jsOpen http://<appliance-host>/setup/ and create the operator account. Then add the first site and check.
setupStart with the signal