Repository navigation
Run locally with Docker Compose
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.
-
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
dockerwithoutsudo.docker compose versionshould 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.
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.ymlDossier 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-passwordOn 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.
docker compose up -d
docker compose logs -f appCompose 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_PORTin.env, rundocker compose up -dagain, and openhttp://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.
Run these in your Dossier folder.
-
Stop and start:
docker compose stop, thendocker compose start. Unless you stopped it, Dossier also comes back after a restart of your computer. -
Change a setting: edit
.env, then rundocker 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 pullanddocker compose up -d. See Upgrading. -
Something's wrong:
docker compose logs appshows the log; see Troubleshooting.
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 -vOn your own computer
On a server
After installing