--- # # Docker service definitions for the aurweb project. # # Notable services: # - `sharness` - Run sharness test suites # - `pytest-postgres` - Run pytest suites with PostgreSQL # - `pytest-sqlite` - Run pytest suites with SQLite # - `test` - Run sharness, pytest-postgres and pytest-sqlite # - `postgres` - `port 15432` - PostgreSQL server for docker # - `ca` - Certificate Authority generation # - `git` - `port 2222` - Git over SSH server # - `fastapi` - hypercorn service for aurweb's FastAPI app # - `nginx` - `port 8444 (FastAPI) # - You can reach `nginx` via FastAPI at `https://localhost:8444/`. # CGit can be reached via the `/cgit/` request uri on either server. # # Copyright (C) 2021 aurweb Development # All Rights Reserved. services: aurweb-image: build: . image: aurweb:latest ca: image: aurweb:latest init: true entrypoint: /docker/ca-entrypoint.sh command: /docker/scripts/run-ca.sh healthcheck: test: "bash /docker/health/ca.sh" interval: 3s volumes: - step:/root/.step redis: image: aurweb:latest init: true entrypoint: /docker/redis-entrypoint.sh command: /docker/scripts/run-redis.sh healthcheck: test: "bash /docker/health/redis.sh" interval: 3s ports: - "127.0.0.1:16379:6379" postgres: image: aurweb:latest init: true entrypoint: /docker/postgres-entrypoint.sh command: su postgres -c '/usr/bin/postgres -D /var/lib/postgres/data' ports: - "127.0.0.1:15432:5432" volumes: - postgres_run:/run/postgresql - postgres_data:/var/lib/postgres healthcheck: test: "bash /docker/health/postgres.sh" interval: 3s shm_size: 2gb postgres_init: image: aurweb:latest init: true environment: - AUR_CONFIG_IMMUTABLE=${AUR_CONFIG_IMMUTABLE:-0} entrypoint: /docker/postgres-init-entrypoint.sh command: echo "Postgres tables initialized." volumes: - postgres_run:/run/postgresql depends_on: postgres: condition: service_healthy git: image: aurweb:latest init: true environment: - AUR_CONFIG=/aurweb/conf/config - SSH_CMDLINE=${SSH_CMDLINE:-ssh ssh://aur@localhost:2222} - AUR_CONFIG_IMMUTABLE=${AUR_CONFIG_IMMUTABLE:-0} entrypoint: /docker/git-entrypoint.sh command: /docker/scripts/run-sshd.sh ports: - "2222:2222" healthcheck: test: "bash /docker/health/sshd.sh" interval: 3s depends_on: postgres_init: condition: service_started volumes: - postgres_run:/run/postgresql smartgit: image: aurweb:latest init: true environment: - AUR_CONFIG=/aurweb/conf/config entrypoint: /docker/smartgit-entrypoint.sh command: /docker/scripts/run-smartgit.sh healthcheck: test: "bash /docker/health/smartgit.sh" interval: 3s cgit-fastapi: image: aurweb:latest init: true environment: - AUR_CONFIG=/aurweb/conf/config - CGIT_CLONE_PREFIX=${AURWEB_FASTAPI_PREFIX} - CGIT_CSS=/static/css/cgit.css entrypoint: /docker/cgit-entrypoint.sh command: /docker/scripts/run-cgit.sh 3000 healthcheck: test: "bash /docker/health/cgit.sh 3000" interval: 3s depends_on: git: condition: service_healthy ports: - "127.0.0.1:13001:3000" volumes: - git_data:/aurweb/aur.git cron: image: aurweb:latest init: true environment: - AUR_CONFIG=/aurweb/conf/config - AUR_CONFIG_IMMUTABLE=${AUR_CONFIG_IMMUTABLE:-0} entrypoint: /docker/cron-entrypoint.sh command: /docker/scripts/run-cron.sh depends_on: postgres_init: condition: service_started volumes: - ./aurweb:/aurweb/aurweb - postgres_run:/run/postgresql - archives:/var/lib/aurweb/archives fastapi: image: aurweb:latest init: true environment: - AUR_CONFIG=conf/config - FASTAPI_BACKEND=${FASTAPI_BACKEND} - FASTAPI_WORKERS=${FASTAPI_WORKERS} - AURWEB_FASTAPI_PREFIX=${AURWEB_FASTAPI_PREFIX} - AURWEB_SSHD_PREFIX=${AURWEB_SSHD_PREFIX} - PROMETHEUS_MULTIPROC_DIR=/tmp_prometheus - AUR_CONFIG_IMMUTABLE=${AUR_CONFIG_IMMUTABLE:-0} entrypoint: /docker/fastapi-entrypoint.sh command: /docker/scripts/run-fastapi.sh "${FASTAPI_BACKEND}" healthcheck: test: "bash /docker/health/fastapi.sh ${FASTAPI_BACKEND}" interval: 3s depends_on: git: condition: service_healthy redis: condition: service_healthy cron: condition: service_started tempo: condition: service_healthy volumes: - archives:/var/lib/aurweb/archives - postgres_run:/run/postgresql ports: - "127.0.0.1:18000:8000" nginx: image: aurweb:latest init: true environment: - AUR_CONFIG=conf/config entrypoint: /docker/nginx-entrypoint.sh command: /docker/scripts/run-nginx.sh ports: - "127.0.0.1:8444:8444" # FastAPI healthcheck: test: "bash /docker/health/nginx.sh" interval: 3s depends_on: ca: condition: service_healthy cgit-fastapi: condition: service_healthy smartgit: condition: service_healthy fastapi: condition: service_healthy sharness: image: aurweb:latest profiles: ["dev"] init: true environment: - AUR_CONFIG=conf/config.sqlite - LOG_CONFIG=logging.test.conf entrypoint: /docker/sharness-entrypoint.sh command: /docker/scripts/run-sharness.sh stdin_open: true tty: true depends_on: postgres: condition: service_healthy volumes: - ./data:/data - ./aurweb:/aurweb/aurweb - ./migrations:/aurweb/migrations - ./test:/aurweb/test - ./templates:/aurweb/templates pytest-postgres: image: aurweb:latest profiles: ["dev"] init: true environment: - AUR_CONFIG=conf/config - TEST_RECURSION_LIMIT=${TEST_RECURSION_LIMIT} - PROMETHEUS_MULTIPROC_DIR=/tmp_prometheus - LOG_CONFIG=logging.test.conf entrypoint: /docker/test-postgres-entrypoint.sh command: /docker/scripts/run-pytests.sh clean stdin_open: true tty: true depends_on: postgres: condition: service_healthy tmpfs: - /tmp volumes: - postgres_run:/run/postgresql - ./data:/data - ./aurweb:/aurweb/aurweb - ./migrations:/aurweb/migrations - ./test:/aurweb/test - ./templates:/aurweb/templates test: image: aurweb:latest profiles: ["dev"] init: true environment: - AUR_CONFIG=conf/config - TEST_RECURSION_LIMIT=${TEST_RECURSION_LIMIT} - PROMETHEUS_MULTIPROC_DIR=/tmp_prometheus - LOG_CONFIG=logging.test.conf entrypoint: /docker/test-postgres-entrypoint.sh command: /docker/scripts/run-tests.sh stdin_open: true tty: true depends_on: postgres: condition: service_healthy volumes: - postgres_run:/run/postgresql - ./data:/data - ./aurweb:/aurweb/aurweb - ./migrations:/aurweb/migrations - ./test:/aurweb/test - ./templates:/aurweb/templates grafana: # TODO: check if we need init: true image: grafana/grafana:11.1.3 environment: - GF_AUTH_ANONYMOUS_ENABLED=true - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin - GF_AUTH_DISABLE_LOGIN_FORM=true - GF_LOG_LEVEL=warn # check if depends ar ecorrect, does stopping or restarting a child exit grafana? depends_on: prometheus: condition: service_healthy tempo: condition: service_healthy ports: - "127.0.0.1:3000:3000" volumes: - ./docker/config/grafana/datasources:/etc/grafana/provisioning/datasources prometheus: image: prom/prometheus:latest command: - --config.file=/etc/prometheus/prometheus.yml - --web.enable-remote-write-receiver - --web.listen-address=prometheus:9090 healthcheck: # TODO: check if there is a status route test: "sh /docker/health/prometheus.sh" interval: 3s ports: - "127.0.0.1:9090:9090" volumes: - ./docker/config/prometheus.yml:/etc/prometheus/prometheus.yml - ./docker/health/prometheus.sh:/docker/health/prometheus.sh tempo: image: grafana/tempo:2.5.0 command: - -config.file=/etc/tempo/config.yml healthcheck: # TODO: check if there is a status route test: "sh /docker/health/tempo.sh" interval: 3s ports: - "127.0.0.1:3200:3200" - "127.0.0.1:4318:4318" volumes: - ./docker/config/tempo.yml:/etc/tempo/config.yml - ./docker/health/tempo.sh:/docker/health/tempo.sh volumes: postgres_run: {} postgres_data: {} git_data: {} # Share aurweb/aur.git smartgit_run: {} archives: {} step: {}