From 4e504827697e90d67bb481979047745bbcebfa26 Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Thu, 29 Jan 2026 02:23:41 +0100 Subject: [PATCH] remove redis --- .env | 4 - .env.example | 7 -- .env.production | 3 - .gitea/workflows/deploy.yml | 4 - ENV_CLEANUP_SUMMARY.md | 2 - README.md | 5 -- docker-compose.yml | 2 +- lib/config.ts | 12 +-- lib/env.ts | 6 -- lib/services/cache/redis-cache-service.ts | 54 ------------ lib/services/create-services.server.ts | 18 +--- package-lock.json | 101 ---------------------- package.json | 1 - types/redis.d.ts | 22 ----- 14 files changed, 5 insertions(+), 236 deletions(-) delete mode 100644 lib/services/cache/redis-cache-service.ts delete mode 100644 types/redis.d.ts diff --git a/.env b/.env index 6cc5c955..4037fea9 100644 --- a/.env +++ b/.env @@ -12,10 +12,6 @@ WOOCOMMERCE_CONSUMER_KEY=ck_38d97df86880e8fefbd54ab5cdf47a9c5a9e5b39 WOOCOMMERCE_CONSUMER_SECRET=cs_d675ee2ac2ec7c22de84ae5451c07e42b1717759 WORDPRESS_APP_PASSWORD="DlJH 49dp fC3a Itc3 Sl7Z Wz0k" -# Redis Cache -REDIS_URL=redis://redis:6379/2 -REDIS_KEY_PREFIX=klz: - # SMTP Configuration MAIL_HOST=smtp.eu.mailgun.org MAIL_PORT=587 diff --git a/.env.example b/.env.example index 5b3a6ce3..b281a558 100644 --- a/.env.example +++ b/.env.example @@ -35,13 +35,6 @@ MAIL_PASSWORD= MAIL_FROM=KLZ Cables MAIL_RECIPIENTS=info@klz-cables.com -# ──────────────────────────────────────────────────────────────────────────── -# Redis Cache Configuration -# ──────────────────────────────────────────────────────────────────────────── -# Optional: Leave empty to disable Redis caching -REDIS_URL=redis://localhost:6379/2 -REDIS_KEY_PREFIX=klz: - # ──────────────────────────────────────────────────────────────────────────── # Logging # ──────────────────────────────────────────────────────────────────────────── diff --git a/.env.production b/.env.production index 8eb4f9b4..0d0b5cf0 100644 --- a/.env.production +++ b/.env.production @@ -26,9 +26,6 @@ MAIL_PASSWORD= MAIL_FROM=KLZ Cables MAIL_RECIPIENTS=info@klz-cables.com -# Redis Cache (optional) -REDIS_URL=redis://redis:6379/2 -REDIS_KEY_PREFIX=klz: # Varnish Cache Size (optional) VARNISH_CACHE_SIZE=256m diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 0fa4e611..9b95b408 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -166,10 +166,6 @@ jobs: MAIL_FROM=${{ secrets.MAIL_FROM }} MAIL_RECIPIENTS=${{ secrets.MAIL_RECIPIENTS }} - # Redis Cache - REDIS_URL=${{ secrets.REDIS_URL }} - REDIS_KEY_PREFIX=${{ secrets.REDIS_KEY_PREFIX }} - EOF echo "✅ Environment file prepared" diff --git a/ENV_CLEANUP_SUMMARY.md b/ENV_CLEANUP_SUMMARY.md index a5905066..c243a65b 100644 --- a/ENV_CLEANUP_SUMMARY.md +++ b/ENV_CLEANUP_SUMMARY.md @@ -145,8 +145,6 @@ Ensure these secrets are configured in your Gitea repository: - `MAIL_PASSWORD` - SMTP password - `MAIL_FROM` - Sender email - `MAIL_RECIPIENTS` - Recipient emails (comma-separated) -- `REDIS_URL` - Redis connection URL -- `REDIS_KEY_PREFIX` - Redis key prefix (e.g., `klz:`) **Infrastructure:** - `REGISTRY_USER` - Docker registry username diff --git a/README.md b/README.md index 4390287d..7dda3a0f 100644 --- a/README.md +++ b/README.md @@ -47,11 +47,6 @@ NEXT_PUBLIC_UMAMI_SCRIPT_URL=https://analytics.infra.mintel.me/script.js SENTRY_DSN=https://PUBLIC_KEY@errors.infra.mintel.me/PROJECT_ID NEXT_PUBLIC_SENTRY_DSN=https://PUBLIC_KEY@errors.infra.mintel.me/PROJECT_ID -# Redis (optional cache) -# Platform provides a shared redis container reachable as `redis`. -# Pick a dedicated DB index per app, e.g. redis://redis:6379/2 -REDIS_URL=redis://redis:6379/2 -REDIS_KEY_PREFIX=klz: ``` ## 📊 Project Overview diff --git a/docker-compose.yml b/docker-compose.yml index 3a906539..3c3a7001 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,7 +9,7 @@ services: env_file: - .env healthcheck: - test: ["CMD-SHELL", "wget --quiet --tries=1 --spider http://localhost:3000/health || wget --quiet --tries=1 --spider http://localhost:3000/ || true"] + test: ["CMD-SHELL", "curl -f http://localhost:3000/health || exit 1"] interval: 10s timeout: 5s retries: 5 diff --git a/lib/config.ts b/lib/config.ts index e68035ce..54f8b4d6 100644 --- a/lib/config.ts +++ b/lib/config.ts @@ -42,11 +42,7 @@ function createConfig() { }, cache: { - redis: { - url: env.REDIS_URL, - keyPrefix: env.REDIS_KEY_PREFIX, - enabled: Boolean(env.REDIS_URL), - }, + enabled: false, }, logging: { @@ -116,11 +112,7 @@ export function getMaskedConfig() { }, }, cache: { - redis: { - url: mask(c.cache.redis.url), - keyPrefix: c.cache.redis.keyPrefix, - enabled: c.cache.redis.enabled, - }, + enabled: c.cache.enabled, }, logging: { level: c.logging.level, diff --git a/lib/env.ts b/lib/env.ts index 911d8f16..432943fd 100644 --- a/lib/env.ts +++ b/lib/env.ts @@ -19,10 +19,6 @@ export const envSchema = z.object({ // Error Tracking SENTRY_DSN: z.preprocess(preprocessEmptyString, z.string().optional()), - // Cache - REDIS_URL: z.preprocess(preprocessEmptyString, z.string().optional()), - REDIS_KEY_PREFIX: z.preprocess(preprocessEmptyString, z.string().default('klz:')), - // Logging LOG_LEVEL: z.enum(['debug', 'info', 'warn', 'error']).default('info'), @@ -51,8 +47,6 @@ export function getRawEnv() { NEXT_PUBLIC_UMAMI_WEBSITE_ID: process.env.NEXT_PUBLIC_UMAMI_WEBSITE_ID, NEXT_PUBLIC_UMAMI_SCRIPT_URL: process.env.NEXT_PUBLIC_UMAMI_SCRIPT_URL, SENTRY_DSN: process.env.SENTRY_DSN, - REDIS_URL: process.env.REDIS_URL, - REDIS_KEY_PREFIX: process.env.REDIS_KEY_PREFIX, LOG_LEVEL: process.env.LOG_LEVEL, MAIL_HOST: process.env.MAIL_HOST, MAIL_PORT: process.env.MAIL_PORT, diff --git a/lib/services/cache/redis-cache-service.ts b/lib/services/cache/redis-cache-service.ts deleted file mode 100644 index 659c647c..00000000 --- a/lib/services/cache/redis-cache-service.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { createClient, type RedisClientType } from 'redis'; -import type { CacheService, CacheSetOptions } from './cache-service'; - -export type RedisCacheServiceOptions = { - url: string; - keyPrefix?: string; -}; - -// Thin wrapper around shared Redis (platform provides host `redis`). -// Values are JSON-serialized. -export class RedisCacheService implements CacheService { - private readonly client: RedisClientType; - private readonly keyPrefix: string; - - constructor(options: RedisCacheServiceOptions) { - this.client = createClient({ url: options.url }); - this.keyPrefix = options.keyPrefix ?? ''; - - // Fire-and-forget connect. - this.client.connect().catch((err) => { - // We can't use getServerAppServices() here because it might cause a circular dependency - // during initialization. But we can log to console as a fallback or use a global logger if we had one. - // For now, let's just use console.error as this is a low-level service. - console.error('Redis connection error:', err); - }); - } - - private k(key: string) { - return `${this.keyPrefix}${key}`; - } - - async get(key: string): Promise { - const raw = await this.client.get(this.k(key)); - if (raw == null) return undefined; - return JSON.parse(raw) as T; - } - - async set(key: string, value: T, options?: CacheSetOptions): Promise { - const ttl = options?.ttlSeconds; - const raw = JSON.stringify(value); - - if (ttl && ttl > 0) { - await this.client.set(this.k(key), raw, { EX: ttl }); - return; - } - - await this.client.set(this.k(key), raw); - } - - async del(key: string): Promise { - await this.client.del(this.k(key)); - } -} - diff --git a/lib/services/create-services.server.ts b/lib/services/create-services.server.ts index 0fe59a4d..a96126ee 100644 --- a/lib/services/create-services.server.ts +++ b/lib/services/create-services.server.ts @@ -2,7 +2,6 @@ import { AppServices } from './app-services'; import { NoopAnalyticsService } from './analytics/noop-analytics-service'; import { UmamiAnalyticsService } from './analytics/umami-analytics-service'; import { MemoryCacheService } from './cache/memory-cache-service'; -import { RedisCacheService } from './cache/redis-cache-service'; import { GlitchtipErrorReportingService } from './errors/glitchtip-error-reporting-service'; import { NoopErrorReportingService } from './errors/noop-error-reporting-service'; import { PinoLoggerService } from './logging/pino-logger-service'; @@ -23,7 +22,6 @@ export function getServerAppServices(): AppServices { logger.info('Service configuration', { umamiEnabled: config.analytics.umami.enabled, sentryEnabled: config.errors.glitchtip.enabled, - redisEnabled: config.cache.redis.enabled, mailEnabled: Boolean(config.mail.host && config.mail.user), }); @@ -47,20 +45,8 @@ export function getServerAppServices(): AppServices { logger.info('Noop error reporting service initialized (error reporting disabled)'); } - const cache = config.cache.redis.enabled && config.cache.redis.url - ? new RedisCacheService({ - url: config.cache.redis.url, - keyPrefix: config.cache.redis.keyPrefix, - }) - : new MemoryCacheService(); - - if (config.cache.redis.enabled) { - logger.info('Redis cache service initialized', { - keyPrefix: config.cache.redis.keyPrefix - }); - } else { - logger.info('Memory cache service initialized (Redis not configured)'); - } + const cache = new MemoryCacheService(); + logger.info('Memory cache service initialized'); logger.info('Pino logger service initialized', { name: 'server', diff --git a/package-lock.json b/package-lock.json index 237a1128..67121c12 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,7 +35,6 @@ "react-dom": "^18.3.1", "react-email": "^5.2.5", "react-leaflet": "^4.2.1", - "redis": "^4.7.1", "resend": "^3.5.0", "schema-dts": "^1.1.5", "sharp": "^0.34.5", @@ -4459,71 +4458,6 @@ "@react-pdf/stylesheet": "^6.1.2" } }, - "node_modules/@redis/bloom": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.2.0.tgz", - "integrity": "sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==", - "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@redis/client": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.6.1.tgz", - "integrity": "sha512-/KCsg3xSlR+nCK8/8ZYSknYxvXHwubJrU82F3Lm1Fp6789VQ0/3RJKfsmRXjqfaTA++23CvC3hqmqe/2GEt6Kw==", - "license": "MIT", - "dependencies": { - "cluster-key-slot": "1.1.2", - "generic-pool": "3.9.0", - "yallist": "4.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@redis/client/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/@redis/graph": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.1.1.tgz", - "integrity": "sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==", - "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@redis/json": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.7.tgz", - "integrity": "sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ==", - "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@redis/search": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.2.0.tgz", - "integrity": "sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw==", - "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@redis/time-series": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.1.0.tgz", - "integrity": "sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g==", - "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, "node_modules/@rollup/plugin-commonjs": { "version": "28.0.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.1.tgz", @@ -8721,15 +8655,6 @@ "node": ">=6" } }, - "node_modules/cluster-key-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", - "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/codepage": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", @@ -10874,15 +10799,6 @@ "node": ">= 0.4" } }, - "node_modules/generic-pool": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.9.0.tgz", - "integrity": "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -15991,23 +15907,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/redis": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/redis/-/redis-4.7.1.tgz", - "integrity": "sha512-S1bJDnqLftzHXHP8JsT5II/CtHWQrASX5K96REjWjlmWKrviSOLWmM7QnRLstAWsu1VBBV1ffV6DzCvxNP0UJQ==", - "license": "MIT", - "workspaces": [ - "./packages/*" - ], - "dependencies": { - "@redis/bloom": "1.2.0", - "@redis/client": "1.6.1", - "@redis/graph": "1.1.1", - "@redis/json": "1.0.7", - "@redis/search": "1.2.0", - "@redis/time-series": "1.1.0" - } - }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", diff --git a/package.json b/package.json index b93d992f..ebd803af 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,6 @@ "react-dom": "^18.3.1", "react-email": "^5.2.5", "react-leaflet": "^4.2.1", - "redis": "^4.7.1", "resend": "^3.5.0", "schema-dts": "^1.1.5", "sharp": "^0.34.5", diff --git a/types/redis.d.ts b/types/redis.d.ts deleted file mode 100644 index 6165ee24..00000000 --- a/types/redis.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -// Fallback ambient types for `redis`. -// -// The official `redis` package ships its own types. In some editor setups -// (especially with newer TS + `moduleResolution: bundler`) the TS server may -// temporarily fail to resolve them. This keeps the project compiling. -declare module 'redis' { - export type RedisClientType = { - connect(): Promise; - get(key: string): Promise; - set( - key: string, - value: string, - options?: { - EX?: number; - } - ): Promise; - del(key: string): Promise; - }; - - export function createClient(options: { url: string }): RedisClientType; -} -