Tôi đã có thể khắc phục sự cố bằng cách thực hiện các thay đổi đối với cấu hình của các vùng chứa.
Cụ thể, tôi đã thực hiện các thay đổi sau:
Trong vùng chứa redis:
- đã làm theo hướng dẫn này để thêm stunnel và tạo chứng chỉ cho redis container
- đã sử dụng mã git này để định cấu hình đường hầm trong vùng chứa Docker
Trong vùng chứa cần tây:
- đã nâng cấp nhật ký lên gỡ lỗi
Lần đầu tiên tôi đã kiểm tra rằng tôi có thể kết nối từ máy chủ cục bộ của mình với vùng chứa redis docker qua ssl. Điều này được mô tả ở đây
Sau đó, tôi đã kiểm tra rằng tôi có thể kết nối từ thùng chứa cần tây với thùng chứa redis qua ssl. Tệp docker-compile là:
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:
Các tệp liên quan khác là:
tệp trên vùng chứa redis docker: (cài đặt trong các tệp này được mô tả ở đây)
- redis container Dockerfile
- redis / conf / redis.conf
- redis / stunnel-redis-server.conf
cài đặt trên hộp chứa cần tây:
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'