diff --git a/Dockerfile b/Dockerfile index 38fd721..215d027 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,6 +28,7 @@ FROM python:3.12-slim-bookworm RUN apt-get update && apt-get install -y --no-install-recommends \ postgresql-client \ curl \ + procps \ && rm -rf /var/lib/apt/lists/* # Create django user (non-root for security) diff --git a/docker-compose.yml b/docker-compose.yml index d815190..baa48c0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -112,6 +112,12 @@ services: SECRET_KEY: ${SECRET_KEY} DATABASE_URL: postgresql://${DB_USER:-keepitgoing}:${DB_PASSWORD}@postgres:5432/${DB_NAME:-keepitgoing} REDIS_URL: redis://redis:6379/0 + EMAIL_HOST: ${EMAIL_HOST:-} + EMAIL_PORT: ${EMAIL_PORT:-587} + EMAIL_HOST_USER: ${EMAIL_HOST_USER:-} + EMAIL_HOST_PASSWORD: ${EMAIL_HOST_PASSWORD:-} + EMAIL_USE_TLS: ${EMAIL_USE_TLS:-True} + DEFAULT_FROM_EMAIL: ${DEFAULT_FROM_EMAIL:-noreply@localhost} networks: - backend depends_on: @@ -120,6 +126,12 @@ services: redis: condition: service_healthy command: celery-worker + healthcheck: + test: ["CMD-SHELL", "celery -A config inspect ping -d celery@$$HOSTNAME"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 30s # ================================================================= # Celery Beat Service - Scheduled task scheduler @@ -135,6 +147,12 @@ services: SECRET_KEY: ${SECRET_KEY} DATABASE_URL: postgresql://${DB_USER:-keepitgoing}:${DB_PASSWORD}@postgres:5432/${DB_NAME:-keepitgoing} REDIS_URL: redis://redis:6379/0 + EMAIL_HOST: ${EMAIL_HOST:-} + EMAIL_PORT: ${EMAIL_PORT:-587} + EMAIL_HOST_USER: ${EMAIL_HOST_USER:-} + EMAIL_HOST_PASSWORD: ${EMAIL_HOST_PASSWORD:-} + EMAIL_USE_TLS: ${EMAIL_USE_TLS:-True} + DEFAULT_FROM_EMAIL: ${DEFAULT_FROM_EMAIL:-noreply@localhost} networks: - backend depends_on: @@ -143,6 +161,12 @@ services: redis: condition: service_healthy command: celery-beat + healthcheck: + test: ["CMD-SHELL", "pgrep -f 'celery.*beat' || exit 1"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s # ================================================================= # Named Volumes diff --git a/notifications/tasks.py b/notifications/tasks.py index 2ae6318..f019a6a 100644 --- a/notifications/tasks.py +++ b/notifications/tasks.py @@ -226,7 +226,7 @@ def schedule_task_reminder(task_id): else: # Default to 9 AM on due date due_datetime = timezone.make_aware( - timezone.datetime.combine(task.due_date, timezone.datetime.min.time()) + datetime.combine(task.due_date, datetime.min.time()) ).replace(hour=9) remind_at = due_datetime - timedelta(minutes=reminder_minutes)