version: '3.9' services: readmeabook: build: context: . dockerfile: dockerfile.unified container_name: readmeabook-local restart: unless-stopped ports: - "3030:3030" volumes: # Application config and cache - ./config:/app/config - ./cache:/app/cache # Downloads and media directories - ./downloads:/downloads - ./media:/media # PostgreSQL data persistence - ./pgdata:/var/lib/postgresql/data # Redis data persistence - ./redis:/var/lib/redis environment: # ======================================================================== # RECOMMENDED: User/Group ID Mapping (Hybrid Approach) # ======================================================================== # Set these to match your host user for proper file ownership # Run 'id' on your host to find your UID and GID # # How it works: # - postgres user: Keeps UID 103 (PostgreSQL requirement), uses your PGID # - redis/node: Fully remapped to your PUID:PGID # # File ownership on host: # - PostgreSQL data (/var/lib/postgresql/data): UID 103, GID # - Everything else (/downloads, /media, /config): : # # For LXC: You only need to passthrough/map container UID 103 # See documentation/deployment/unified.md for LXC examples # PUID: 1000 PGID: 1000 # ======================================================================== # OPTIONAL: Secrets (auto-generated on first run if not provided) # ======================================================================== # Uncomment and set these if you want to use custom secrets: # JWT_SECRET: "your-custom-jwt-secret-here" # JWT_REFRESH_SECRET: "your-custom-jwt-refresh-secret-here" # CONFIG_ENCRYPTION_KEY: "your-custom-encryption-key-here" # POSTGRES_PASSWORD: "your-custom-postgres-password-here" # ======================================================================== # OPTIONAL: Application Configuration # ======================================================================== # Only set these if you need non-default values: # POSTGRES_USER: "readmeabook" # POSTGRES_DB: "readmeabook" # PLEX_CLIENT_IDENTIFIER: "readmeabook-custom-id" # PLEX_PRODUCT_NAME: "ReadMeABook" # LOG_LEVEL: "info" # ======================================================================== # IMPORTANT: Public URL Configuration # ======================================================================== # Set this to your public URL if accessing from outside localhost: # PUBLIC_URL: "https://readmeabook.yourdomain.com" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3030/api/health"] interval: 30s timeout: 10s retries: 3 start_period: 60s