aurweb/docker-compose.yml
moson fa5dd2ca2c
feat: Switch to postgres
Migrate from MariaDB to PostgreSQL.

Signed-off-by: moson <moson@archlinux.org>
2023-11-30 15:13:42 +01:00

271 lines
7.2 KiB
YAML

#
# 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.
version: "3.8"
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
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
volumes:
postgres_run: {}
postgres_data: {}
git_data: {} # Share aurweb/aur.git
smartgit_run: {}
archives: {}
step: {}