# Copy to .env and adjust. .env is git-ignored; this file is not. # # Immich is the one stack here where .env is NOT optional: compose.yaml # has `env_file: .env` on two services, so Compose refuses to start # without the file existing. It is also the application's own config, not # just a few variables Compose interpolates. # # This mirrors upstream's example.env for the pinned release. When you # update compose.yaml, re-fetch this too: # curl -fLO https://github.com/immich-app/immich/releases/latest/download/example.env # ─── Storage ──────────────────────────────────────────────────────── # Your photos and videos. Mounted at /data inside the container -- do not # change the container side, only this. This is the directory to back up. UPLOAD_LOCATION=./library # The Postgres data directory. Network shares (NFS/SMB) are NOT supported # here and will corrupt the database; it must be local storage. DB_DATA_LOCATION=./postgres # ─── Version ──────────────────────────────────────────────────────── # Pin the MAJOR. Immich ships breaking changes between majors and the # compose file changes with them, so leaving this unset (which resolves # to `release`) means an unattended `docker compose pull` can jump a # major and leave your compose file behind. See the README. IMMICH_VERSION=v3 # ─── Database ─────────────────────────────────────────────────────── # Change this. Letters and digits only -- no special characters or # spaces, they break the connection string. # openssl rand -base64 24 | tr -dc 'A-Za-z0-9' | head -c 32 DB_PASSWORD= # ─── Optional ─────────────────────────────────────────────────────── # Uncomment and set to a tz identifier if the server clock isn't right. #TZ=Europe/Paris # ─── Leave these alone ────────────────────────────────────────────── DB_USERNAME=postgres DB_DATABASE_NAME=immich