docker-compose.yml
version: '3.7'
services:
products-service:
build:
context: services/products
dockerfile: ./docker/Dockerfile
target: prod
image: ${CI_REGISTRY_PREFIX}/api/products-service
container_name: products
env_file: services/products/env/.env.prod
restart: always
labels:
- traefik.http.routers.product-router-rest.rule=Host(`api.kicksware.com`) && PathPrefix(`/products`)
- traefik.http.routers.product-router-rest.service=product-service-rest
- traefik.http.routers.product-router-rest.tls=true
- traefik.http.routers.product-router-rest.tls.certresolver=le
- traefik.http.services.product-service-rest.loadbalancer.server.scheme=http
- traefik.http.routers.product-router-grpc.rule=Host(`api.kicksware.com`) && PathPrefix(`/proto.ProductService`)
- traefik.http.routers.product-router-grpc.service=product-service-grpc
- traefik.http.services.product-service-grpc.loadbalancer.server.scheme=h2c
- traefik.docker.network=web
networks:
- web
- data
volumes:
- /${SOURCE_DIR}/product-service/env:/env
- key-volume:/keys
users-service:
build:
context: services/users
dockerfile: ./docker/Dockerfile
target: prod
image: ${CI_REGISTRY_PREFIX}/api/users-service
container_name: users
env_file: services/users/env/.env.prod
restart: always
labels:
- traefik.http.routers.user-router-rest.rule=Host(`api.kicksware.com`) && PathPrefix(`/users`) || PathPrefix(`/auth`) ||
PathPrefix(`/mail`) || PathPrefix(`/interact`)
- traefik.http.routers.user-router-rest.service=user-service-rest
- traefik.http.routers.user-router-rest.tls=true
- traefik.http.routers.user-router-rest.tls.certresolver=le
- traefik.http.services.user-service-rest.loadbalancer.server.scheme=http
- traefik.docker.network=web
networks:
web:
aliases:
- user.backend
data: {}
volumes:
- /${SOURCE_DIR}/user-service/env:/env
- /${SOURCE_DIR}/user-service/template:/template
- key-volume:/keys
references-service:
build:
context: services/references
dockerfile: ./docker/Dockerfile
target: prod
image: ${CI_REGISTRY_PREFIX}/api/references-service
container_name: references
env_file: services/references/env/.env.prod
restart: always
labels:
- traefik.http.routers.reference-router-rest.rule=Host(`api.kicksware.com`) && PathPrefix(`/references`)
- traefik.http.routers.reference-router-rest.service=reference-service-rest
- traefik.http.routers.reference-router-rest.tls=true
- traefik.http.routers.reference-router-rest.tls.certresolver=le
- traefik.http.services.reference-service-rest.loadbalancer.server.scheme=http
- traefik.http.routers.reference-router-grpc.rule=Host(`api.kicksware.com`) && PathPrefix(`/proto.ReferenceService`)
- traefik.http.routers.reference-router-grpc.service=reference-service-grpc
- traefik.http.services.reference-service-grpc.loadbalancer.server.scheme=h2c
- traefik.docker.network=web
volumes:
- /${SOURCE_DIR}/reference-service/env:/env
- key-volume:/keys
networks:
- web
- data
search-service:
build:
context: services/search
dockerfile: ./docker/Dockerfile
target: prod
image: ${CI_REGISTRY_PREFIX}/api/search-service
container_name: search
env_file: services/search/env/.env.prod
restart: always
labels:
- traefik.http.routers.search-router-rest.rule=Host(`api.kicksware.com`) && PathPrefix(`/search`)
- traefik.http.routers.search-router-rest.service=search-service-rest
- traefik.http.routers.search-router-rest.tls=true
- traefik.http.routers.search-router-rest.tls.certresolver=le
- traefik.http.services.search-service-rest.loadbalancer.server.scheme=http
- traefik.http.routers.search-router-grpc.rule=Host(`api.kicksware.com`) &&
PathPrefix(`/proto.SearchReferencesService`) || PathPrefix(`/proto.SearchProductService`)
- traefik.http.routers.search-router-grpc.service=search-service-grpc
- traefik.http.services.search-service-grpc.loadbalancer.server.scheme=h2c
- traefik.docker.network=web
networks:
- web
- elastic
- data
volumes:
- /${SOURCE_DIR}/search-service/env:/env
- key-volume:/keys
depends_on:
- references-service
- products-service
orders-service:
build:
context: services/orders
dockerfile: ./docker/Dockerfile
target: prod
image: ${CI_REGISTRY_PREFIX}/api/orders-service
container_name: orders
env_file: services/orders/env/.env.prod
restart: always
labels:
- traefik.http.routers.order-router-rest.rule=Host(`api.kicksware.com`) && PathPrefix(`/orders`)
- traefik.http.routers.order-router-rest.service=order-service-rest
- traefik.http.routers.order-router-rest.tls=true
- traefik.http.routers.order-router-rest.tls.certresolver=le
- traefik.http.services.order-service-rest.loadbalancer.server.scheme=http
- traefik.http.routers.order-router-grpc.rule=Host(`api.kicksware.com`) && PathPrefix(`/proto.OrderService`)
- traefik.http.routers.order-router-grpc.service=order-service-grpc
- traefik.http.services.order-service-grpc.loadbalancer.server.scheme=h2c
- traefik.docker.network=web
volumes:
- /${SOURCE_DIR}/order-service/env:/env
- key-volume:/keys
networks:
- web
- data
cdn-service:
build:
context: services/cdn
dockerfile: ./docker/Dockerfile
target: prod
image: ${CI_REGISTRY_PREFIX}/api/cdn-service
container_name: cdn
env_file: services/cdn/env/.env.prod
restart: always
labels:
- traefik.http.routers.cdn-router-rest.rule=Host(`cdn.kicksware.com`)
- traefik.http.routers.cdn-router-rest.service=cdn-service-rest
- traefik.http.routers.cdn-router-rest.tls=true
- traefik.http.routers.cdn-router-rest.tls.certresolver=le
- traefik.http.services.cdn-service-rest.loadbalancer.server.scheme=http
- traefik.http.routers.cdn-router-grpc.rule=Host(`cdn.kicksware.com`)
- traefik.http.routers.cdn-router-grpc.service=cdn-service-grpc
- traefik.http.services.cdn-service-grpc.loadbalancer.server.scheme=h2c
- traefik.docker.network=web
volumes:
- /${SOURCE_DIR}/cdn-service/env:/env
- key-volume:/keys
- type: bind
source: /source/storage
target: /storage
networks:
- web
- data
networks:
elastic:
driver: bridge
data:
driver: bridge
web:
external: true
volumes:
key-volume:
driver: local
driver_opts:
o: bind
type: none
device: /source/keys