From 4728eaa57892084e0626671dc947fec7668207fe Mon Sep 17 00:00:00 2001 From: "Ramvignesh B." Date: Mon, 11 May 2026 19:58:31 +0000 Subject: [PATCH] refactor: re-configure env vars and healthcheck (#3) Co-authored-by: ramvignesh-b Reviewed-on: https://git.ramvignesh.dev/me/toknd_auth/pulls/3 --- .env.example | 7 +++---- Dockerfile | 3 +++ docker-compose.yml | 13 +++++-------- src/config.ts | 5 +++-- src/core/RedisClient.ts | 5 ++++- src/index.ts | 2 +- tests/setup.ts | 5 +++-- 7 files changed, 22 insertions(+), 18 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/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 daf65bf..60d478d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,22 +3,19 @@ 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 - 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 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", () => ({