Install with PostgreSQL Docker Compose
Use this instead of the SQLite Compose file when you want a separate database.
You need Docker with Compose v2 and curl. Tarnished runs one application process.
Install
mkdir tarnished && cd tarnished
curl -fsSLo docker-compose.yml https://raw.githubusercontent.com/markoonakic/tarnished/v0.3.13/deploy/compose/docker-compose.postgres.yml
Create .env with a strong database password. Protect the file with chmod 600 .env.
Do not overwrite a password from an existing installation.
POSTGRES_PASSWORD=replace-with-a-long-random-password
APP_PORT=127.0.0.1:5577
APP_URL=http://localhost:5577
TARNISHED_IMAGE=ghcr.io/markoonakic/tarnished:0.3.13
docker compose up -d --wait
Open http://localhost:5577 and create the first admin account in the browser. You are signed in automatically. Later accounts are created in Admin → Users. See account setup.
The init service prepares application storage. The app waits for PostgreSQL to be healthy and runs migrations before serving requests. PostgreSQL has no published host port.
Storage and operations
./datacontains uploads and the signing secret../postgres_datacontains the PostgreSQL database..envcontains the database password and deployment options.
Preserve all three. Use a PostgreSQL dump rather than copying a running database's files. See backup and restore.
docker compose ps
docker compose logs --tail=100 app db
curl -fsS http://localhost:5577/health
Use HTTPS for remote access. Configure optional text and speech services in Admin. For other runtime settings, see environment variables.