wip: add redis

This commit is contained in:
Steve Korshakov 2025-07-25 22:41:09 -07:00
parent 2f853017ee
commit 4bf0801ed9
6 changed files with 108 additions and 8 deletions

View File

@ -25,6 +25,8 @@ spec:
env:
- name: NODE_ENV
value: production
- name: REDIS_URL
value: redis://happy-redis:6379
envFrom:
- secretRef:
name: handy-secrets

75
deploy/happy-redis.yaml Normal file
View File

@ -0,0 +1,75 @@
apiVersion: v1
kind: Service
metadata:
name: happy-redis
labels:
app: happy-redis
spec:
ports:
- port: 6379
name: redis
selector:
app: happy-redis
---
apiVersion: v1
kind: ConfigMap
metadata:
name: happy-redis-config
data:
redis.conf: |
dir /data
appendonly yes
appendfsync everysec
save 900 1
save 300 10
save 60 10000
maxmemory-policy noeviction
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: happy-redis
spec:
serviceName: happy-redis
replicas: 1
selector:
matchLabels:
app: happy-redis
template:
metadata:
labels:
app: happy-redis
spec:
containers:
- name: redis
image: redis:7-alpine
command:
- redis-server
- "/etc/redis/redis.conf"
ports:
- containerPort: 6379
name: redis
volumeMounts:
- name: redis-data
mountPath: /data
- name: redis-config
mountPath: /etc/redis
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
cpu: 500m
memory: 512Mi
volumes:
- name: redis-config
configMap:
name: happy-redis-config
volumeClaimTemplates:
- metadata:
name: redis-data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi

View File

@ -31,6 +31,7 @@
"@fastify/bearer-auth": "^10.1.1",
"@fastify/cors": "^10.0.1",
"@prisma/client": "^6.11.1",
"@socket.io/redis-streams-adapter": "^0.2.2",
"@types/jsonwebtoken": "^9.0.10",
"axios": "^1.6.8",
"chalk": "4.1.2",
@ -39,13 +40,14 @@
"elevenlabs": "^1.54.0",
"fastify": "^5.2.0",
"fastify-type-provider-zod": "^4.0.2",
"ioredis": "^5.4.1",
"ioredis": "^5.6.1",
"jsonwebtoken": "^9.0.2",
"pino-pretty": "^13.0.0",
"prisma": "^6.11.1",
"prisma-json-types-generator": "^3.5.1",
"privacy-kit": "^0.0.23",
"socket.io": "^4.8.1",
"socket.io-adapter": "^2.5.5",
"tmp": "^0.2.3",
"tsx": "^4.19.2",
"tweetnacl": "^1.0.3",
@ -55,4 +57,4 @@
"zod": "^3.24.2",
"zod-to-json-schema": "^3.24.3"
}
}
}

View File

@ -3,14 +3,19 @@ import { log } from "@/utils/log";
import { awaitShutdown } from "@/utils/shutdown";
import { db } from './storage/db';
import { startTimeout } from "./app/timeout";
import { redis } from "./services/redis";
async function main() {
// Storage
await db.$connect();
await redis.connect();
await redis.ping();
//
// Start
//
await db.$connect();
const { app, io } = await startApi();
startTimeout();

View File

@ -0,0 +1,3 @@
import { Redis } from 'ioredis';
export const redis = new Redis();

View File

@ -352,6 +352,11 @@
"@jridgewell/resolve-uri" "^3.0.3"
"@jridgewell/sourcemap-codec" "^1.4.10"
"@msgpack/msgpack@~2.8.0":
version "2.8.0"
resolved "https://registry.yarnpkg.com/@msgpack/msgpack/-/msgpack-2.8.0.tgz#4210deb771ee3912964f14a15ddfb5ff877e70b9"
integrity sha512-h9u4u/jiIRKbq25PM+zymTyW6bhTzELvOoUd+AvYriWOAKpLGnIamaET3pnHYoI5iYphAHBI4ayx0MehR+VVPQ==
"@noble/curves@1.5.0":
version "1.5.0"
resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.5.0.tgz#7a9b9b507065d516e6dce275a1e31db8d2a100dd"
@ -671,6 +676,14 @@
resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz#821f8442f4175d8f0467b9daf26e3a18e2d02af2"
integrity sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==
"@socket.io/redis-streams-adapter@^0.2.2":
version "0.2.2"
resolved "https://registry.yarnpkg.com/@socket.io/redis-streams-adapter/-/redis-streams-adapter-0.2.2.tgz#149a46c546be0bd080b7a9dedb993ec75f0c1827"
integrity sha512-BMPa6oGC0wFgpMXoGksbJ75zMBwk+79pxjHc2YusdoK+X0BxN4fTsqEBuFV7yeXi9ekbi87rwlsT61+WZGVW9g==
dependencies:
"@msgpack/msgpack" "~2.8.0"
debug "~4.3.1"
"@stablelib/base64@^2.0.1":
version "2.0.1"
resolved "https://registry.yarnpkg.com/@stablelib/base64/-/base64-2.0.1.tgz#f1546ab26896b3490d1ab531373c0dc39e12cee1"
@ -1624,10 +1637,10 @@ ieee754@^1.2.1:
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
ioredis@^5.4.1:
version "5.4.1"
resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.4.1.tgz#1c56b70b759f01465913887375ed809134296f40"
integrity sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA==
ioredis@^5.6.1:
version "5.6.1"
resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.6.1.tgz#1ed7dc9131081e77342503425afceaf7357ae599"
integrity sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA==
dependencies:
"@ioredis/commands" "^1.1.1"
cluster-key-slot "^1.1.0"
@ -2254,7 +2267,7 @@ signal-exit@^3.0.3:
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
socket.io-adapter@~2.5.2:
socket.io-adapter@^2.5.5, socket.io-adapter@~2.5.2:
version "2.5.5"
resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz#c7a1f9c703d7756844751b6ff9abfc1780664082"
integrity sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==