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'