timoth-y/kicksware-api

View on GitHub
docker-compose.dev.yml

Summary

Maintainability
Test Coverage
version: '3.7'
services:
  products-service:
    build:
      context: services/products
      dockerfile: ./docker/Dockerfile
      target: dev
    image: ${CI_REGISTRY_PREFIX}/api/products-service
    container_name: products
    env_file: services/products/env/.env.prod
    restart: always
    labels:
      - traefik.http.routers.product-service.rule=Host(`api.kicksware.com`) && PathPrefix(`/products`)
      - traefik.http.routers.product-service.tls=true
      - traefik.http.routers.product-service.tls.certresolver=le
      - traefik.http.routers.product-service-grpc.rule=Host(`localhost`) && PathPrefix(`/proto.ProductService`)
      - traefik.http.routers.product-service-grpc.entrypoints=grpc
      - traefik.http.services.product-service-grpc.loadbalancer.server.scheme=h2c
      - traefik.docker.network=web
    networks:
      - web
      - data
    volumes:
      - ./product-service/env:/dist/env
      - key-volume:/key

  users-service:
    build:
      context: services/users
      dockerfile: ./docker/Dockerfile
      target: dev
    image: ${CI_REGISTRY_PREFIX}/api/users-service
    container_name: users
    env_file: services/users/env/.env.prod
    restart: always
    labels:
      - traefik.http.routers.user-service.rule=Host(`localhost`) && PathPrefix(`/users`) || PathPrefix(`/auth`) ||
        PathPrefix(`/mail`) || PathPrefix(`/interact`)
      - traefik.http.routers.user-service.tls=true
      - traefik.http.routers.user-service.tls.certresolver=le
      - traefik.http.routers.user-service-grpc.rule=Host(`localhost`) && PathPrefix(`/proto.UserService`)
      - traefik.http.routers.user-service-grpc.entrypoints=grpc
      - traefik.http.services.user-service-grpc.loadbalancer.server.scheme=h2c
      - traefik.docker.network=web
    networks:
      - web
      - data
    volumes:
      - ./user-service/env:/dist/env
      - ./user-service/template:/dist/template
      - key-volume:/dist/key
      - key-volume:/key

  references-service:
    build:
      context: services/references
      dockerfile: ./docker/Dockerfile
      target: dev
    image: ${CI_REGISTRY_PREFIX}/api/references-service
    container_name: references
    env_file: services/references/env/.env.prod
    restart: always
    labels:
      - traefik.http.routers.reference-service-rest.rule=Host(`localhost`) && PathPrefix(`/references`)
      - traefik.http.routers.reference-service-rest.entrypoints=web
      - traefik.http.routers.reference-service-rest.tls=true
      - traefik.http.routers.reference-service-rest.tls.certresolver=le
      - traefik.http.routers.reference-service-grpc.rule=Host(`localhost`) && PathPrefix(`/proto.ReferenceService`)
      - traefik.http.routers.reference-service-grpc.entrypoints=grpc
      - traefik.http.services.reference-service-grpc.loadbalancer.server.scheme=h2c
      - traefik.docker.network=web
    volumes:
      - ./reference-service/env:/dist/env
      - key-volume:/key
    networks:
      - web
      - data

  search-service:
    build:
      context: services/search
      dockerfile: ./docker/Dockerfile
      target: dev
    image: ${CI_REGISTRY_PREFIX}/api/search-service
    container_name: search
    env_file: services/search/env/.env.prod
    restart: always
    labels:
      - traefik.http.routers.search-service.rule=Host(`api.kicksware.com`) && PathPrefix(`/search`)
      - traefik.http.routers.search-service.tls=true
      - traefik.http.routers.search-service.tls.certresolver=le
      - traefik.http.routers.search-service-grpc.rule=Host(`localhost`) && PathPrefix(`/proto.SearchService`)
      - traefik.http.routers.search-service-grpc.entrypoints=grpc
      - traefik.http.services.search-service-grpc.loadbalancer.server.scheme=h2c
      - traefik.docker.network=web
    networks:
      - web
      - elastic
      - data
    volumes:
      - ./search-service/env:/dist/env
      - key-volume:/key
    depends_on:
      - references-service
      - products-service

networks:
  elastic:
    driver: bridge
  data:
    driver: bridge
  web:
    external: true

volumes:
  key-volume:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: /host_mnt/c/source/keys