Skip to content

Run locally with Docker Compose

Alien edited this page Oct 20, 2026 · 2 revisions

Run Dossier on your own computer from the same Compose file that runs it on a server: the app and PostgreSQL, started and stopped together. Nothing is reachable from other machines, and you open it at http://localhost:3000.

To work on Dossier's code instead, use the repository's own compose.yml, which builds the app from source and reloads it as you edit: see DEVELOPMENT.md.

What you need

  • Docker with Compose: Docker Desktop on macOS or Windows includes it. On Linux, install Docker Engine and its Compose plugin, and follow Docker's post-installation steps to run docker without sudo. docker compose version should answer.
  • About 2 GB of free memory and 3 GB of disk. The image is about 1.7 GB.
  • A Unix shell: the commands below are for macOS's Terminal, Linux, or WSL on Windows.

1. Fetch the Compose file

Make a folder for Dossier, fetch the Compose file into it, and give the database a random password:

mkdir ~/dossier && cd ~/dossier
curl -fsSL -o compose.yml https://raw.githubusercontent.com/AienTech/dossier/main/compose.production.yml
echo "POSTGRES_PASSWORD=$(openssl rand -hex 24)" > .env
chmod 600 .env

.env holds Dossier's settings and secrets. Compose reads it from the folder you run it in.

Apple Silicon Mac: the image is built for Intel and AMD processors (linux/amd64) only. Tell Compose so, in a file it reads next to compose.yml, and Docker Desktop runs the app under emulation, a little slower:

printf 'services:\n  app:\n    platform: linux/amd64\n' > compose.override.yml

2. Make the secrets

Dossier needs two more variables, DOSSIER_SECRET and DOSSIER_PASSWORD, and TZ sets its time zone. Put your own time zone in the second line:

echo "DOSSIER_SECRET=$(openssl rand -base64 32)" >> .env
echo "TZ=Europe/Berlin" >> .env
docker run --rm -it ghcr.io/aientech/dossier hash-password

On an Apple Silicon Mac, use docker run --platform linux/amd64 --rm -it ghcr.io/aientech/dossier hash-password for the last one.

hash-password makes a hash of the password you'll sign in with. Type it twice; it prints one line that starts with argon2id:. Add that line to .env as DOSSIER_PASSWORD=argon2id:…, with any text editor.

What these variables are for, and every other one: Environment variables.

3. Start Dossier

docker compose up -d
docker compose logs -f app

Compose starts the database, waits until it's ready, then starts the app. On every start, Dossier applies the database migrations and loads its built-in themes, then serves. Once the log says Ready, press Ctrl+C to stop following it.

Open http://localhost:3000 and sign in with your password. Then pick an AI model in Settings → AI provider (see Choosing an AI provider) and, if you like, a job source in Settings → Job search (see Choosing a job source).

  • Port 3000 is taken: set another one with DOSSIER_PORT in .env, run docker compose up -d again, and open http://localhost:<that port>.
  • A local model: the Compose file can run Ollama too, or reach the one on your computer at http://host.docker.internal:11434. See Local model with Ollama.

Day to day

Run these in your Dossier folder.

  • Stop and start: docker compose stop, then docker compose start. Unless you stopped it, Dossier also comes back after a restart of your computer.
  • Change a setting: edit .env, then run docker compose up -d; a plain restart keeps the old values.
  • Back up: an export, nightly backups and database dumps, with the commands in Backups and restore.
  • Upgrade: take an export and a database dump first, then run docker compose pull and docker compose up -d. See Upgrading.
  • Something's wrong: docker compose logs app shows the log; see Troubleshooting.

Remove it

docker compose down removes the containers and keeps your data. This deletes the data too, so export what you want to keep first:

docker compose down -v

Clone this wiki locally