fix(compose): split Django and Celery healthchecks

- This also fixes a regression with Celery not finding its broker in the worker
container, by adding a dedictad variable and assigning a separate Redis database /1.
Some issues were complaining about corruptions in the Celery database, which
might have come from reusing the same /0 database as Django cache and queue.
- Renames the celeryworker container to just worker.

This partly undoes 4ee6190cc1
This commit is contained in:
jon r 2025-03-15 17:00:13 +01:00
parent d9d71bccf4
commit 2bee368683
8 changed files with 30 additions and 14 deletions

View File

@ -1,4 +1,4 @@
# api + celeryworker # api + worker
DEBUG=True DEBUG=True
FORCE=True FORCE=True
DEFAULT_FROM_EMAIL=hello@funkwhale.test DEFAULT_FROM_EMAIL=hello@funkwhale.test
@ -12,6 +12,7 @@ DJANGO_SETTINGS_MODULE=config.settings.local
DATABASE_URL=postgresql://postgres@postgres/postgres DATABASE_URL=postgresql://postgres@postgres/postgres
CACHE_URL=redis://redis:6379/0 CACHE_URL=redis://redis:6379/0
CELERY_BROKER_URL=redis://redis:6379/1
EMAIL_CONFIG=smtp://mailpit.funkwhale.test:1025 EMAIL_CONFIG=smtp://mailpit.funkwhale.test:1025
FORCE_HTTPS_URLS=True FORCE_HTTPS_URLS=True

View File

@ -135,6 +135,3 @@ RUN --mount=type=cache,target=~/.cache/pip; \
ADD --chown=0:0 --chmod=0755 ./entrypoint.sh / ADD --chown=0:0 --chmod=0755 ./entrypoint.sh /
ENTRYPOINT [ "/entrypoint.sh" ] ENTRYPOINT [ "/entrypoint.sh" ]
HEALTHCHECK --start-period=60s --interval=10s --timeout=5s --retries=3 \
CMD curl -o /dev/null -s -w "%{http_code}" http://localhost:5000/api/v1 | grep "301" || exit 1

View File

@ -71,6 +71,3 @@ RUN poetry install --extras typesense
ADD --chown=0:0 --chmod=0755 ./entrypoint.sh / ADD --chown=0:0 --chmod=0755 ./entrypoint.sh /
ENTRYPOINT [ "/entrypoint.sh" ] ENTRYPOINT [ "/entrypoint.sh" ]
HEALTHCHECK --start-period=60s --interval=10s --timeout=5s --retries=3 \
CMD curl -o /dev/null -s -w "%{http_code}" http://localhost:5000/api/v1 | grep "301" || exit 1

View File

@ -30,7 +30,7 @@ case "${1}" in
${0} collectstatic ${0} collectstatic
${0} uvicorn ${0} uvicorn
;; ;;
develop-celery) develop-worker)
export CELERYD_CONCURRENCY=0 export CELERYD_CONCURRENCY=0
watchmedo auto-restart \ watchmedo auto-restart \
--patterns="*.py" \ --patterns="*.py" \

View File

@ -24,10 +24,10 @@ services:
service: api service: api
<<: *django <<: *django
celeryworker: worker:
extends: extends:
file: ./compose/app.django.yml file: ./compose/app.django.yml
service: celeryworker service: worker
<<: *django <<: *django
nginx: nginx:

View File

@ -26,6 +26,7 @@ x-django: &django
- DATABASE_URL - DATABASE_URL
- CACHE_URL - CACHE_URL
- CELERY_BROKER_URL
- EMAIL_CONFIG - EMAIL_CONFIG
- TYPESENSE_API_KEY - TYPESENSE_API_KEY
@ -51,7 +52,27 @@ services:
context: ../api context: ../api
dockerfile: Dockerfile.debian dockerfile: Dockerfile.debian
command: develop command: develop
healthcheck:
test:
[
"CMD-SHELL",
"curl -o /dev/null -s -w '%{http_code}' http://localhost:5000/api/v1 | grep '301' || exit 1",
]
interval: 10s
timeout: 5s
retries: 3
start_period: 60s
celeryworker: worker:
<<: *django <<: *django
command: develop-celery command: develop-worker
healthcheck:
test:
[
"CMD-SHELL",
"celery -A funkwhale_api.taskapp status | grep 'OK' || exit 1",
]
interval: 10s
timeout: 5s
retries: 3
start_period: 30s

View File

@ -18,6 +18,6 @@ services:
depends_on: depends_on:
minio: {} minio: {}
celeryworker: worker:
depends_on: depends_on:
minio: {} minio: {}

View File

@ -284,7 +284,7 @@ Username `funkwhale` is not permitted. You need to export COMPOSE_PROJECT_NAME t
Recycle individual containers: Recycle individual containers:
```sh ```sh
docker compose rm -sf api celeryworker; docker compose up -d api celeryworker docker compose rm -sf api worker; docker compose up -d api worker
``` ```
Once you're done with the containers, you can stop them all: Once you're done with the containers, you can stop them all: