Нет ответа после подключения из сельдерея к Redis через SSL - PullRequest
0 голосов
/ 16 февраля 2020

Я следую этому учебнику и настраиваю связанный с фоном Celery код для моего проекта.

В моем случае я работаю в среде Docker, и у меня есть защищенный сайт (т. е. https://localhost). который требует защищенный ssl обмен данными.

Я настроил код для безопасного соединения.
У меня были начальные проблемы с соединением, которые приводили к сообщениям об ошибках журнала, но я смог их решить - см. здесь .

Теперь файл журнала вполне, но я думаю, что у меня все еще есть проблемы с подключением. В результате во время выполнения, при запуске задачи ничего не происходит.

В чем может быть причина отсутствия соединения в защищенном случае?
Стоит ли ожидать сообщение, если ключи неверны? Есть ли способ проверить соединение из контейнеров celery / web с контейнером redis из командной строки?

1 Ответ

0 голосов
/ 18 февраля 2020

Мне удалось устранить проблему, внеся изменения в конфигурацию контейнеров.
В частности, я внес следующие изменения:

В контейнере Redis:

  • затем это руководство для добавления stunnel и создания сертификатов для контейнера redis
  • используется этот git код для настройки stunnel в контейнере Docker

В контейнере сельдерея:
- поднял уровень журнала до debug

Сначала я проверил, что могу подключиться с локального хоста к redis docker контейнер над ssl. Это описано здесь

Затем я проверил, что я могу подключиться из контейнера с сельдереем к контейнеру redis через ssl. docker -компонентный файл:

version: '3'

services:
  web:
    restart: always
    build:
      context: ./web
      dockerfile: Dockerfile
    expose:
      - "8000"
    volumes:
      - /home/webServer/web:/home/flask/app/web
      - /home/webServer/redis/ssl:/etc/certs
      - data2:/home/flask/app/web/project/img
    command: /usr/local/bin/gunicorn -w 2 -t 3600 -b :8000 project:app
    depends_on:
      - postgres
    stdin_open: true
    tty: true

  nginx:
    restart: always
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /home/webServer/web:/home/flask/app/web
      - data2:/home/flask/app/web/project/img
    depends_on:
      - web

  postgres:
    restart: always
    build:
      context: ./postgresql
      dockerfile: Dockerfile
    volumes:
      - data1:/var/lib/postgresql/data
    expose:
      - "5432"

  redis:
    build:
      context: ./redis
      dockerfile: Dockerfile
    restart: always

    command: sh -c "stunnel /stunnel-redis-server.conf && /usr/local/bin/redis-server /etc/redis/redis.conf"
    expose:
      - '6380'
    ports:
     - "6380:6380"
    volumes:
      - /home/webServer/redis/ssl:/etc/certs
      - /home/webServer/redis/conf:/etc/redis

  celery:
    build:
      context: ./web
    command: watchmedo auto-restart --directory=./ --pattern=*.py --recursive -- celery worker -A project.celery  --loglevel=debug
    volumes:
      - /home/webServer/web:/home/flask/app/web
      - /home/webServer/redis/ssl:/etc/certs
      - data2:/home/flask/app/web/project/img
    depends_on:
      - redis

volumes:
  data1:
  data2:

Другие связанные файлы:

файлы в контейнере redis docker: (настройки в этих файлах описаны здесь )

  • контейнер redis Dockerfile
  • redis / conf / redis.conf
  • redis / stunnel-redis- server.conf

настройки для сельдерея docker контейнер:

cat web/project/flask_celery.py
...

key_file = '/etc/certs/localhost.key'
cert_file = '/etc/certs/private.pem'
ca_file = '/etc/certs/myCA.pem'
...    

celery = Celery(app.import_name,
                backend=app.config['CELERY_RESULT_BACKEND'],
                broker=app.config['CELERY_BROKER_URL'],
                broker_use_ssl = {
                    'ssl_keyfile': key_file,
                    'ssl_certfile': cert_file,
                    'ssl_ca_certs': ca_file,
                    'ssl_cert_reqs': ssl.CERT_REQUIRED
                },
                redis_backend_use_ssl = {
                    'ssl_keyfile': key_file,
                    'ssl_certfile': cert_file,
                    'ssl_ca_certs': ca_file,
                    'ssl_cert_reqs': ssl.CERT_REQUIRED
                })

------------------

cat project/__init__.py
...
app.config['CELERY_BROKER_URL'] = 'rediss://webserver_redis_1:6380/0'
app.config['CELERY_RESULT_BACKEND'] = 'rediss://webserver_redis_1:6380/0'
...