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>
This commit is contained in:
Anatolii Grynchuk
2026-05-02 15:25:09 +03:00
parent 74211f0a4a
commit ae119d1a3d
3 changed files with 88 additions and 26 deletions
@@ -26,31 +26,22 @@ services:
condition: service_healthy condition: service_healthy
rabbitmq: rabbitmq:
image: rabbitmq:4-management-alpine
environment: environment:
RABBITMQ_DEFAULT_USER: guest RABBITMQ_DEFAULT_USER: guest
RABBITMQ_DEFAULT_PASS: guest RABBITMQ_DEFAULT_PASS: guest
ports: ports:
- "5672:5672" - "5672:5672"
- "15672:15672" - "15672:15672"
healthcheck: networks:
test: ["CMD", "rabbitmq-diagnostics", "ping"] - internal
interval: 10s
timeout: 5s
retries: 5
volumes:
- notification_rabbitmq:/var/lib/rabbitmq
db: db:
image: postgres:17
environment:
POSTGRES_DB: notification_service
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
ports: ports:
- "5433:5432" - "5433:5432"
volumes: volumes:
- notification_db:/var/lib/postgresql/data - pgdata:/var/lib/postgresql/data
networks:
- internal
seq: seq:
image: datalust/seq:2024 image: datalust/seq:2024
@@ -60,9 +51,14 @@ services:
ports: ports:
- "5342:80" - "5342:80"
volumes: volumes:
- notification_seq:/data - seq_data:/data
networks:
- internal
volumes: volumes:
notification_db: pgdata:
notification_seq: name: ns-dev-pgdata
notification_rabbitmq: rabbitmq_data:
name: ns-dev-rabbitmq-data
seq_data:
name: ns-dev-seq
@@ -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
+36 -7
View File
@@ -6,7 +6,7 @@ services:
context: ../.. context: ../..
dockerfile: HrynCo.NotificationService.Migrator/Dockerfile dockerfile: HrynCo.NotificationService.Migrator/Dockerfile
environment: 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: depends_on:
db: db:
condition: service_started condition: service_started
@@ -18,7 +18,7 @@ services:
dockerfile: HrynCo.NotificationService.Web/Dockerfile dockerfile: HrynCo.NotificationService.Web/Dockerfile
environment: environment:
- ASPNETCORE_ENVIRONMENT=Production - 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: depends_on:
db: db:
condition: service_started condition: service_started
@@ -31,10 +31,11 @@ services:
dockerfile: HrynCo.NotificationService.Worker/Dockerfile dockerfile: HrynCo.NotificationService.Worker/Dockerfile
environment: environment:
- DOTNET_ENVIRONMENT=Production - 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__Host=rabbitmq
- App__RabbitMq__User=${RABBITMQ_USER:-guest} - App__RabbitMq__Port=5672
- App__RabbitMq__Password=${RABBITMQ_PASSWORD:-guest} - App__RabbitMq__User=${RABBITMQ_USER:?RABBITMQ_USER is required}
- App__RabbitMq__Password=${RABBITMQ_PASSWORD:?RABBITMQ_PASSWORD is required}
depends_on: depends_on:
db: db:
condition: service_started condition: service_started
@@ -46,10 +47,38 @@ services:
rabbitmq: rabbitmq:
image: rabbitmq:4-management-alpine image: rabbitmq:4-management-alpine
environment: environment:
RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER:-guest} RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER:?RABBITMQ_USER is required}
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD:-guest} 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: healthcheck:
test: ["CMD", "rabbitmq-diagnostics", "ping"] test: ["CMD", "rabbitmq-diagnostics", "ping"]
interval: 10s interval: 10s
timeout: 5s timeout: 5s
retries: 5 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