--- # Variante pour adoption comme ressource "Docker Compose" gérée par Coolify. # Différences vs docker-compose.yml (CLI) : # - noms de SERVICE uniques ark-* (Coolify écrase container_name mais garde le nom de service # comme alias DNS ; les noms génériques db/redis entreraient en collision sur le réseau coolify) # - volumes déclarés "external" avec les noms existants (arkindex-deploy_*) -> aucune perte de données # - montages de config en chemins absolus (Coolify gère son propre répertoire de service) # - secrets (PG_PASS, GK_ID, GK_SECRET) fournis via les variables d'env de la ressource Coolify services: ark-database: image: postgis/postgis:17-3.5 restart: unless-stopped shm_size: '256mb' environment: POSTGRES_USER: arkindex POSTGRES_PASSWORD: ${PG_PASS} POSTGRES_DB: arkindex volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U arkindex -d arkindex"] interval: 10s timeout: 5s retries: 10 mem_limit: 1g networks: [ark] ark-redis: image: redis:alpine restart: unless-stopped volumes: - redisdata:/data mem_limit: 256m networks: [ark] ark-solr: image: solr:9 restart: unless-stopped command: ["solr", "-f", "-cloud", "-noprompt"] environment: SOLR_JAVA_MEM: "-Xms256m -Xmx512m" volumes: - solrdata:/var/solr mem_limit: 768m networks: [ark] ark-garage: image: dxflrs/garage:v2.1.0 restart: unless-stopped volumes: - garagedata:/var/lib/garage - /home/nak0x/arkindex-deploy/garage.toml:/etc/garage.toml:ro mem_limit: 512m networks: [ark, coolify] labels: - traefik.enable=true - traefik.docker.network=coolify - traefik.http.routers.ark-s3.entrypoints=https - traefik.http.routers.ark-s3.tls=true - traefik.http.routers.ark-s3.tls.certresolver=letsencrypt - traefik.http.routers.ark-s3.service=ark-s3 - traefik.http.routers.ark-s3.rule=Host(`s3.ark.nak0x.dev`) || Host(`staging.s3.ark.nak0x.dev`) || Host(`thumbnails.s3.ark.nak0x.dev`) || Host(`export.s3.ark.nak0x.dev`) || Host(`training.s3.ark.nak0x.dev`) || Host(`ponos-logs.s3.ark.nak0x.dev`) || Host(`ponos-artifacts.s3.ark.nak0x.dev`) || Host(`ingest.s3.ark.nak0x.dev`) || Host(`uploads.s3.ark.nak0x.dev`) || Host(`iiif-cache.s3.ark.nak0x.dev`) - traefik.http.routers.ark-s3.middlewares=ark-s3-cors - traefik.http.services.ark-s3.loadbalancer.server.port=3900 - traefik.http.middlewares.ark-s3-cors.headers.accesscontrolallowmethods=GET,OPTIONS,PUT,POST,DELETE,HEAD - traefik.http.middlewares.ark-s3-cors.headers.accesscontrolallowheaders=* - traefik.http.middlewares.ark-s3-cors.headers.accesscontrolalloworiginlist=https://ark.nak0x.dev - traefik.http.middlewares.ark-s3-cors.headers.addvaryheader=true - traefik.http.routers.ark-s3-http.entrypoints=http - traefik.http.routers.ark-s3-http.rule=Host(`s3.ark.nak0x.dev`) || Host(`staging.s3.ark.nak0x.dev`) || Host(`thumbnails.s3.ark.nak0x.dev`) || Host(`export.s3.ark.nak0x.dev`) || Host(`training.s3.ark.nak0x.dev`) || Host(`ponos-logs.s3.ark.nak0x.dev`) || Host(`ponos-artifacts.s3.ark.nak0x.dev`) || Host(`ingest.s3.ark.nak0x.dev`) || Host(`uploads.s3.ark.nak0x.dev`) || Host(`iiif-cache.s3.ark.nak0x.dev`) - traefik.http.routers.ark-s3-http.middlewares=ark-redir-https - traefik.http.middlewares.ark-redir-https.redirectscheme.scheme=https ark-cantaloupe: image: registry.gitlab.teklia.com/iiif/cantaloupe:5.0.7 restart: unless-stopped environment: AWS_ACCESS_KEY_ID: ${GK_ID} AWS_SECRET_ACCESS_KEY: ${GK_SECRET} volumes: - /home/nak0x/arkindex-deploy/cantaloupe.properties:/etc/cantaloupe.properties:ro depends_on: - ark-garage mem_limit: 1g networks: [ark, coolify] labels: - traefik.enable=true - traefik.docker.network=coolify - traefik.http.routers.ark-iiif.entrypoints=https - traefik.http.routers.ark-iiif.tls=true - traefik.http.routers.ark-iiif.tls.certresolver=letsencrypt - traefik.http.routers.ark-iiif.service=ark-iiif - traefik.http.routers.ark-iiif.rule=Host(`iiif.ark.nak0x.dev`) || Host(`uploads.iiif.ark.nak0x.dev`) || Host(`ingest.iiif.ark.nak0x.dev`) - traefik.http.services.ark-iiif.loadbalancer.server.port=80 - traefik.http.routers.ark-iiif-http.entrypoints=http - traefik.http.routers.ark-iiif-http.rule=Host(`iiif.ark.nak0x.dev`) || Host(`uploads.iiif.ark.nak0x.dev`) || Host(`ingest.iiif.ark.nak0x.dev`) - traefik.http.routers.ark-iiif-http.middlewares=ark-redir-https ark-backend: image: registry.gitlab.teklia.com/arkindex/backend:1.12.2 restart: unless-stopped environment: CONFIG_PATH: /arkindex.yml MAX_WORKERS: "3" volumes: - /home/nak0x/arkindex-deploy/config.yml:/arkindex.yml:ro depends_on: ark-database: condition: service_healthy ark-redis: condition: service_started healthcheck: test: ["CMD-SHELL", "wget --spider --quiet http://localhost:8000/api/v1/health/ || exit 1"] interval: 15s timeout: 5s retries: 10 start_period: 30s mem_limit: 1g networks: [ark, coolify] labels: - traefik.enable=true - traefik.docker.network=coolify - traefik.http.routers.ark-api.entrypoints=https - traefik.http.routers.ark-api.tls=true - traefik.http.routers.ark-api.tls.certresolver=letsencrypt - traefik.http.routers.ark-api.priority=100 - traefik.http.routers.ark-api.rule=Host(`ark.nak0x.dev`) && (PathPrefix(`/api/`) || PathPrefix(`/api-docs/`) || PathPrefix(`/admin/`) || PathPrefix(`/rq/`) || PathPrefix(`/static/`)) - traefik.http.routers.ark-api.service=ark-api - traefik.http.services.ark-api.loadbalancer.server.port=8000 - traefik.http.routers.ark-api-http.entrypoints=http - traefik.http.routers.ark-api-http.priority=100 - traefik.http.routers.ark-api-http.rule=Host(`ark.nak0x.dev`) && (PathPrefix(`/api/`) || PathPrefix(`/api-docs/`) || PathPrefix(`/admin/`) || PathPrefix(`/rq/`) || PathPrefix(`/static/`)) - traefik.http.routers.ark-api-http.middlewares=ark-redir-https ark-worker: image: registry.gitlab.teklia.com/arkindex/backend:1.12.2 restart: unless-stopped command: ["arkindex", "rqworker-pool", "--num-workers", "1", "-v", "1", "default", "high", "tasks", "export", "iiif"] environment: CONFIG_PATH: /arkindex.yml user: root volumes: - /home/nak0x/arkindex-deploy/config.yml:/arkindex.yml:ro - /tmp:/tmp - /var/run/docker.sock:/var/run/docker.sock depends_on: ark-database: condition: service_healthy ark-redis: condition: service_started mem_limit: 1500m networks: [ark, coolify] ark-front: image: registry.gitlab.teklia.com/arkindex/frontend:1.12.2 restart: unless-stopped depends_on: - ark-backend mem_limit: 256m networks: [ark, coolify] labels: - traefik.enable=true - traefik.docker.network=coolify - traefik.http.routers.ark-front.entrypoints=https - traefik.http.routers.ark-front.tls=true - traefik.http.routers.ark-front.tls.certresolver=letsencrypt - traefik.http.routers.ark-front.priority=1 - traefik.http.routers.ark-front.rule=Host(`ark.nak0x.dev`) - traefik.http.routers.ark-front.service=ark-front - traefik.http.services.ark-front.loadbalancer.server.port=80 - traefik.http.routers.ark-front-http.entrypoints=http - traefik.http.routers.ark-front-http.priority=1 - traefik.http.routers.ark-front-http.rule=Host(`ark.nak0x.dev`) - traefik.http.routers.ark-front-http.middlewares=ark-redir-https volumes: pgdata: external: true name: arkindex-deploy_pgdata redisdata: external: true name: arkindex-deploy_redisdata solrdata: external: true name: arkindex-deploy_solrdata garagedata: external: true name: arkindex-deploy_garagedata networks: ark: name: ark coolify: external: true