通过ssl从celery到redis连接后无响应

我正在遵循本教程,并将Celery-background相关代码调整为我的项目。

就我而言,我在Docker环境中运行,并且有一个受保护的站点(即https:// localhost)。这需要

通信。

我调整了代码以确保安全连接。

我最初遇到连接问题,这产生了日志错误消息,但是我能够解决-

现在日志文件已经足够了,但是我认为我仍然有连接问题。结果,在运行时,触发任务时什么也没有发生。

在有担保的情况下没有联系的原因可能是什么?

如果按键不正确,是否应该收到消息?有没有办法从命令行测试从celery / web容器到redis容器的连接?

回答:

我能够通过更改容器的配置来解决此问题。

具体来说,我进行了以下更改:

在redis容器中:

  • 按照本教程添加通道,并为redis容器创建证书
  • 使用此 git代码在Docker容器中配置stunnel

在Celery容器中:

-提高了日志级别以进行 调试

我首先测试了可以通过ssl从本地主机连接到redisdocker容器。

然后,我测试可以通过ssl从celery容器连接到redis容器。docker-compose文件为:

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:

其他相关文件是:

**redis docker容器上的文件:

  • Redis容器Dockerfile
  • redis / conf / redis.conf
  • redis / stunnel-redis-server.conf

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'

以上是 通过ssl从celery到redis连接后无响应 的全部内容, 来源链接: utcz.com/qa/415135.html

回到顶部