Docker-compose deployment, Redis configuration not taking effect, connection to Redis fails with error, how to fix?

Error Details

2025-12-10 08:04:25.265 INFO [Thread-38 (process_request_thread)] [_internal.py:97] - 192.168.128.11 - - [10/Dec/2025 08:04:25] "GET /console/api/workspaces/current/models/model-types/llm HTTP/1.1" 200 -
api-1  | 2025-12-10 08:04:29.968 WARNING [Thread-44 (process_request_thread)] [connection.py:669] - No hostname was supplied. Reverting to default 'localhost'
api-1  | 2025-12-10 08:04:30.593 ERROR [Thread-44 (process_request_thread)] [app.py:875] - Exception on /console/api/account/change-email [POST]
api-1  | Traceback (most recent call last):
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/utils/functional.py", line 32, in __call__
api-1  |     return self.__value__
api-1  |            ^^^^^^^^^^^^^^
api-1  | AttributeError: 'ChannelPromise' object has no attribute '__value__'. Did you mean: '__call__'?
api-1  | 
api-1  | During handling of the above exception, another exception occurred:
api-1  | 
api-1  | Traceback (most recent call last):
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/transport/virtual/base.py", line 951, in create_channel
api-1  |     return self._avail_channels.pop()
api-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  | IndexError: pop from empty list
api-1  | 
api-1  | During handling of the above exception, another exception occurred:
api-1  | 
api-1  | Traceback (most recent call last):
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 385, in connect_check_health
api-1  |     sock = self.retry.call_with_retry(
api-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/redis/retry.py", line 87, in call_with_retry
api-1  |     return do()
api-1  |            ^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 386, in 
```<lambda>
api-1  |     lambda: self._connect(), lambda error: self.disconnect(error)
api-1  |             ^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 797, in _connect
api-1  |     raise err
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 781, in _connect
api-1  |     sock.connect(socket_address)
api-1  | ConnectionRefusedError: [Errno 111] Connection refused
api-1  | 
api-1  | During handling of the above exception, another exception occurred:
api-1  | 
api-1  | Traceback (most recent call last):
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/connection.py", line 472, in _reraise_as_library_errors
api-1  |     yield
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/connection.py", line 459, in _ensure_connection
api-1  |     return retry_over_time(
api-1  |            ^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/utils/functional.py", line 318, in retry_over_time
api-1  |     return fun(*args, **kwargs)
api-1  |            ^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/connection.py", line 938, in _connection_factory
api-1  |     self._connection = self._establish_connection()
api-1  |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/connection.py", line 860, in _establish_connection
api-1  |     conn = self.transport.establish_connection()
api-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/transport/virtual/base.py", line 975, in establish_connection
api-1  |     self._avail_channels.append(self.create_channel(self))
api-1  |                                 ^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/transport/virtual/base.py", line 953, in create_channel
api-1  |     channel = self.Channel(connection)
api-1  |               ^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/transport/redis.py", line 751, in __init__
api-1  |     self.client.ping()
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/redis/commands/core.py", line 1219, in ping
api-1  |     return self.execute_command("PING", **kwargs)
api-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/redis/client.py", line 624, in execute_command
api-1  |     return self._execute_command(*args, **options)
api-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/redis/client.py", line 630, in _execute_command
api-1  |     conn = self.connection or pool.get_connection()
api-1  |                               ^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/redis/utils.py", line 188, in wrapper
api-1  |     return func(*args, **kwargs)
api-1  |            ^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 1530, in get_connection
api-1  |     connection.connect()
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 379, in connect
api-1  |     self.connect_check_health(check_health=True)
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 391, in connect_check_health
api-1  |     raise ConnectionError(self._error_message(e))
api-1  | redis.exceptions.ConnectionError: Error 111 connecting to localhost:6379. Connection refused.
api-1  | 
api-1  | The above exception was the direct cause of the following exception:
api-1  | 
api-1  | Traceback (most recent call last):
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/flask/app.py", line 917, in full_dispatch_request
api-1  |     rv = self.dispatch_request()
api-1  |          ^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/flask/app.py", line 902, in dispatch_request
api-1  |     return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)  # type: ignore[no-any-return]
api-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/flask_restx/api.py", line 404, in wrapper
api-1  |     resp = resource(*args, **kwargs)
api-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/flask/views.py", line 110, in view
api-1  |     return current_app.ensure_sync(self.dispatch_request)(**kwargs)  # type: ignore[no-any-return]
api-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/flask_restx/resource.py", line 41, in dispatch_request
api-1  |     resp = meth(*args, **kwargs)
api-1  |            ^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/controllers/console/wraps.py", line 268, in decorated
api-1  |     return view(*args, **kwargs)
api-1  |            ^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/controllers/console/wraps.py", line 220, in decorated
api-1  |     return view(*args, **kwargs)
api-1  |            ^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/libs/login.py", line 80, in decorated_view
api-1  |     return current_app.ensure_sync(func)(*args, **kwargs)
api-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/controllers/console/wraps.py", line 37, in decorated
api-1  |     return view(*args, **kwargs)
api-1  |            ^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/controllers/console/workspace/account.py", line 504, in post
api-1  |     token = AccountService.send_change_email_email(
api-1  |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/services/account_service.py", line 535, in send_change_email_email
api-1  |     send_change_mail_task.delay(
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/celery/app/task.py", line 444, in delay
api-1  |     return self.apply_async(args, kwargs)
api-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/celery/app/task.py", line 601, in apply_async
api-1  |     return app.send_task(
api-1  |            ^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/celery/app/base.py", line 930, in send_task
api-1  |     amqp.send_task_message(P, name, message, **options)
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/celery/app/amqp.py", line 523, in send_task_message
api-1  |     ret = producer.publish(
api-1  |           ^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/messaging.py", line 190, in publish
api-1  |     return _publish(
api-1  |            ^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/connection.py", line 556, in _ensured
api-1  |     return fun(*args, **kwargs)
api-1  |            ^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/messaging.py", line 200, in _publish
api-1  |     channel = self.channel
api-1  |               ^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/messaging.py", line 224, in _get_channel
api-1  |     channel = self._channel = channel()
api-1  |                               ^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/utils/functional.py", line 34, in __call__
api-1  |     value = self.__value__ = self.__contract__()
api-1  |                              ^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/messaging.py", line 240, in <lambda>
api-1  |     channel = ChannelPromise(lambda: connection.default_channel)
api-1  |                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/connection.py", line 957, in default_channel
api-1  |     self._ensure_connection(**conn_opts)
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/connection.py", line 458, in _ensure_connection
api-1  |     with ctx():
api-1  |          ^^^^^
api-1  |   File "/usr/local/lib/python3.12/contextlib.py", line 158, in __exit__
api-1  |     self.gen.throw(value)
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/connection.py", line 476, in _reraise_as_library_errors
api-1  |     raise ConnectionError(str(exc)) from exc
api-1  | kombu.exceptions.OperationalError: Error 111 connecting to localhost:6379. Connection refused.
api-1  | 2025-12-10 08:04:30.610 ERROR [Thread-44 (process_request_thread)] [app.py:875] - Exception on /console/api/account/change-email [POST]
api-1  | Traceback (most recent call last):
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/utils/functional.py", line 32, in __call__
api-1  |     return self.__value__
api-1  |            ^^^^^^^^^^^^^^
api-1  | AttributeError: 'ChannelPromise' object has no attribute '__value__'. Did you mean: '__call__'?
api-1  | 
api-1  | During handling of the above exception, another exception occurred:
api-1  | 
api-1  | Traceback (most recent call last):
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/transport/virtual/base.py", line 951, in create_channel
api-1  |     return self._avail_channels.pop()
api-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  | IndexError: pop from empty list
api-1  | 
api-1  | During handling of the above exception, another exception occurred:
api-1  | 
api-1  | Traceback (most recent call last):
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 385, in connect_check_health
api-1  |     sock = self.retry.call_with_retry(
api-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/redis/retry.py", line 87, in call_with_retry
api-1  |     return do()
api-1  |            ^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 386, in <lambda>
api-1  |     lambda: self._connect(), lambda error: self.disconnect(error)
api-1  |             ^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 797, in _connect
api-1  |     raise err
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 781, in _connect
api-1  |     sock.connect(socket_address)
api-1  | ConnectionRefusedError: [Errno 111] Connection refused
api-1  | 
api-1  | During handling of the above exception, another exception occurred:
api-1  | 
api-1  | Traceback (most recent call last):
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/connection.py", line 472, in _reraise_as_library_errors
api-1  |     yield
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/connection.py", line 459, in _ensure_connection
api-1  |     return retry_over_time(
api-1  |            ^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/utils/functional.py", line 318, in retry_over_time
api-1  |     return fun(*args, **kwargs)
api-1  |            ^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/connection.py", line 938, in _connection_factory
api-1  |     self._connection = self._establish_connection()
api-1  |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/connection.py", line 860, in _establish_connection
api-1  |     conn = self.transport.establish_connection()
api-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/transport/virtual/base.py", line 975, in establish_connection
api-1  |     self._avail_channels.append(self.create_channel(self))
api-1  |                                 ^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/transport/virtual/base.py", line 953, in create_channel
api-1  |     channel = self.Channel(connection)
api-1  |               ^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/transport/redis.py", line 751, in __init__
api-1  |     self.client.ping()
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/redis/commands/core.py", line 1219, in ping
api-1  |     return self.execute_command("PING", **kwargs)
api-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/redis/client.py", line 624, in execute_command
api-1  |     return self._execute_command(*args, **options)
api-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/redis/client.py", line 630, in _execute_command
api-1  |     conn = self.connection or pool.get_connection()
api-1  |                               ^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/redis/utils.py", line 188, in wrapper
api-1  |     return func(*args, **kwargs)
api-1  |            ^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 1530, in get_connection
api-1  |     connection.connect()
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 379, in connect
api-1  |     self.connect_check_health(check_health=True)
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 391, in connect_check_health
api-1  |     raise ConnectionError(self._error_message(e))
api-1  | redis.exceptions.ConnectionError: Error 111 connecting to localhost:6379. Connection refused.
api-1  | 
api-1  | The above exception was the direct cause of the following exception:
api-1  | 
api-1  | Traceback (most recent call last):
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/flask/app.py", line 917, in full_dispatch_request
api-1  |     rv = self.dispatch_request()
api-1  |          ^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/flask/app.py", line 902, in dispatch_request
api-1  |     return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)  # type: ignore[no-any-return]
api-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/flask_restx/api.py", line 404, in wrapper
api-1  |     resp = resource(*args, **kwargs)
api-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/flask/views.py", line 110, in view
api-1  |     return current_app.ensure_sync(self.dispatch_request)(**kwargs)  # type: ignore[no-any-return]
api-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/flask_restx/resource.py", line 41, in dispatch_request
api-1  |     resp = meth(*args, **kwargs)
api-1  |            ^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/controllers/console/wraps.py", line 268, in decorated
api-1  |     return view(*args, **kwargs)
api-1  |            ^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/controllers/console/wraps.py", line 220, in decorated
api-1  |     return view(*args, **kwargs)
api-1  |            ^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/libs/login.py", line 80, in decorated_view
api-1  |     return current_app.ensure_sync(func)(*args, **kwargs)
api-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/controllers/console/wraps.py", line 37, in decorated
api-1  |     return view(*args, **kwargs)
api-1  |            ^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/controllers/console/workspace/account.py", line 504, in post
api-1  |     token = AccountService.send_change_email_email(
api-1  |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/services/account_service.py", line 535, in send_change_email_email
api-1  |     send_change_mail_task.delay(
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/celery/app/task.py", line 444, in delay
api-1  |     return self.apply_async(args, kwargs)
api-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/celery/app/task.py", line 601, in apply_async
api-1  |     return app.send_task(
api-1  |            ^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/celery/app/base.py", line 930, in send_task
api-1  |     amqp.send_task_message(P, name, message, **options)
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/celery/app/amqp.py", line 523, in send_task_message
api-1  |     ret = producer.publish(
api-1  |           ^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/messaging.py", line 190, in publish
api-1  |     return _publish(
api-1  |            ^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/connection.py", line 556, in _ensured
api-1  |     return fun(*args, **kwargs)
api-1  |            ^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/messaging.py", line 200, in _publish
api-1  |     channel = self.channel
api-1  |               ^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/messaging.py", line 224, in _get_channel
api-1  |     channel = self._channel = channel()
api-1  |                               ^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/utils/functional.py", line 34, in __call__
api-1  |     value = self.__value__ = self.__contract__()
api-1  |                              ^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/messaging.py", line 240, in <lambda>
api-1  |     channel = ChannelPromise(lambda: connection.default_channel)
api-1  |                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/connection.py", line 957, in default_channel
api-1  |     self._ensure_connection(**conn_opts)
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/connection.py", line 458, in _ensure_connection
api-1  |     with ctx():
api-1  |          ^^^^^
api-1  |   File "/usr/local/lib/python3.12/contextlib.py", line 158, in __exit__
api-1  |     self.gen.throw(value)
api-1  |   File "/app/api/.venv/lib/python3.12/site-packages/kombu/connection.py", line 476, in _reraise_as_library_errors
api-1  |     raise ConnectionError(str(exc)) from exc
api-1  | kombu.exceptions.OperationalError: Error 111 connecting to localhost:6379. Connection refused.
api-1  | 2025-12-10 08:04:30.616 INFO [Thread-44 (process_request_thread)] [_internal.py:97] - 192.168.128.11 - - [10/Dec/2025 08:04:30] "POST /console/api/account/change-email HTTP/1.1" 500 -

![Image|690x444](upload://1Pu11n4kRSu1uFabKWX81ZYzZs1.png)

Redis Configuration

Redis Configuration

This Redis configuration is used for caching and for pub/sub during conversation.

------------------------------

REDIS_HOST=redis
REDIS_PORT=6379
REDIS_USERNAME=
REDIS_PASSWORD=
REDIS_USE_SSL=false

SSL configuration for Redis (when REDIS_USE_SSL=true)

REDIS_SSL_CERT_REQS=CERT_NONE

Options: CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED

REDIS_SSL_CA_CERTS=

Path to CA certificate file for SSL verification

REDIS_SSL_CERTFILE=

Path to client certificate file for SSL authentication

REDIS_SSL_KEYFILE=

Path to client private key file for SSL authentication

REDIS_DB=0

Whether to use Redis Sentinel mode.

If set to true, the application will automatically discover and connect to the master node through Sentinel.

REDIS_USE_SENTINEL=false

List of Redis Sentinel nodes. If Sentinel mode is enabled, provide at least one Sentinel IP and port.

Format: <sentinel1_ip>:<sentinel1_port>,<sentinel2_ip>:<sentinel2_port>,<sentinel3_ip>:<sentinel3_port>

REDIS_SENTINELS=
REDIS_SENTINEL_SERVICE_NAME=
REDIS_SENTINEL_USERNAME=
REDIS_SENTINEL_PASSWORD=
REDIS_SENTINEL_SOCKET_TIMEOUT=0.1

List of Redis Cluster nodes. If Cluster mode is enabled, provide at least one Cluster IP and port.

Format: <Cluster1_ip>:<Cluster1_port>,<Cluster2_ip>:<Cluster2_port>,<Cluster3_ip>:<Cluster3_port>

REDIS_USE_CLUSTERS=false
REDIS_CLUSTERS=
REDIS_CLUSTERS_PASSWORD=


Docker Compose Content (Main)

services:

API service

api:
image: docker.1ms.run/langgenius/dify-api:1.10.1-fix.1
restart: always
#user: “root:root”
deploy:
resources:
limits:
memory: 1024M
cpus: ‘1’
environment:
# Use the shared environment variables.
<<: *shared-api-worker-env
# Startup mode, ‘api’ starts the API server.
MODE: api
SENTRY_DSN: ${API_SENTRY_DSN:-}
SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0}
SENTRY_PROFILES_SAMPLE_RATE: ${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0}
PLUGIN_REMOTE_INSTALL_HOST: ${EXPOSE_PLUGIN_DEBUGGING_HOST:-localhost}
PLUGIN_REMOTE_INSTALL_PORT: ${EXPOSE_PLUGIN_DEBUGGING_PORT:-5003}
PLUGIN_MAX_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800}
INNER_API_KEY_FOR_PLUGIN: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1}
depends_on:
db_postgres:
condition: service_healthy
required: false
db_mysql:
condition: service_healthy
required: false
oceanbase:
condition: service_healthy
required: false
seekdb:
condition: service_healthy
required: false
redis:
condition: service_started
volumes:
# Mount the storage directory to the container, for storing user files.
- ./volumes/app/storage:/app/api/storage:rw
networks:
- ssrf_proxy_network
- default

The redis cache.

redis:
image: docker.1ms.run/redis:6-alpine
deploy:
resources:
limits:
memory: 128M
cpus: ‘0.25’
restart: always
ports:
- “16379:6379”
environment:
REDISCLI_AUTH: ${REDIS_PASSWORD:-X5t9!@#QwE123R4}
volumes:
# Mount the redis data directory to the container.
- ./volumes/redis/data:/data
# Set the redis password when startup redis server.
command: redis-server --requirepass ${REDIS_PASSWORD:-X5t9!@#QwE123R4}
healthcheck:
test:
[
“CMD-SHELL”,
“redis-cli -a ${REDIS_PASSWORD:-X5t9!@#QwE123R4} ping | grep -q PONG”,
]