svthalia/concrexit

View on GitHub
infra/docker-compose.yml

Summary

Maintainability
Test Coverage
name: concrexit

services:
  concrexit:
    image: ghcr.io/svthalia/concrexit:${TAG:-development}
    env_file:
      - env.public${ENV_FILE_SUFFIX:-}
      - env.secret${ENV_FILE_SUFFIX:-}
    volumes:
      - concrexit-media:/volumes/media:rw
      - concrexit-static:/volumes/static:rw
    restart: always
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy

  nginx:
    image: ghcr.io/svthalia/concrexit-nginx:${TAG:-development}
    ports:
      - "80:80"
      - "443:443"
    env_file:
      - env.public${ENV_FILE_SUFFIX:-}
    volumes:
      - letsencrypt:/etc/letsencrypt:rw
      - concrexit-media:/volumes/media:ro
      - concrexit-static:/volumes/static:ro
    restart: always
    depends_on:
      concrexit:
        condition: service_started

  postgres:
    image: postgres:15.4-alpine
    env_file:
      - env.public${ENV_FILE_SUFFIX:-}
    volumes:
      - /volumes/postgres/data:/var/lib/postgresql/data:rw
    restart: always
    healthcheck:
      test: [ "CMD", "pg_isready", "--username", "concrexit" ]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7.2-alpine
    command: redis-server --save 120 1
    volumes:
      - redis-snapshot:/data/:rw
    restart: always
    healthcheck:
      test: [ "CMD-SHELL", "redis-cli ping | grep PONG" ]
      interval: 10s
      timeout: 5s
      retries: 5

  worker:
    image: ghcr.io/svthalia/concrexit:${TAG:-development}
    command: /app/worker-entrypoint.sh
    env_file:
      - env.public${ENV_FILE_SUFFIX:-}
      - env.secret${ENV_FILE_SUFFIX:-}
    volumes:
      - celery-beat-db:/volumes/worker:rw
      - concrexit-media:/volumes/media:rw
    restart: always
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
      concrexit:
        condition: service_started
    healthcheck:
      # The celery status timeout needs to be smaller than docker's timeout.
      # Otherwise, celery will fail to clean up after itself on redis.
      test: [ "CMD", "celery", "--app", "thaliawebsite", "status", "--timeout=5" ]
      interval: 30s
      timeout: 10s
      retries: 5

volumes:
  concrexit-media:
  concrexit-static:
  letsencrypt:
  celery-beat-db:
  redis-snapshot: