90 lines
3.2 KiB
YAML
90 lines
3.2 KiB
YAML
services:
|
|
db:
|
|
image: postgres:16-alpine
|
|
restart: unless-stopped
|
|
environment:
|
|
POSTGRES_DB: ${ECOSPECIES_DB_NAME:-ecospecies}
|
|
POSTGRES_USER: ${ECOSPECIES_DB_USER:-ecospecies}
|
|
POSTGRES_PASSWORD: ${ECOSPECIES_DB_PASSWORD:?set ECOSPECIES_DB_PASSWORD}
|
|
PGDATA: /var/lib/postgresql/data/pgdata
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U ${ECOSPECIES_DB_USER:-ecospecies} -d ${ECOSPECIES_DB_NAME:-ecospecies}"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 10
|
|
volumes:
|
|
- postgres_data:/var/lib/postgresql/data
|
|
|
|
importer:
|
|
image: python:3.12-slim
|
|
restart: "no"
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
working_dir: /workspace
|
|
environment:
|
|
ECOSPECIES_DATA_DIR: ${ECOSPECIES_DATA_DIR:-/legacy-data/InputFiles - TXT}
|
|
ECOSPECIES_DATABASE_URL: postgresql+psycopg://${ECOSPECIES_DB_USER:-ecospecies}:${ECOSPECIES_DB_PASSWORD}@db:5432/${ECOSPECIES_DB_NAME:-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:-../path-to-legacy-corpus}:/legacy-data:ro
|
|
- python_venv:/workspace/.docker/venv
|
|
- pip_cache:/root/.cache/pip
|
|
|
|
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: ${ECOSPECIES_DATA_DIR:-/legacy-data/InputFiles - TXT}
|
|
ECOSPECIES_DATABASE_URL: postgresql+psycopg://${ECOSPECIES_DB_USER:-ecospecies}:${ECOSPECIES_DB_PASSWORD}@db:5432/${ECOSPECIES_DB_NAME:-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"]
|
|
volumes:
|
|
- ..:/workspace
|
|
- ${ECOSPECIES_LEGACY_DATA_DIR:-../path-to-legacy-corpus}:/legacy-data:ro
|
|
- python_venv:/workspace/.docker/venv
|
|
- pip_cache:/root/.cache/pip
|
|
|
|
web:
|
|
image: nginx:1.27-alpine
|
|
restart: unless-stopped
|
|
depends_on:
|
|
api:
|
|
condition: service_started
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.docker.network=${TRAEFIK_NETWORK:-traefik-network}"
|
|
- "traefik.http.routers.ecospecies-atlas.rule=Host(`${ECOSPECIES_HOSTNAME:?set ECOSPECIES_HOSTNAME}`)"
|
|
- "traefik.http.routers.ecospecies-atlas.entrypoints=${TRAEFIK_ENTRYPOINTS:-websecure}"
|
|
- "traefik.http.routers.ecospecies-atlas.tls.certresolver=${TRAEFIK_CERTRESOLVER:-myresolver}"
|
|
- "traefik.http.services.ecospecies-atlas.loadbalancer.server.port=80"
|
|
volumes:
|
|
- ../apps/web:/usr/share/nginx/html:ro
|
|
- ../apps/web/nginx.conf:/etc/nginx/conf.d/default.conf:ro
|
|
networks:
|
|
- default
|
|
- traefik-network
|
|
|
|
volumes:
|
|
postgres_data:
|
|
python_venv:
|
|
pip_cache:
|
|
|
|
networks:
|
|
traefik-network:
|
|
external: true
|
|
name: ${TRAEFIK_NETWORK:-traefik-network}
|