sql >> Databáze >  >> NoSQL >> Redis

Žádná odezva po připojení z celeru k redis přes ssl

Problém se mi podařilo vyřešit provedením změn v konfiguraci kontejnerů.
Konkrétně jsem provedl následující změny:

V kontejneru redis:

  • podle tohoto návodu přidali stunnel a vytvořili certifikáty pro kontejner redis
  • použil tento git kód ke konfiguraci stunnelu v kontejneru Docker

V kontejneru celer:
- zvýšila úroveň protokolu na ladit

Nejprve jsem otestoval, že se mohu připojit ze svého localhost ke kontejneru redis docker přes ssl. Toto je popsáno zde

Poté jsem otestoval, že se mohu připojit z kontejneru celeru do kontejneru redis přes ssl. Soubor docker-compose je:

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:

Další související soubory jsou:

soubory v kontejneru dockeru redis: (nastavení v těchto souborech je popsáno zde)

  • redis kontejner Dockerfile
  • redis/conf/redis.conf
  • redis/stunnel-redis-server.conf

nastavení na kontejneru celeru:

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'



  1. Problémy se spuštěním instance OAuthd

  2. Jak vložit prvek do interního seznamu MongoDB?

  3. jarní data - Mongodb - metoda findBy pro vnořené objekty

  4. java.lang.NoClassDefFoundError při použití ovladače MongoDB