126 lines
2.9 KiB
YAML
126 lines
2.9 KiB
YAML
volumes:
|
|
logs:
|
|
media:
|
|
postgres-data:
|
|
static-files:
|
|
|
|
x-db-connection-env: &db-connection-env
|
|
POSTGRES_HOST: ${POSTGRES_HOST:-db}
|
|
POSTGRES_PORT: ${POSTGRES_PORT:-5432}
|
|
POSTGRES_DB: &pg-database ${POSTGRES_DB:-newsreader}
|
|
POSTGRES_USER: &pg-user ${POSTGRES_USER:-newsreader}
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-newsreader}
|
|
|
|
x-db-env: &db-env
|
|
<<: *db-connection-env
|
|
PGUSER: *pg-user
|
|
PGDATABASE: *pg-database
|
|
|
|
x-django-env: &django-env
|
|
<<: *db-connection-env
|
|
|
|
ALLOWED_HOSTS: ${ALLOWED_HOSTS:-localhost,127.0.0.1,django}
|
|
INTERNAL_IPS: ${INTERNAL_IPS:-localhost,127.0.0.1,django}
|
|
|
|
# see token_urlsafe from python's secret module to generate one
|
|
DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY:-Ojg68lYsP3kq2r5JgozUzKVSRFywm17BTMS5iwpLM44}
|
|
DJANGO_SETTINGS_MODULE: ${DJANGO_SETTINGS_MODULE:-newsreader.conf.production}
|
|
|
|
ADMINS: ${ADMINS:-""}
|
|
|
|
VERSION: ${VERSION:-""}
|
|
|
|
# Email
|
|
EMAIL_HOST: ${EMAIL_HOST:-localhost}
|
|
EMAIL_PORT: ${EMAIL_PORT:-25}
|
|
EMAIL_HOST_USER: ${EMAIL_HOST_USER:-""}
|
|
EMAIL_HOST_PASSWORD: ${EMAIL_HOST_PASSWORD:-""}
|
|
EMAIL_USE_TLS: ${EMAIL_USE_TLS:-no}
|
|
EMAIL_USE_SSL: ${EMAIL_USE_SSL:-no}
|
|
EMAIL_DEFAULT_FROM: ${EMAIL_DEFAULT_FROM:-webmaster@localhost}
|
|
|
|
# Sentry
|
|
SENTRY_DSN: ${SENTRY_DSN:-""}
|
|
|
|
services:
|
|
db:
|
|
environment:
|
|
<<: *db-env
|
|
image: postgres:15
|
|
healthcheck:
|
|
test: /usr/bin/pg_isready
|
|
start_period: 10s
|
|
interval: 5s
|
|
timeout: 10s
|
|
retries: 10
|
|
volumes:
|
|
- postgres-data:/var/lib/postgresql/data
|
|
|
|
rabbitmq:
|
|
image: rabbitmq:4
|
|
|
|
memcached:
|
|
image: memcached:1.6
|
|
entrypoint:
|
|
- memcached
|
|
- -m 64
|
|
|
|
django:
|
|
build: &app-build
|
|
context: .
|
|
target: production
|
|
environment:
|
|
<<: *django-env
|
|
entrypoint: ["/bin/sh", "/app/bin/docker-entrypoint.sh"]
|
|
command: |
|
|
uv run --no-sync --
|
|
gunicorn
|
|
--bind 0.0.0.0:8000
|
|
--workers 3
|
|
--chdir /app/src/
|
|
newsreader.wsgi:application
|
|
healthcheck:
|
|
test: /usr/bin/curl --fail http://django:8000 || exit 1
|
|
start_period: 10s
|
|
interval: 10s
|
|
timeout: 10s
|
|
retries: 5
|
|
depends_on:
|
|
memcached:
|
|
condition: service_started
|
|
db:
|
|
condition: service_healthy
|
|
volumes:
|
|
- logs:/app/logs
|
|
- media:/app/media
|
|
- static-files:/app/static
|
|
|
|
celery:
|
|
build:
|
|
<<: *app-build
|
|
environment:
|
|
<<: *django-env
|
|
command: |
|
|
uv run --no-sync --
|
|
celery
|
|
--app newsreader
|
|
--workdir /app/src/
|
|
worker --loglevel INFO
|
|
--concurrency 2
|
|
--beat
|
|
--scheduler django
|
|
-n worker1@%h
|
|
-n worker2@%h
|
|
healthcheck:
|
|
test: uv run --no-sync -- celery --app newsreader status || exit 1
|
|
start_period: 10s
|
|
interval: 10s
|
|
timeout: 10s
|
|
retries: 5
|
|
depends_on:
|
|
rabbitmq:
|
|
condition: service_started
|
|
django:
|
|
condition: service_healthy
|
|
volumes:
|
|
- logs:/app/logs
|