--- services: calibre-web-automated: image: crocodilestick/calibre-web-automated:V3.1.4 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 }}" environment: - PUID=${PUID} - PGID=${PGID} - TZ=${TZ} 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 calibre-web-automated-book-downloader: image: ghcr.io/calibrain/calibre-web-automated-book-downloader:0.4.0 container_name: calibre-web-automated-book-downloader environment: TZ: ${TZ} UID: ${PUID} GID: ${PGID} CWA_DB_PATH: "/auth/app.db" 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