Saya dapat memperbaiki masalah dengan membuat perubahan pada konfigurasi container.
Secara khusus, saya membuat perubahan berikut:
Dalam wadah redis:
- mengikuti tutorial ini untuk menambahkan stunnel, dan membuat sertifikat untuk wadah redis
- menggunakan kode git ini untuk mengonfigurasi stunnel dalam wadah Docker
Dalam wadah seledri:
- menaikkan level log ke debug
Saya pertama kali menguji bahwa saya dapat terhubung dari localhost saya ke wadah redis docker melalui ssl. Ini dijelaskan di sini
Kemudian, saya menguji bahwa saya dapat terhubung dari wadah seledri ke wadah redis melalui ssl. File komposisi buruh pelabuhan adalah:
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:
File terkait lainnya adalah:
file pada wadah redis docker: (setelan dalam file ini dijelaskan di sini)
- redis container Dockerfile
- redis/conf/redis.conf
- redis/stunnel-redis-server.conf
setelan pada wadah buruh pelabuhan seledri:
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'