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//
Также пытался настроить службу для 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"]