services: db: container_name: ecospecies-db image: postgres:16-alpine environment: POSTGRES_DB: ecospecies POSTGRES_USER: ecospecies POSTGRES_PASSWORD: ecospecies PGDATA: /var/lib/postgresql/data/pgdata healthcheck: test: ["CMD-SHELL", "pg_isready -U ecospecies -d ecospecies"] interval: 5s timeout: 5s retries: 10 ports: - "${ECOSPECIES_DB_PORT:-5432}:5432" volumes: - postgres_data:/var/lib/postgresql/data importer: container_name: ecospecies-importer image: python:3.12-slim depends_on: db: condition: service_healthy working_dir: /workspace environment: ECOSPECIES_DATA_DIR: /legacy-data/InputFiles - TXT ECOSPECIES_DATABASE_URL: postgresql+psycopg://ecospecies:ecospecies@db:5432/ecospecies ECOSPECIES_VENV_DIR: /workspace/.docker/venv PYTHONPATH: /workspace/apps/api/src command: ["/bin/sh", "-lc", "./scripts/bootstrap-python-env.sh && ./scripts/run-import.sh"] volumes: - .:/workspace - ${ECOSPECIES_LEGACY_DATA_DIR:-../legacy-corpus}:/legacy-data:ro - python_venv:/workspace/.docker/venv - pip_cache:/root/.cache/pip api: container_name: ecospecies-api image: python:3.12-slim restart: unless-stopped depends_on: db: condition: service_healthy importer: condition: service_completed_successfully working_dir: /workspace environment: ECOSPECIES_DATA_DIR: /legacy-data/InputFiles - TXT ECOSPECIES_DATABASE_URL: postgresql+psycopg://ecospecies:ecospecies@db:5432/ecospecies ECOSPECIES_HOST: 0.0.0.0 ECOSPECIES_PORT: "8000" ECOSPECIES_AUTH_TOKENS: ${ECOSPECIES_AUTH_TOKENS:-} ECOSPECIES_VENV_DIR: /workspace/.docker/venv PYTHONPATH: /workspace/apps/api/src command: ["/bin/sh", "-lc", "./scripts/bootstrap-python-env.sh && ./scripts/run-api.sh"] ports: - "${ECOSPECIES_API_PORT:-8000}:8000" volumes: - .:/workspace - ${ECOSPECIES_LEGACY_DATA_DIR:-../legacy-corpus}:/legacy-data:ro - python_venv:/workspace/.docker/venv - pip_cache:/root/.cache/pip web: container_name: ecospecies-web image: nginx:1.27-alpine restart: unless-stopped depends_on: api: condition: service_started ports: - "${ECOSPECIES_WEB_PORT:-8080}:80" volumes: - ./apps/web:/usr/share/nginx/html:ro - ./apps/web/nginx.conf:/etc/nginx/conf.d/default.conf:ro volumes: postgres_data: python_venv: pip_cache: