services: bindery: build: . image: bindery:latest # The user and group that own ./config and can write CWA's ingest folder. Usually the same as CWA's. user: "1000:1000" environment: # Omit this and its volume mount to keep uploads paused. INGEST_DIR: /cwa-book-ingest # The address of CWA, as the Bindery container reaches it, and the CWA account that Bindery uses. CWA_URL: http://calibre-web-automated:8083 CWA_USERNAME: bindery CWA_PASSWORD: change-me # none, local (one Bindery account), cwa (CWA accounts), or proxy (a trusted user header) AUTH_METHOD: cwa # For local logins, put these values in .env. See "Local login" in the README. # BINDERY_USERNAME: ${BINDERY_USERNAME:-} # BINDERY_PASSWORD_HASH: ${BINDERY_PASSWORD_HASH:-} # Optional and independent. app.db is for logins, metadata.db is for book IDs. # CWA_DB_PATH: /cwa-config/app.db # CALIBRE_DB_PATH: /calibre-library/metadata.db # URL_BASE: /bindery # true only if clients reach Bindery through a reverse proxy alone. The login lockout then uses X-Forwarded-For. # TRUST_PROXY: "true" # BINDERY_API_KEY: a-long-random-string ports: - 8085:8085 restart: unless-stopped # /api/health needs no login, and works with and without URL_BASE. healthcheck: test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8085/api/health', timeout=5)"] interval: 60s timeout: 10s start_period: 30s retries: 3 volumes: # CWA's ingest folder. New stories and updates go here. - /path/to/cwa/ingest:/cwa-book-ingest # The story database and personal.ini. Create the folder before the first start. - ./config:/config # Optional read-only folders. Include SQLite journal files beside each database. # Mount the library that receives the ingest files, not a copy or another library. # - /path/to/cwa/config:/cwa-config:ro # - /path/to/calibre/library:/calibre-library:ro