Celery в виде службы

Операционная система Centos 10

Пытаюсь собрать и запустить Celery прм помощи Docker Compose, но выдается ошибка. В проекте Django все работает - вручную из терминала запускается и брокер и beat, но при сборке образа выдается ошибка, не могу понять почему.

Содержимое файла yml

services:
  rabbitmq:
    image: rabbitmq:3-management
    ports:
      - "5672:5672"
      - "15672:15672"

  celery_worker:
    build: .
    command: celery -A hotel worker --loglevel=info
    depends_on:
      - rabbitmq
    environment:
      - CELERY_BROKER_URL=amqp://rabbitmq:5672//

  celery_beat:
    build: .
    command: celery -A hotel beat --loglevel=info
    depends_on:
      - rabbitmq
      - celery_worker
    environment:
      - CELERY_BROKER_URL=amqp://rabbitmq:5672//

Ошибка Docker

Также пытался настроить службу для Celery

[Unit]
Description=Celery Service
After=network.target

[Service]
Type=simple
WorkingDirectory=/home/danjer/Sites/hotel
Environment="PATH=/home/danjer/Sites/hotel/.venv/bin"
ExecStart=/home/danjer/Sites/hotel/.venv/bin/celery -A hotel worker --loglevel=info
Restart=always
RestartSec=10

но служба при запуске в статусе activating.

В общем, не могу сообразить что не так.


Ответы (1 шт):

Автор решения: Alex Wolf

Отсутствует Dockerfile - вы используете build: ., но не показали содержимое Dockerfile Неправильные зависимости - celery_beat не должен зависеть от celery_worker Отсутствует основное Django приложение Проблемы с переменными окружения

version: '3.8'

services:
  rabbitmq:
    image: rabbitmq:3-management
    container_name: hotel_rabbitmq
    ports:
      - "5672:5672"
      - "15672:15672"
    environment:
      RABBITMQ_DEFAULT_USER: admin
      RABBITMQ_DEFAULT_PASS: admin
    volumes:
      - rabbitmq_data:/var/lib/rabbitmq
    networks:
      - hotel_network

  web:
    build: .
    container_name: hotel_web
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - "8000:8000"
    volumes:
      - .:/app
    environment:
      - DEBUG=1
      - CELERY_BROKER_URL=amqp://admin:admin@rabbitmq:5672//
      - DJANGO_SETTINGS_MODULE=hotel.settings
    depends_on:
      - rabbitmq
    networks:
      - hotel_network

  celery_worker:
    build: .
    container_name: hotel_celery_worker
    command: celery -A hotel worker --loglevel=info
    volumes:
      - .:/app
    environment:
      - DEBUG=1
      - CELERY_BROKER_URL=amqp://admin:admin@rabbitmq:5672//
      - DJANGO_SETTINGS_MODULE=hotel.settings
    depends_on:
      - rabbitmq
      - web
    networks:
      - hotel_network

  celery_beat:
    build: .
    container_name: hotel_celery_beat
    command: celery -A hotel beat --loglevel=info
    volumes:
      - .:/app
    environment:
      - DEBUG=1
      - CELERY_BROKER_URL=amqp://admin:admin@rabbitmq:5672//
      - DJANGO_SETTINGS_MODULE=hotel.settings
    depends_on:
      - rabbitmq
      - web
    networks:
      - hotel_network

volumes:
  rabbitmq_data:

networks:
  hotel_network:
    driver: bridge

Dockerfile

FROM python:3.9-slim
    
    # Установка системных зависимостей
    RUN apt-get update \
        && apt-get install -y --no-install-recommends \
            postgresql-client \
            build-essential \
            libpq-dev \
        && rm -rf /var/lib/apt/lists/*
    
    # Создание рабочей директории
    WORKDIR /app
    
    # Копирование requirements.txt
    COPY requirements.txt /app/
    
    # Установка Python зависимостей
    RUN pip install --no-cache-dir -r requirements.txt
    
    # Копирование проекта
    COPY . /app/
    
    # Создание пользователя для безопасности
    RUN adduser --disabled-password --gecos '' appuser \
        && chown -R appuser:appuser /app
    USER appuser
    
    # Переменные окружения
    ENV PYTHONPATH=/app
    ENV DJANGO_SETTINGS_MODULE=hotel.settings
    
    # Команда по умолчанию
    CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
→ Ссылка