--- secrets: hardcover_api_token: file: ../secretes/hardcover_api_token services: calibre-web-automated: image: crocodilestick/calibre-web-automated:v4.0.6 container_name: calibre-web-automated ports: - 8090:8083 networks: public: ipv4_address: 192.168.240.64 labels: # HTTP is needed for Kobo sync to work # otherwise downloading books to device fails caddy: "cwa.${DOMAIN}, http://cwa.${DOMAIN}, http://books.${DOMAIN_LOCAL}, books.${DOMAIN_LOCAL}" caddy.reverse_proxy: "{{ upstreams 8083 }}" secrets: - hardcover_api_token environment: - PUID=${PUID} - PGID=${PGID} - TZ=${TZ} - HARDCOVER_TOKEN=Bearer eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIYXJkY292ZXIiLCJ2ZXJzaW9uIjoiOCIsImp0aSI6IjU2ZjQ5OWU2LWU1MGQtNDY3Mi05ZTRiLTlkODk4ZGNlMzQ3YyIsImFwcGxpY2F0aW9uSWQiOjIsInN1YiI6IjM0NTIyIiwiYXVkIjoiMSIsImlkIjoiMzQ1MjIiLCJsb2dnZWRJbiI6dHJ1ZSwiaWF0IjoxNzcwMDQzNzg5LCJleHAiOjE4MDE1Nzk3ODksImh0dHBzOi8vaGFzdXJhLmlvL2p3dC9jbGFpbXMiOnsieC1oYXN1cmEtYWxsb3dlZC1yb2xlcyI6WyJ1c2VyIl0sIngtaGFzdXJhLWRlZmF1bHQtcm9sZSI6InVzZXIiLCJ4LWhhc3VyYS1yb2xlIjoidXNlciIsIlgtaGFzdXJhLXVzZXItaWQiOiIzNDUyMiJ9LCJ1c2VyIjp7ImlkIjozNDUyMn19.kfoxQotcFvuoPYBiLCJV3YCpV-iEVMV-TYq-Ywodv40 volumes: - ${CWA_CONFIG_DIR}:/config # calibre-web-automated only supports one library as of 2026-01-12 - "${DOCKER_STORAGE_PATH_SLOW}/syncthing/shares/Calibre Library/Lukáš:/calibre-library" - ${CWA_INGEST_DIR}:/cwa-book-ingest - ${DOCKER_STORAGE_PATH}/calibre-web-automated/plugins:/config/.config/calibre/plugins - ${DOCKER_STORAGE_PATH}/calibre-web-automated/customize.py.json:/config/.config/calibre/customize.py.json restart: unless-stopped shelfmark: image: ghcr.io/calibrain/shelfmark:1.2.1 container_name: shelfmark environment: TZ: ${TZ} PUID: ${PUID} PGID: ${PGID} CWA_DB_PATH: "/auth/app.db" networks: public: ipv4_address: 192.168.240.68 labels: caddy: shelfmark.${DOMAIN_LOCAL} caddy.reverse_proxy: "{{ upstreams 8084 }}" ports: - 8084:8084 restart: unless-stopped volumes: - ${DOCKER_STORAGE_PATH}/calibre-web-automated-downloader/config:/config # point to the same ingest folder as calibre-web-automated - ${CWA_INGEST_DIR}:/cwa-book-ingest # re-use calibre-web-automated user database - ${CWA_DB_FILE}:/auth/app.db:ro healthcheck: test: ["CMD", "curl", "-sf", "http://localhost:8084/api/health"] interval: 30s timeout: 30s retries: 3