From 66ac08e1d505207fca790468a149f716aa34b67e Mon Sep 17 00:00:00 2001 From: Declan Date: Wed, 27 Sep 2023 20:28:09 +0100 Subject: [PATCH] docker compose configuration --- docker-compose.override.yaml | 245 +++++++++++++++++++++++++++++++++++ docker-compose.yaml | 155 ++++++++++++++++++++++ 2 files changed, 400 insertions(+) create mode 100644 docker-compose.override.yaml create mode 100644 docker-compose.yaml diff --git a/docker-compose.override.yaml b/docker-compose.override.yaml new file mode 100644 index 0000000..5b19c52 --- /dev/null +++ b/docker-compose.override.yaml @@ -0,0 +1,245 @@ +version: "3.8" + +services: + # Overrides + kafka: + ports: + - 9092:9092 + + frontend: + ports: + - 80:80 + + gateway-service: + ports: + - 3000:3000 + + panel-service: + depends_on: + - panel-service-migrations + + post-service: + depends_on: + - post-service-migrations + + auth-service: + depends_on: + - auth-service-migrations + + comment-service: + depends_on: + - comment-service-migrations + + # Migrations + panel-service-migrations: + image: migrate/migrate:4 + command: "-path=/migrations -database postgresql://postgres:postgres@panel-service-postgres:5432/postgres?sslmode=disable up" + volumes: + - ./services/panel-service/internal/postgres/migrations:/migrations + depends_on: + panel-service-postgres: + condition: service_healthy + networks: + - panel-service-network + + post-service-migrations: + image: migrate/migrate:4 + command: "-path=/migrations -database postgresql://postgres:postgres@post-service-postgres:5432/postgres?sslmode=disable up" + volumes: + - ./services/post-service/internal/postgres/migrations:/migrations + depends_on: + post-service-postgres: + condition: service_healthy + networks: + - post-service-network + + auth-service-migrations: + image: migrate/migrate:4 + command: "-path=/migrations -database postgresql://postgres:postgres@auth-service-postgres:5432/postgres?sslmode=disable up" + volumes: + - ./services/auth-service/auth_service/postgres/migrations:/migrations + depends_on: + auth-service-postgres: + condition: service_healthy + networks: + - auth-service-network + + comment-service-migrations: + image: migrate/migrate:4 + command: "-path=/migrations -database postgresql://postgres:postgres@comment-service-postgres:5432/postgres?sslmode=disable up" + volumes: + - ./services/comment-service/comment_service/postgres/migrations:/migrations + depends_on: + comment-service-postgres: + condition: service_healthy + networks: + - comment-service-network + + # Postgres Instances + panel-service-postgres: + image: postgres:15-alpine + restart: unless-stopped + environment: + POSTGRES_DB: postgres + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + volumes: + - panel-service-postgres-volume:/var/lib/postgresql + healthcheck: + test: ["CMD-SHELL", "pg_isready", "--dbname={POSTGRES_DB}"] + interval: 30s + timeout: 15s + retries: 3 + start_period: 30s + ports: + - 5432:5432 + networks: + - panel-service-network + + post-service-postgres: + image: postgres:15-alpine + restart: unless-stopped + environment: + POSTGRES_DB: "postgres" + POSTGRES_USER: "postgres" + POSTGRES_PASSWORD: "postgres" + healthcheck: + test: ["CMD-SHELL", "pg_isready", "--dbname={POSTGRES_DB}"] + interval: 30s + timeout: 15s + retries: 3 + start_period: 30s + volumes: + - post-service-postgres-volume:/var/lib/postgresql + ports: + - 5433:5432 + networks: + - post-service-network + + auth-service-postgres: + image: postgres:15-alpine + restart: unless-stopped + environment: + POSTGRES_DB: "postgres" + POSTGRES_USER: "postgres" + POSTGRES_PASSWORD: "postgres" + healthcheck: + test: ["CMD-SHELL", "pg_isready", "--dbname={POSTGRES_DB}"] + interval: 30s + timeout: 15s + retries: 3 + start_period: 30s + volumes: + - auth-service-postgres-volume:/var/lib/postgresql + ports: + - 5434:5432 + networks: + - auth-service-network + + comment-service-postgres: + image: postgres:15-alpine + restart: unless-stopped + environment: + POSTGRES_DB: "postgres" + POSTGRES_USER: "postgres" + POSTGRES_PASSWORD: "postgres" + healthcheck: + test: ["CMD-SHELL", "pg_isready", "--dbname={POSTGRES_DB}"] + interval: 30s + timeout: 15s + retries: 3 + start_period: 30s + volumes: + - comment-service-postgres-volume:/var/lib/postgresql + ports: + - 5435:5432 + networks: + - comment-service-network + + # Redis Instances + panel-service-redis: + image: redis:7.2 + restart: unless-stopped + command: redis-server --requirepass redis --maxmemory 250mb --maxmemory-policy allkeys-lru + ports: + - 6379:6379 + networks: + - panel-service-network + + post-service-redis: + image: redis:7.2 + restart: unless-stopped + command: redis-server --requirepass redis --maxmemory 250mb --maxmemory-policy allkeys-lru + ports: + - 6380:6379 + networks: + - post-service-network + + comment-service-redis: + image: redis:7.2 + restart: unless-stopped + command: "redis-server --requirepass redis --maxmemory 250mb --maxmemory-policy allkeys-lru" + ports: + - 6381:6379 + networks: + - comment-service-network + + # Mongo Instance + user-service-mongo: + image: mongo:7.0 + restart: unless-stopped + environment: + MONGO_INITDB_ROOT_USERNAME: "mongo" + MONGO_INITDB_ROOT_PASSWORD: "mongo" + MONGO_INITDB_DATABASE: "user" + volumes: + - user-service-mongo-volume:/data/db + ports: + - 27017:27017 + networks: + - user-service-network + + # Dev Tools + dev-kafka-ui: + image: provectuslabs/kafka-ui:latest + restart: unless-stopped + environment: + KAFKA_CLUSTERS_0_NAME: "panels" + KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: "kafka:19092" + DYNAMIC_CONFIG_ENABLED: "true" + ports: + - 8080:8080 + networks: + - services-network + + dev-mongo-express: + image: mongo-express:latest + restart: unless-stopped + environment: + ME_CONFIG_MONGODB_ADMINUSERNAME: "mongo" + ME_CONFIG_MONGODB_ADMINPASSWORD: "mongo" + ME_CONFIG_MONGODB_URL: "mongodb://mongo:mongo@user-service-mongo:27017/" + ports: + - 8081:8081 + networks: + - user-service-network + + dev-adminer: + image: adminer:latest + restart: unless-stopped + environment: + ADMINER_DEFAULT_SERVER: "post-service-postgres:5432" + ports: + - 8082:8080 + networks: + - panel-service-network + - post-service-network + - auth-service-network + - comment-service-network + +volumes: + panel-service-postgres-volume: + post-service-postgres-volume: + user-service-mongo-volume: + auth-service-postgres-volume: + comment-service-postgres-volume: \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..0bbc583 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,155 @@ +version: "3.8" + +services: + # Kafka + kafka: + image: bitnami/kafka:3.4 + restart: unless-stopped + environment: + - KAFKA_CFG_NODE_ID=0 + - KAFKA_CFG_PROCESS_ROLES=controller,broker + - KAFKA_CFG_LISTENERS=CONTROLLER://:19093,INTERNAL://:19092,EXTERNAL://:9092 + - KAFKA_CFG_ADVERTISED_LISTENERS=INTERNAL://kafka:19092,EXTERNAL://localhost:9092 + - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT + - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:19093 + - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=INTERNAL + - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER + - KAFKA_KRAFT_CLUSTER_ID=g9rbXaCaSGqB3CURPeEvTA + volumes: + - kafka-volume:/bitnami/kafka + healthcheck: + # create the topics that are not auto-created (if they do not exist) as part of the healthcheck (when running with docker-compose) + test: ["CMD-SHELL", "kafka-topics.sh --bootstrap-server kafka:19092 --if-not-exists --create --topic panel && kafka-topics.sh --bootstrap-server kafka:19092 --if-not-exists --create --topic comment"] + interval: 1m30s + timeout: 30s + retries: 3 + start_period: 30s + networks: + - services-network + + # Frontend + frontend: + image: panels/frontend + build: + context: ./services/frontend + args: + - VITE_API_URL=http://127.0.0.1:3000/ + networks: + - edge-network + + # Gateway Service + gateway-service: + image: panels/gateway-service + build: + context: ./services/gateway-service + restart: on-failure + environment: + - PANEL_SVC_ADDR=panel-service:9090 + - POST_SVC_ADDR=post-service:9090 + - USER_SVC_ADDR=user-service:9090 + - AUTH_SVC_ADDR=auth-service:9090 + - COMMENT_SVC_ADDR=comment-service:9090 + - JWT_PUBLIC_KEY=LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUE3TGhQekc1cmNVMkE1NXFlazRmSwpFN1QwWXlYTFRrRVhqVVh2ZDdmLzdVWTIxQmVsZ0hWVFMyTDcxUW1zL3NPakhFWHdSOGx3dlA5VnhXRFRBMGJ4Cm45cnBYVFYwVXVGRWFtOEpGZTcwTzdaOSs0M1d1ampiYWdNT04vMTVZa3dGOTR4aVpQcllyWjE4TEUyZVZIaUMKZVFtdFczVzhBSzVxWnpydkREd0FkYlRMdm1LRWtEcGVKYTgyQXkwTy9jcW1JUTdDdHU0R1djendSSk1iTTJUbQo1UFkzWUNWZ0V0WE1WY1AwZWVhd2NJQXRZNVdyWXJ0T1VkTUFodFl0RlhYVWlObWliQVI4bFM4TXUyMGp1Rnc5CmJnb2FQUXZSN2FXLzhLL2hwaUdmbXN5V1lmbGpHM0xOYlJCMEpiclU5cTZ6NlcvckQzRlVCQmVDeW9WelA4TjMKU3dJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg== + networks: + - edge-network + - services-network + + # Panel Service + panel-service: + image: panels/panel-service + build: + context: ./services/panel-service + restart: on-failure + environment: + - KAFKA_BROKERS=kafka:19092 + - POSTGRES_USER=postgres + - POSTGRES_PASS=postgres + - POSTGRES_HOST=panel-service-postgres:5432 + - POSTGRES_DATABASE=postgres + - REDIS_HOST=panel-service-redis:6379 + - REDIS_PASS=redis + - LOG_LEVEL=info + networks: + - services-network + - panel-service-network + + # Post Service + post-service: + image: panels/post-service + build: + context: ./services/post-service + restart: on-failure + environment: + - KAFKA_BROKERS=kafka:19092 + - POSTGRES_USER=postgres + - POSTGRES_PASS=postgres + - POSTGRES_HOST=post-service-postgres:5432 + - POSTGRES_DATABASE=postgres + - REDIS_HOST=post-service-redis:6379 + - REDIS_PASS=redis + - LOG_LEVEL=info + networks: + - services-network + - post-service-network + + # User Service + user-service: + image: panels/user-service + build: + context: ./services/user-service + restart: on-failure + environment: + - KAFKA_BROKERS=kafka:19092 + - MONGODB_URI=mongodb://mongo:mongo@user-service-mongo:27017/ + networks: + - services-network + - user-service-network + + # Auth Service + auth-service: + image: panels/auth-service + build: + context: ./services/auth-service + restart: on-failure + environment: + - KAFKA_BROKERS=kafka:19092 + - POSTGRES_USER=postgres + - POSTGRES_PASS=postgres + - POSTGRES_HOST=auth-service-postgres:5432 + - POSTGRES_DATABASE=postgres + - PASSWORD_PEPPER=4d0c18c368489d4c0b48c497efb1d6b3 + - JWT_PUBLIC_KEY=LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUE3TGhQekc1cmNVMkE1NXFlazRmSwpFN1QwWXlYTFRrRVhqVVh2ZDdmLzdVWTIxQmVsZ0hWVFMyTDcxUW1zL3NPakhFWHdSOGx3dlA5VnhXRFRBMGJ4Cm45cnBYVFYwVXVGRWFtOEpGZTcwTzdaOSs0M1d1ampiYWdNT04vMTVZa3dGOTR4aVpQcllyWjE4TEUyZVZIaUMKZVFtdFczVzhBSzVxWnpydkREd0FkYlRMdm1LRWtEcGVKYTgyQXkwTy9jcW1JUTdDdHU0R1djendSSk1iTTJUbQo1UFkzWUNWZ0V0WE1WY1AwZWVhd2NJQXRZNVdyWXJ0T1VkTUFodFl0RlhYVWlObWliQVI4bFM4TXUyMGp1Rnc5CmJnb2FQUXZSN2FXLzhLL2hwaUdmbXN5V1lmbGpHM0xOYlJCMEpiclU5cTZ6NlcvckQzRlVCQmVDeW9WelA4TjMKU3dJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg== + - JWT_PRIVATE_KEY=LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcGdJQkFBS0NBUUVBN0xoUHpHNXJjVTJBNTVxZWs0ZktFN1QwWXlYTFRrRVhqVVh2ZDdmLzdVWTIxQmVsCmdIVlRTMkw3MVFtcy9zT2pIRVh3Ujhsd3ZQOVZ4V0RUQTBieG45cnBYVFYwVXVGRWFtOEpGZTcwTzdaOSs0M1cKdWpqYmFnTU9OLzE1WWt3Rjk0eGlaUHJZcloxOExFMmVWSGlDZVFtdFczVzhBSzVxWnpydkREd0FkYlRMdm1LRQprRHBlSmE4MkF5ME8vY3FtSVE3Q3R1NEdXY3p3UkpNYk0yVG01UFkzWUNWZ0V0WE1WY1AwZWVhd2NJQXRZNVdyCllydE9VZE1BaHRZdEZYWFVpTm1pYkFSOGxTOE11MjBqdUZ3OWJnb2FQUXZSN2FXLzhLL2hwaUdmbXN5V1lmbGoKRzNMTmJSQjBKYnJVOXE2ejZXL3JEM0ZVQkJlQ3lvVnpQOE4zU3dJREFRQUJBb0lCQVFEWHNyYWIyLzJ4RjJNZgpKd2ZaL0lDSTVubE5vdEdYTTc3SEx2T2VqaDM0MGVNQjdhNFQyRlNXdTlJbTlCTWJiWjdDRTRSM2xUbFNMZ08wCnY1NW5QUXpNa1lmVk0vRVQyRW9rQlpzc3pqamo5RXpsbkFBT1hlS292YklHR01TemFmeUI3ZngyY1JCaFdzQWMKQ25uOEZIY20zVWVHc0Vnb0FzWFgzSjZYOGxDazd1R0hHZ0hnMk9vSUd5M2dIeGJwOEJiVlJXeEFIMm5rV2Nxegp6QzQ1anpFK2tubVprVzdJOTllQXdMTjc3QXpEZlhZSU1rdjZFdnhwWVdQZ1VJa253eXd3MmdoY0dtbFhwazdMCmdUM2t5dWpEaCtqOVprQVp2N1F3YktWa2EvSFdBRDJDR0tQNFhMK2dhZW9zZUdDMTlja0VvbHl3YWYxYzRneTIKRE41Z0JDSHBBb0dCQVByalFob2NoSXUxYzNTOE5hd0NhRTc3Z0YxcURXQTM1b25JS0Z1aFQwYTV3Vi9ZTHNVcgprMkl6TnZoTHFvV0tTbmRhTmd4aWNpOTVkK3dYVk9wS0tDWVgrR2NVNWZEdWJJeDdqb0tWcUxqK2hNdGIvNUFLClMwUDAwcmpCUGZQcU1rK21XYUcxWE1ieDEvbmUzYm9XVlZDcitQblZvNzJlWjl6OHVsKzdtenN0QW9HQkFQR0wKSmU3aUU3ZmRLWXgxQ3IzbDdJbXFocG1UbUcrd29od3BadVR4NEtDeWMwZVpSUEpKR0txMytUdHp6eFNkRzk0VAozY3p5Ulo3TWJqWUtyeVZPdzRHMklpMWVaMW9pSVJrSThRMkNCV0NZYWl5WFhBd0xlSkhvQzl5amdBRDB6V21TCkxHcWZwSnBaSkU5Q3N1SDJVMjdxY0ZrQThvM2tmOENFOHJDRkNLZFhBb0dCQUpmOWkzTTBLWnhWemQ4L2tpaGwKd1Bsd1plQ3h1ZTY3anQrVHNkZHBEeFRpdmVLcG5oUDNCUyt0cFRTZzZtcENVRUNrRnpCRGg3ZDVHQXlnU2VJeQpFTWFiS1BLUjk0ZVJlWk5WMncwRFM1YmZJbVhza3hPWkdPWFBjTVZhMUlSck1oV015cW9yckV3ZUFXQ3dBcFdVCnFCVGFTbGhZYy8wUTlRMHMwbC9pMFBUMUFvR0JBTk9wSUx0OVp0UUd2TUwxU1Uxdzd0OFFERlVGemwySlJmVXgKbnBYZkV2MGVnd0JwNGM0Q21kZjMwVEgwNExEcW42SHlmTGw4VDkvQXVvOG11NllRcUNmQlI1L0VDd01qeHljZAorOFhmZXdEVGJxN1dqL1dLRThTZnQ4MUhoUUxSZ2pNUndWUkp3cjd5Z0d2b1FjTGF6Ty8wQmpFb01HU0FxQ1kzCkdrZnV1OCtQQW9HQkFPVXhGcXNrSVNxb3AyUGJZRmQ4SEU3NHhKYlZBRzFKZjh1WEllMnlzRHFrdnU5RmJ6djUKWnc1aW52dHA1VkhwWjBTTFN5dFViNktzSGNSaXFJNXMybW5NbmFMaXAyUmd0bkVzQTVmY25XeDFhRlFJclhYYgpVUXFEdklLd1JoT2ZjZkRkdTFDTFlpb2J0Y0Nlc0JISUcxc08yKy9UYmF1WG5scGFXWXo3Q1hrVgotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo= + networks: + - services-network + - auth-service-network + + # Comment Service + comment-service: + image: panels/comment-service + build: + context: ./services/comment-service + restart: on-failure + environment: + - KAFKA_BROKERS=kafka:19092 + - POSTGRES_USER=postgres + - POSTGRES_PASS=postgres + - POSTGRES_HOST=comment-service-postgres:5432 + - POSTGRES_DATABASE=postgres + - REDIS_HOST=comment-service-redis:6379 + - REDIS_PASS=redis + networks: + - services-network + - comment-service-network + +volumes: + kafka-volume: + +networks: + edge-network: + services-network: + panel-service-network: + post-service-network: + user-service-network: + auth-service-network: + comment-service-network: \ No newline at end of file