From 03f6623ed0e0c98cc774c05c7a915d9dd0020a74 Mon Sep 17 00:00:00 2001 From: Rishi Ghan Date: Wed, 15 May 2024 21:27:38 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20Fixes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/redis.config.ts | 25 ++----- docker-compose.env | 9 ++- docker-compose.yml | 145 +++++++++++++++++++++++++++-------------- 3 files changed, 111 insertions(+), 68 deletions(-) diff --git a/config/redis.config.ts b/config/redis.config.ts index 8998da0..554062b 100644 --- a/config/redis.config.ts +++ b/config/redis.config.ts @@ -1,24 +1,11 @@ import { createClient } from "redis"; -console.log(`REDIS_URI: ${process.env.REDIS_URI}`); -const redisURL = process.env.REDIS_URI; -if (!redisURL) throw new Error("REDIS_URI environment variable is not set."); -const createRedisClient = (url) => { - const client = createClient(url); - - client.on("error", (err) => console.error("Redis Client Error", err)); - client.on("connect", () => console.log("Connected to Redis:", url)); - client.on("reconnecting", () => console.log("Reconnecting to Redis...")); - - client.connect().catch((err) => console.error("Failed to connect to Redis:", err)); - - return client; -}; - -const pubClient = createRedisClient(redisURL); +const pubClient = createClient({ + url: process.env.REDIS_URI || 'redis://localhost:6379' +}); +(async () => { + await pubClient.connect(); +})(); const subClient = pubClient.duplicate(); -subClient.on("error", (err) => console.error("Redis Subscriber Client Error", err)); -subClient.connect().catch((err) => console.error("Failed to connect Redis Subscriber:", err)); - export { subClient, pubClient }; diff --git a/docker-compose.env b/docker-compose.env index 68dcb92..c4ff2a8 100644 --- a/docker-compose.env +++ b/docker-compose.env @@ -3,7 +3,14 @@ LOGGER=true LOGLEVEL=info SERVICEDIR=dist/services -TRANSPORTER=nats://nats:4222 +TRANSPORTER=redis://redis:6379 +COMICS_DIRECTORY=/Users/rishi/work/threetwo-core-service/comics +USERDATA_DIRECTORY=/Users/rishi/work/threetwo-core-service/userdata +REDIS_URI=redis://redis:6379 +ELASTICSEARCH_URI=http://elasticsearch:9200 +MONGO_URI=mongodb://mongo:27017/threetwo +UNRAR_BIN_PATH=/opt/homebrew/bin/unrar +SEVENZ_BINARY_PATH=/opt/homebrew/bin/7za CACHER=Memory diff --git a/docker-compose.yml b/docker-compose.yml index 692eb3a..4f780e7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,58 +1,107 @@ -version: "3.3" +x-userdata-volume: &userdata-volume + type: bind + source: ${USERDATA_DIRECTORY} + target: /userdata + +x-comics-volume: &comics-volume + type: bind + source: ${COMICS_DIRECTORY} + target: /comics services: - - api: + core-services: build: - context: . - image: threetwo-library-service - env_file: docker-compose.env - environment: - SERVICES: api - PORT: 3000 - depends_on: - - nats - labels: - - "traefik.enable=true" - - "traefik.http.routers.api-gw.rule=PathPrefix(`/`)" - - "traefik.http.services.api-gw.loadbalancer.server.port=3000" - networks: - - internal - - greeter: - build: - context: . - image: threetwo-library-service - env_file: docker-compose.env - environment: - SERVICES: greeter - depends_on: - - nats - networks: - - internal - - nats: - image: nats:2 - networks: - - internal - - traefik: - image: traefik:v2.1 - command: - - "--api.insecure=true" # Don't do that in production! - - "--providers.docker=true" - - "--providers.docker.exposedbydefault=false" + context: https://github.com/rishighan/threetwo-core-service.git + image: frishi/threetwo-core-service + container_name: core-services ports: - - 3000:80 - - 3001:8080 + - "3000:3000" + - "3001:3001" + depends_on: + - db + - redis + - elasticsearch + - kafka + - zookeeper + environment: + name: core-services + SERVICES: api,library,jobqueue,settings,search,socket,imagetransformation,torrentjobs,opds + env_file: docker-compose.env volumes: - - /var/run/docker.sock:/var/run/docker.sock:ro + - *comics-volume + - *userdata-volume networks: - - internal - - default + - proxy + + zookeeper: + image: zookeeper:latest + container_name: zookeeper + ports: + - "2181:2181" + networks: + - proxy + + kafka: + image: apache/kafka:latest + container_name: kafka + ports: + - "9092:9092" + environment: + KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:9093,OUTSIDE://localhost:9092 + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT + KAFKA_LISTENERS: INSIDE://0.0.0.0:9093,OUTSIDE://0.0.0.0:9092 + KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 + volumes: + - /var/run/docker.sock:/var/run/docker.sock + depends_on: + - zookeeper + networks: + - proxy + + db: + image: "bitnami/mongodb:latest" + container_name: database + networks: + - proxy + ports: + - "27017:27017" + volumes: + - "mongodb_data:/bitnami/mongodb" + + redis: + image: "bitnami/redis:latest" + container_name: redis + environment: + ALLOW_EMPTY_PASSWORD: "yes" + networks: + - proxy + ports: + - "6379:6379" + + elasticsearch: + image: docker.elastic.co/elasticsearch/elasticsearch:7.16.2 + container_name: elasticsearch + environment: + - "discovery.type=single-node" + - "ES_JAVA_OPTS=-Xms512m -Xmx512m" + - "xpack.security.enabled=true" + - "xpack.security.authc.api_key.enabled=true" + - "ELASTIC_PASSWORD=password" + ulimits: + memlock: + soft: -1 + hard: -1 + ports: + - 9200:9200 + networks: + - proxy networks: - internal: + proxy: + external: true volumes: - data: + mongodb_data: + driver: local + elasticsearch: + driver: local