Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Keine Antwort nach Verbindung von Sellerie zu Redis über SSL

Ich konnte das Problem beheben, indem ich Änderungen an der Konfiguration der Container vornahm.
Konkret habe ich die folgenden Änderungen vorgenommen:

Im Redis-Container:

  • dieses Tutorial befolgt, um Stunnel hinzuzufügen und Zertifikate für den Redis-Container zu erstellen
  • benutzte diesen Git-Code, um Stunnel innerhalb eines Docker-Containers zu konfigurieren

Im Sellerie-Container:
- erhöhte die Protokollebene auf debug

Ich habe zuerst getestet, dass ich von meinem Localhost über SSL eine Verbindung zum Redis-Docker-Container herstellen kann. Dies wird hier beschrieben

Dann habe ich getestet, dass ich über SSL eine Verbindung vom Sellerie-Container zum Redis-Container herstellen kann. Die Docker-Compose-Datei lautet:

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:

Andere verwandte Dateien sind:

Dateien im Redis-Docker-Container: (die Einstellungen in diesen Dateien werden hier beschrieben)

  • Redis-Container-Dockerfile
  • redis/conf/redis.conf
  • redis/stunnel-redis-server.conf

Einstellungen für den Sellerie-Docker-Container:

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'