| 1 | services: |
| 2 | app: |
| 3 | container_name: bookorbit-app |
| 4 | image: ${APP_IMAGE?required} |
| 5 | restart: unless-stopped |
| 6 | init: true |
| 7 | env_file: |
| 8 | - .env |
| 9 | ports: |
| 10 | - "${APP_PORT:-3000}:${PORT:-3000}" |
| 11 | environment: |
| 12 | NODE_ENV: production |
| 13 | PORT: ${PORT:-3000} |
| 14 | DATABASE_URL: ${DATABASE_URL:-} |
| 15 | POSTGRES_HOST: ${POSTGRES_HOST:-postgres} |
| 16 | POSTGRES_PORT: ${POSTGRES_PORT:-5432} |
| 17 | POSTGRES_USER: ${POSTGRES_USER?required} |
| 18 | POSTGRES_PASSWORD: ${POSTGRES_PASSWORD?required} |
| 19 | POSTGRES_DB: ${POSTGRES_DB?required} |
| 20 | JWT_SECRET: ${JWT_SECRET?required} |
| 21 | SETUP_BOOTSTRAP_TOKEN: ${SETUP_BOOTSTRAP_TOKEN?required} |
| 22 | APP_URL: ${APP_URL?required} |
| 23 | CLIENT_URL: ${CLIENT_URL:-${APP_URL?required}} |
| 24 | PUID: ${PUID:-1000} |
| 25 | PGID: ${PGID:-1000} |
| 26 | NODE_MAX_OLD_SPACE_SIZE: ${NODE_MAX_OLD_SPACE_SIZE:-auto} |
| 27 | BOOK_DOCK_PATH: ${BOOK_DOCK_PATH:-} |
| 28 | LIBRARY_BROWSE_ROOT: ${LIBRARY_BROWSE_ROOT:-} |
| 29 | depends_on: |
| 30 | postgres: |
| 31 | condition: service_healthy |
| 32 | volumes: |
| 33 | - ${BOOKS_HOST_PATH:-./books}:/books |
| 34 | - ./data/app:/data |
| 35 | read_only: true |
| 36 | tmpfs: |
| 37 | - /tmp |
| 38 | cap_drop: |
| 39 | - ALL |
| 40 | cap_add: |
| 41 | - CHOWN |
| 42 | - DAC_OVERRIDE |
| 43 | - FOWNER |
| 44 | - SETGID |
| 45 | - SETUID |
| 46 | security_opt: |
| 47 | - no-new-privileges:true |
| 48 | stop_grace_period: 30s |
| 49 | healthcheck: |
| 50 | test: |
| 51 | [ |
| 52 | "CMD", |
| 53 | "node", |
| 54 | "-e", |
| 55 | "const p=process.env.PORT||3000;fetch('http://127.0.0.1:'+p+'/api/v1/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))", |
| 56 | ] |
| 57 | interval: 30s |
| 58 | timeout: 5s |
| 59 | retries: 3 |
| 60 | start_period: 20s |
| 61 | |
| 62 | postgres: |
| 63 | container_name: bookorbit-db |
| 64 | image: pgvector/pgvector:pg18 |
| 65 | restart: unless-stopped |
| 66 | environment: |
| 67 | POSTGRES_USER: ${POSTGRES_USER?required} |
| 68 | POSTGRES_PASSWORD: ${POSTGRES_PASSWORD?required} |
| 69 | POSTGRES_DB: ${POSTGRES_DB?required} |
| 70 | PGDATA: /var/lib/postgresql/data/pgdata |
| 71 | volumes: |
| 72 | - ./data/postgres:/var/lib/postgresql/data |
| 73 | healthcheck: |
| 74 | test: |
| 75 | ["CMD-SHELL", 'pg_isready -U "$${POSTGRES_USER}" -d "$${POSTGRES_DB}"'] |
| 76 | interval: 10s |
| 77 | timeout: 5s |
| 78 | retries: 10 |
| 79 | start_period: 20s |
emanuelegori / BookOrbit
Last active 18 hours ago
BookOrbit è una piattaforma self‑hosted e open source per gestire e leggere ebook, audiolibri e fumetti. Offre lettori integrati per più formati, gestione automatica dei metadati, sincronizzazione con Kobo e KOReader, supporto multi‑utente con SSO, cataloghi OPDS privati e analitiche di lettura avanzate, il tutto con una semplice distribuzione via Docker e senza abbonamenti.
Revision 150ef752098934ff99a495c74d28d6fea1ba5057