services: couchdb: image: couchdb:3 restart: unless-stopped environment: SERVICE_FQDN_COUCHDB_5984: COUCHDB_USER: ${COUCHDB_USER:-admin} COUCHDB_PASSWORD: ${COUCHDB_PASSWORD} expose: - "5984" volumes: - couchdb_data:/opt/couchdb/data - ./couchdb/local.d/cors.ini:/opt/couchdb/etc/local.d/cors.ini:ro healthcheck: test: ["CMD", "curl", "-fsS", "http://localhost:5984/_up"] interval: 10s timeout: 5s retries: 12 start_period: 30s labels: - "traefik.enable=true" - "traefik.http.routers.couchdb.rule=Host(`${SERVICE_FQDN_COUCHDB_5984}`)" - "traefik.http.routers.couchdb.entrypoints=https" - "traefik.http.routers.couchdb.tls=true" - "traefik.http.services.couchdb.loadbalancer.server.port=5984" couchdb-init: image: curlimages/curl:latest restart: "no" depends_on: couchdb: condition: service_healthy environment: COUCHDB_USER: ${COUCHDB_USER:-admin} COUCHDB_PASSWORD: ${COUCHDB_PASSWORD} entrypoint: ["sh", "-c"] command: - | set -eu base="http://$${COUCHDB_USER}:$${COUCHDB_PASSWORD}@couchdb:5984" for db in _users _replicator _global_changes; do code=$$(curl -s -o /dev/null -w "%{http_code}" -X PUT "$$base/$$db") case "$$code" in 201|202|412) echo "$$db: ok ($$code)" ;; *) echo "$$db: failed ($$code)"; exit 1 ;; esac done volumes: couchdb_data: