From a4f3ea7837defd65d119a87391f38ab4be0074d9 Mon Sep 17 00:00:00 2001 From: ramvignesh-b Date: Tue, 12 May 2026 01:05:27 +0530 Subject: [PATCH 1/2] refactor: replace REDIS_URL with individual host and port configuration variables --- .env.example | 7 +++---- docker-compose.yml | 7 +++++-- src/config.ts | 5 +++-- src/core/RedisClient.ts | 5 ++++- src/index.ts | 2 +- tests/setup.ts | 5 +++-- 6 files changed, 19 insertions(+), 12 deletions(-) diff --git a/.env.example b/.env.example index d57f4a9..34a1b8d 100644 --- a/.env.example +++ b/.env.example @@ -1,6 +1,5 @@ -# Core Server Configuration -PORT=3000 +APP_PORT=3000 API_KEY=your_secret_api_key_here -# Redis Configuration (Use redis://redis:6379 for Docker) -REDIS_URL=redis://localhost:6379 +REDIS_HOST=redis +REDIS_PORT=6379 diff --git a/docker-compose.yml b/docker-compose.yml index daf65bf..e071751 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,9 +3,10 @@ services: build: . restart: always ports: - - "${PORT:-3000}:3000" + - "${APP_PORT:-3000}:3000" environment: - - REDIS_URL=redis://redis:6379 + - REDIS_HOST=redis + - REDIS_PORT=6379 - API_KEY=${API_KEY} depends_on: - redis @@ -19,6 +20,8 @@ services: redis: image: redis:alpine restart: always + ports: + - "${REDIS_PORT:-6379}:6379" volumes: - redis-data:/data diff --git a/src/config.ts b/src/config.ts index 21f2142..ec8396d 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,8 +1,9 @@ import { z } from "zod"; const configSchema = z.object({ - PORT: z.string().default("3000"), - REDIS_URL: z.string(), + APP_PORT: z.string().default("3000"), + REDIS_HOST: z.string().default("redis"), + REDIS_PORT: z.coerce.number().default(6379), API_KEY: z.string(), }); diff --git a/src/core/RedisClient.ts b/src/core/RedisClient.ts index 96c6462..a6fbd71 100644 --- a/src/core/RedisClient.ts +++ b/src/core/RedisClient.ts @@ -1,4 +1,7 @@ import { Redis } from "ioredis"; import { config } from "../config"; -export const redis = new Redis(config.REDIS_URL); +export const redis = new Redis({ + host: config.REDIS_HOST, + port: config.REDIS_PORT, +}); diff --git a/src/index.ts b/src/index.ts index 2a0aba6..ef8a144 100644 --- a/src/index.ts +++ b/src/index.ts @@ -74,6 +74,6 @@ app.get("/health", async (c) => { export { app }; export default { - port: Number.parseInt(config.PORT, 10), + port: Number.parseInt(config.APP_PORT, 10), fetch: app.fetch, }; diff --git a/tests/setup.ts b/tests/setup.ts index e67f249..55a0eee 100644 --- a/tests/setup.ts +++ b/tests/setup.ts @@ -2,8 +2,9 @@ import { mock } from "bun:test"; // Global test setup to stub environment variables process.env.API_KEY = "test-api-key"; -process.env.REDIS_URL = "redis://localhost:6379"; -process.env.PORT = "3000"; +process.env.REDIS_HOST = "localhost"; +process.env.REDIS_PORT = "6379"; +process.env.APP_PORT = "3000"; // Global Redis mock mock.module("../src/core/RedisClient", () => ({ -- 2.52.0 From d28903c611152b16a743a851d758acf3689914ae Mon Sep 17 00:00:00 2001 From: ramvignesh-b Date: Tue, 12 May 2026 01:21:27 +0530 Subject: [PATCH 2/2] refactor: move healthcheck configuration from docker-compose to Dockerfile --- Dockerfile | 3 +++ docker-compose.yml | 6 ------ 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4194363..dc46f21 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,4 +11,7 @@ ENV NODE_ENV=production USER bun EXPOSE 3000 +HEALTHCHECK --interval=30s --timeout=5s --retries=3 \ + CMD bun -e "fetch('http://localhost:3000/health').then(res => res.ok ? process.exit(0) : process.exit(1)).catch(e => process.exit(1))" + CMD ["bun", "run", "start"] diff --git a/docker-compose.yml b/docker-compose.yml index e071751..60d478d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,12 +10,6 @@ services: - API_KEY=${API_KEY} depends_on: - redis - healthcheck: - test: [ "CMD", "bun", "-e", "fetch('http://localhost:3000/health').then(res => res.ok ? process.exit(0) : process.exit(1)).catch(e => process.exit(1))" ] - interval: 30s - timeout: 5s - retries: 3 - start_period: 10s redis: image: redis:alpine -- 2.52.0