Skip to content

Docker Compose generator

Create compose.yaml and a private .env for the published Arkivra image, PostgreSQL, Docling, and your preferred file-storage location. Gotenberg is optional; SMTP, OAuth, AI providers, VLM settings, and worker tuning remain in theconfiguration reference.

General settings

File storage

Docker-managed storage is the simplest default. Linux host directories must be writable by UID/GID 10001:10001.

Document processing

Docling is required. Gotenberg adds optional office previews.

Generated Compose file

Enter the public URL to enable the actions for the default bundled Docling stack.

Secrets are generated in your browser and written only to .env. Keep both files private and run chmod 600 .env.

Preview compose.yaml
services:
  postgres:
    image: pgvector/pgvector:pg16
    restart: unless-stopped
    environment:
      POSTGRES_DB: ${POSTGRES_DB_NAME:-arkivra}
      POSTGRES_USER: arkivra
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env}
    volumes:
      - postgres-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U \"$${POSTGRES_USER}\" -d \"$${POSTGRES_DB}\""]
      interval: 10s
      timeout: 5s
      retries: 10
      start_period: 10s

  docling:
    image: quay.io/docling-project/docling-serve-cpu:v1.20.0
    restart: unless-stopped
    environment:
      UVICORN_WORKERS: '1'
      DOCLING_SERVE_ENABLE_UI: 'false'
    healthcheck:
      test: ['CMD', 'curl', '--fail', '--silent', 'http://127.0.0.1:5001/health']
      interval: 30s
      timeout: 10s
      retries: 10
      start_period: 60s
    stop_grace_period: 30s

  arkivra:
    image: ghcr.io/jasnan/arkivra:0.1.0-rc.1
    restart: unless-stopped
    env_file:
      - .env
    ports:
      - "127.0.0.1:${ARKIVRA_PORT:-3210}:3210"
    environment:
      NODE_ENV: production
      ARKIVRA_PROCESS_ROLE: all
      ARKIVRA_PORT: 3210
      ARKIVRA_HOSTNAME: 0.0.0.0
      ARKIVRA_DATA_PATH: /app/data
      ARKIVRA_PUBLIC_URL: ${ARKIVRA_PUBLIC_URL:?Set ARKIVRA_PUBLIC_URL in .env}
      ARKIVRA_DATABASE_URL: "postgres://arkivra:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB_NAME:-arkivra}"
      ARKIVRA_DOCLING_URL: ${ARKIVRA_DOCLING_URL:?Set ARKIVRA_DOCLING_URL in .env}
      ARKIVRA_AUTH_SECRET: ${ARKIVRA_AUTH_SECRET:?Set ARKIVRA_AUTH_SECRET in .env}
      ARKIVRA_ENCRYPTION_KEYS: ${ARKIVRA_ENCRYPTION_KEYS:?Set ARKIVRA_ENCRYPTION_KEYS in .env}
    volumes:
      - arkivra-data:/app/data
    depends_on:
      postgres:
        condition: service_healthy
      docling:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "curl", "--fail", "--silent", "--show-error", "http://127.0.0.1:3210/api/health"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s
    stop_grace_period: 30s
    security_opt:
      - no-new-privileges:true

volumes:
  postgres-data:
  arkivra-data:

Crafted with care by

© 2026 · Licensed under AGPL-3.0-or-later