diff --git a/docker-compose.yml b/docker-compose.yml index 15e9404..cbc6c0d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,6 +12,10 @@ services: APP_HOST: "0.0.0.0" APP_PORT: "8000" APP_WORKERS: "2" + KEYDB_REMOTE_HOST: "pay_keydb" + KEYDB_REMOTE_PORT: "${KEYDB_PORT:-6380}" + KEYDB_REMOTE_PASSWORD: "${REDIS_PASSWORD}" + KEYDB_REMOTE_DB: "${REDIS_DB:-0}" env_file: - .env depends_on: @@ -24,11 +28,13 @@ services: container_name: pay_keydb restart: no expose: - - "6379" + - "${KEYDB_PORT:-6380}" volumes: - pay_keydb_data:/data command: - keydb-server + - --port + - "${KEYDB_PORT:-6380}" - --requirepass - ${REDIS_PASSWORD} - --dir @@ -47,7 +53,7 @@ services: - "60" - "10000" healthcheck: - test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"] + test: ["CMD", "redis-cli", "-p", "${KEYDB_PORT:-6380}", "-a", "${REDIS_PASSWORD}", "ping"] interval: 5s timeout: 2s retries: 20 diff --git a/src/infrastructure/config/settings.py b/src/infrastructure/config/settings.py index 7961b9d..c464e63 100644 --- a/src/infrastructure/config/settings.py +++ b/src/infrastructure/config/settings.py @@ -282,6 +282,19 @@ class Settings(BaseSettings): else: data['KEYDB_REMOTE_PASSWORD'] = None + keydb_host_override = os.getenv('KEYDB_REMOTE_HOST') or data.get('KEYDB_REMOTE_HOST') + keydb_port_override = os.getenv('KEYDB_REMOTE_PORT') or data.get('KEYDB_REMOTE_PORT') + keydb_db_override = os.getenv('KEYDB_REMOTE_DB') or data.get('KEYDB_REMOTE_DB') + keydb_password_override = os.getenv('KEYDB_REMOTE_PASSWORD') or data.get('KEYDB_REMOTE_PASSWORD') + if keydb_host_override is not None and str(keydb_host_override).strip(): + data['KEYDB_REMOTE_HOST'] = str(keydb_host_override).strip() + if keydb_port_override is not None and str(keydb_port_override).strip(): + data['KEYDB_REMOTE_PORT'] = int(keydb_port_override) + if keydb_db_override is not None and str(keydb_db_override).strip(): + data['KEYDB_REMOTE_DB'] = int(keydb_db_override) + if keydb_password_override is not None and str(keydb_password_override).strip(): + data['KEYDB_REMOTE_PASSWORD'] = str(keydb_password_override).strip() + itpay_public_id = data.get('ITPAY_PUBLIC_ID') or os.getenv('ITPAY_PUBLIC_ID') itpay_api_secret = data.get('ITPAY_API_SECRET') or os.getenv('ITPAY_API_SECRET') if itpay_public_id is not None and str(itpay_public_id).strip() and itpay_api_secret is not None and str(itpay_api_secret).strip(): diff --git a/src/main.py b/src/main.py index 8e22621..1f570ec 100644 --- a/src/main.py +++ b/src/main.py @@ -42,6 +42,13 @@ async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]: app.state.redis_remote = create_redis_client(settings.KEYDB_REMOTE_URL) app.state.redis = app.state.redis_remote + try: + await app.state.redis_remote.ping() + logger.info('KeyDB connection established') + except Exception as exception: + logger.error(f'KeyDB connection failed: {exception}') + await app.state.redis_remote.aclose() + raise jwt_store = JwtKeyStore( vault_addr=settings.VAULT_ADDR,