Как настроить Django на поиск бэкенда Redis на сервере, а не на localhost?

Я работаю над обновлением старого приложения Django 2.2 и столкнулся с проблемой связи между Celery, Django, Docker и Redis. Я использую Docker Compose для создания приложения и Celery для планирования задач с Redis в качестве бэкенда. Celery планирует отправку электронных писем, и я могу получать эти письма, поэтому я уверен, что Celery правильно подключен к Redis. При запуске django.contrib.auth.login() я сталкиваюсь с ошибкой TypeError: Cannot create property 'status' on string 'ConnectionError at /api/auth/registration/register_pro/ Error 99 connecting to localhost:6379. Cannot assign requested address. Сообщение об ошибке печатает все переменные конфигурации и окружения приложения Django, и показывает, что везде в приложении redis_url, result_backend и broker_url настроены как redis://<NO_USERNAME_HERE>:<REDIS_PASSWORD>@redis:6379. Это должен быть правильный URL, так как он работает для Celery, но он не работает для Django, который ищет Redis на localhost. Я проверил все приложение на предмет ссылок на localhost, но их нет.

Я пробовал добавлять и удалять переменные env, менять конфигурацию Django, запускать Django в средах разработки и производства, создавать собственный докер-образ Redis, настраивать redis.conf и многое другое, предложенное на Stackoverflow, GitHub Issues и ChatGPT. Я не знаю, что делать дальше.

Конфигурация кэша в Django:

REDIS_HOST = get_env_variable('REDIS_HOST')
REDIS_PORT = get_env_variable('REDIS_PORT')
REDIS_PASSWORD = get_env_variable('REDIS_PASSWORD')
REDIS_URL = 'redis://:%s@%s:%s' % (REDIS_PASSWORD, REDIS_HOST, REDIS_PORT)
CACHES = {
    'default': {
        'BACKEND': 'redis_cache.RedisCache',
        'LOCATION': REDIS_URL,
        'OPTIONS': {
            'DB': 3,
        },
    },
}

Сообщение об ошибке в консоли Django:

Вот лог из Docker Compose, все службы запускаются корректно, и приложение открывается на myapp.com, где я могу получить к нему доступ. Единственное, что кажется неправильным, это то, что Redis ведет журнал Failed to write PID file: Permission denied. Запуск systemctl показывает, что служба redis-server.service загружена, но не работает, но Redis в любом случае должен быть запущен как контейнер Docker.

Вернуться на верх