From ae119d1a3dd573628f70ff2a096f08fa57eb6b99 Mon Sep 17 00:00:00 2001 From: Anatolii Grynchuk Date: Sat, 2 May 2026 15:25:09 +0300 Subject: [PATCH] feat: add production docker-compose with hrynco-services network - Base compose: explicit internal network, named volumes with VOLUME_PREFIX - docker-compose.prod.yml: production images, ports, restart policies, hrynco-services external network on rabbitmq - docker-compose.Development.yml: cleaned up orphan volumes, named dev volumes Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../docker-compose.Development.yml | 32 ++++++------- docker/environments/docker-compose.prod.yml | 37 +++++++++++++++ docker/environments/docker-compose.yml | 45 +++++++++++++++---- 3 files changed, 88 insertions(+), 26 deletions(-) create mode 100644 docker/environments/docker-compose.prod.yml diff --git a/docker/environments/docker-compose.Development.yml b/docker/environments/docker-compose.Development.yml index d4bac3e..0327a4d 100644 --- a/docker/environments/docker-compose.Development.yml +++ b/docker/environments/docker-compose.Development.yml @@ -26,31 +26,22 @@ services: condition: service_healthy rabbitmq: - image: rabbitmq:4-management-alpine environment: RABBITMQ_DEFAULT_USER: guest RABBITMQ_DEFAULT_PASS: guest ports: - "5672:5672" - "15672:15672" - healthcheck: - test: ["CMD", "rabbitmq-diagnostics", "ping"] - interval: 10s - timeout: 5s - retries: 5 - volumes: - - notification_rabbitmq:/var/lib/rabbitmq + networks: + - internal db: - image: postgres:17 - environment: - POSTGRES_DB: notification_service - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres ports: - "5433:5432" volumes: - - notification_db:/var/lib/postgresql/data + - pgdata:/var/lib/postgresql/data + networks: + - internal seq: image: datalust/seq:2024 @@ -60,9 +51,14 @@ services: ports: - "5342:80" volumes: - - notification_seq:/data + - seq_data:/data + networks: + - internal volumes: - notification_db: - notification_seq: - notification_rabbitmq: \ No newline at end of file + pgdata: + name: ns-dev-pgdata + rabbitmq_data: + name: ns-dev-rabbitmq-data + seq_data: + name: ns-dev-seq \ No newline at end of file diff --git a/docker/environments/docker-compose.prod.yml b/docker/environments/docker-compose.prod.yml new file mode 100644 index 0000000..d73a33d --- /dev/null +++ b/docker/environments/docker-compose.prod.yml @@ -0,0 +1,37 @@ +services: + migrator: + build: {} + image: registry.grynco.com.ua/hrynco.notification-service.migrator:${MIGRATOR_IMAGE_TAG:?MIGRATOR_IMAGE_TAG is required} + + api: + build: {} + image: registry.grynco.com.ua/hrynco.notification-service.web:${WEB_IMAGE_TAG:?WEB_IMAGE_TAG is required} + ports: + - "${API_PORT:?API_PORT is required}:8080" + environment: + - Serilog__WriteTo__1__Args__serverUrl=${SEQ_URL:-} + restart: always + + worker: + build: {} + image: registry.grynco.com.ua/hrynco.notification-service.worker:${WORKER_IMAGE_TAG:?WORKER_IMAGE_TAG is required} + environment: + - Serilog__WriteTo__1__Args__serverUrl=${SEQ_URL:-} + restart: always + + rabbitmq: + restart: always + networks: + - internal + - hrynco-services + + db: + ports: + - "${DB_PORT:?DB_PORT is required}:5432" + restart: always + +networks: + internal: {} + hrynco-services: + external: true + name: hrynco-services diff --git a/docker/environments/docker-compose.yml b/docker/environments/docker-compose.yml index bb39613..143b22f 100644 --- a/docker/environments/docker-compose.yml +++ b/docker/environments/docker-compose.yml @@ -6,7 +6,7 @@ services: context: ../.. dockerfile: HrynCo.NotificationService.Migrator/Dockerfile environment: - - App__ConnectionString=${CONNECTION_STRING} + - App__ConnectionString=Host=db;Port=5432;Database=${DB_NAME:?DB_NAME is required};Username=${DB_USER:?DB_USER is required};Password=${DB_PASS:?DB_PASS is required} depends_on: db: condition: service_started @@ -18,7 +18,7 @@ services: dockerfile: HrynCo.NotificationService.Web/Dockerfile environment: - ASPNETCORE_ENVIRONMENT=Production - - App__ConnectionString=${CONNECTION_STRING} + - App__ConnectionString=Host=db;Port=5432;Database=${DB_NAME:?DB_NAME is required};Username=${DB_USER:?DB_USER is required};Password=${DB_PASS:?DB_PASS is required} depends_on: db: condition: service_started @@ -31,10 +31,11 @@ services: dockerfile: HrynCo.NotificationService.Worker/Dockerfile environment: - DOTNET_ENVIRONMENT=Production - - App__ConnectionString=${CONNECTION_STRING} + - App__ConnectionString=Host=db;Port=5432;Database=${DB_NAME:?DB_NAME is required};Username=${DB_USER:?DB_USER is required};Password=${DB_PASS:?DB_PASS is required} - App__RabbitMq__Host=rabbitmq - - App__RabbitMq__User=${RABBITMQ_USER:-guest} - - App__RabbitMq__Password=${RABBITMQ_PASSWORD:-guest} + - App__RabbitMq__Port=5672 + - App__RabbitMq__User=${RABBITMQ_USER:?RABBITMQ_USER is required} + - App__RabbitMq__Password=${RABBITMQ_PASSWORD:?RABBITMQ_PASSWORD is required} depends_on: db: condition: service_started @@ -46,10 +47,38 @@ services: rabbitmq: image: rabbitmq:4-management-alpine environment: - RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER:-guest} - RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD:-guest} + RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER:?RABBITMQ_USER is required} + RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD:?RABBITMQ_PASSWORD is required} + ports: + - "${RABBITMQ_AMQP_PORT:?RABBITMQ_AMQP_PORT is required}:5672" + - "${RABBITMQ_MANAGEMENT_PORT:?RABBITMQ_MANAGEMENT_PORT is required}:15672" + volumes: + - rabbitmq_data:/var/lib/rabbitmq + networks: + - internal healthcheck: test: ["CMD", "rabbitmq-diagnostics", "ping"] interval: 10s timeout: 5s - retries: 5 \ No newline at end of file + retries: 5 + + db: + image: postgres:17 + environment: + - POSTGRES_DB=${DB_NAME:?DB_NAME is required} + - POSTGRES_USER=${DB_USER:?DB_USER is required} + - POSTGRES_PASSWORD=${DB_PASS:?DB_PASS is required} + volumes: + - pgdata:/var/lib/postgresql/data + networks: + - internal + +volumes: + pgdata: + name: ${VOLUME_PREFIX:?VOLUME_PREFIX is required}-pgdata + rabbitmq_data: + name: ${VOLUME_PREFIX:?VOLUME_PREFIX is required}-rabbitmq-data + +networks: + internal: + driver: bridge \ No newline at end of file