EcoSpecies-Atlas/docs/docker-compose-traefik.yml

94 lines
3.4 KiB
YAML

services:
db:
container_name: ecospecies-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:
container_name: ecospecies-importer
image: python:3.12-slim
restart: "no"
depends_on:
db:
condition: service_healthy
working_dir: /workspace
environment:
ECOSPECIES_DATA_DIR: ${ECOSPECIES_DATA_DIR:-/workspace/input-data/InputFiles}
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:
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: ${ECOSPECIES_DATA_DIR:-/workspace/input-data/InputFiles}
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:-/input-data}:/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
labels:
- "traefik.enable=true"
- "traefik.docker.network=${TRAEFIK_NETWORK:-traefik-network}"
- "traefik.http.routers.ecospecies-atlas.rule=Host(`${ECOSPECIES_HOSTNAME:?set ECOSPECIES_HOSTNAME}`) && PathPrefix(`${ECOSPECIES_BASE_PATH:-/}`)"
- "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}