services: app: build: . ports: - 3000:3000 environment: PORT: 3000 NODE_ENV: production # CONFIG_PATH points db.ts and secret.ts at the config volume so medialore.db # and .session_secret are created as files inside an existing directory mount. # Without this Docker will create ./medialore.db on the host as an empty directory, # which causes better-sqlite3 to fail with SQLITE_CANTOPEN. CONFIG_PATH: /config # Set to "true" only when serving over HTTPS (e.g. behind a TLS reverse proxy). # Keeping this "false" allows the session cookie to be sent over plain HTTP. COOKIE_SECURE: "false" volumes: - ./.thumbnails:/app/.thumbnails # Library config, database, and session secret — all in one directory volume. # Initialize before first run: # mkdir -p config && echo '[]' > config/libraries.json - ./config:/config # Mount your media folders and reference them in libraries.json using # absolute /data/ paths, e.g. { "path": "/data/Games" } - ./data:/data:ro # - /path/to/your/movies:/data/Movies:ro restart: unless-stopped