Déploiement Minimal sur docker Swarm

Ci-dessous les choix effectués pour cet exemple, en rapport avec les différents fichiers

  • docker-compose.yml

    • le déploiement se fait sur une seule machine (aucune contraint de déploiement docker)

    • l’utilisation d’un réseau dc_network, non externe, qui sera donc créé en même temps que la stack datachain au lancement du script de démarrage.

    • l’utilisation de volume nommés docker : les volumes seront automatiquement provisionnés par docker lors du premier démarrage de la stack

    • Les paramètres mémoires de la JVM sont de 3Go pour le backend et 8Go pour spark

  • backend.env

    • L’URL redis pointe vers une URL interne du reseau docker (dc-redis)

  • keycloak.env

    • Seules les URL sont précisées

  • spark.env

    • Les ressources allouées au spark (qui s’exécute en mode local) sont de 6 cpu et 8g de mémoire (reflété par les paramètres JAVA du service dans le ficher docker-compose)

    • le montage HDFS se fait vers un montage local (file:///data), dont le volume est précisé dans le fichier docker-compose

  • web-ui.env

    • config keycloak standard avec l’URL public de keycloak à renseigner.

fichier docker-compose.yml
version: "3.7"
services:
  dc_pg:
    image: ${HARBOR_REGISTRY}/${HARBOR_PROJECT}/pg:${PRODUCT_VERSION}
    networks:
      dc_network:
        aliases:
          - dc-pg
    deploy:
      mode: replicated
      replicas: 1
    volumes:
      - pg_data:/var/lib/postgresql/data

  dc_pg_migration:
    image: ${HARBOR_REGISTRY}/${HARBOR_PROJECT}/pg_migration:${PRODUCT_VERSION}
    networks:
      dc_network:
        aliases:
          - dc-pg-migration
    environment:
      - PG_HOST=dc-pg
    deploy:
      restart_policy:
        condition: none
    volumes:
      - pg_dump:/data/pg_dump

  dc_pg_expose:
    image: ${HARBOR_REGISTRY}/${HARBOR_PROJECT}/pg_expose:${PRODUCT_VERSION}
    networks:
      dc_network:
        aliases:
          - dc-pg-expose
    deploy:
      mode: replicated
      replicas: 1
    volumes:
      - pg_expose:/var/lib/postgresql/data

  dc_redis_cache:
    image: redis:7.0-alpine
    command: redis-server --loglevel warning
    networks:
      dc_network:
        aliases:
          - dc-redis
    deploy:
      mode: replicated
      replicas: 1

  dc_backend:
    image: ${HARBOR_REGISTRY}/${HARBOR_PROJECT}/backend:${PRODUCT_VERSION}
    networks:
      dc_network:
        aliases:
          - dc-backend
    environment:
      - JAVA_OPTIONS=-Xms1024M -Xmx3g -Duser.home=/opt/dev/work
    env_file: backend.env
    deploy:
      mode: replicated
      replicas: 1

  dc_web_ui:
    image: ${HARBOR_REGISTRY}/${HARBOR_PROJECT}/web_ui:${PRODUCT_VERSION}
    networks:
      dc_network:
        aliases:
          - dc-web-ui
    env_file: web_ui.env
    ports:
      - target: 80
        published: 80
        protocol: tcp
        mode: host
    deploy:
      mode: replicated
      replicas: 1

  dc_spark:
    image: ${HARBOR_REGISTRY}/${HARBOR_PROJECT}/spark:${PRODUCT_VERSION}
    networks:
      dc_network:
        aliases:
          - dc-spark1
    environment:
      - JAVA_OPTIONS=-Xms1024M -Xmx8g -Duser.home=/opt/dev/work
    env_file: spark.env
    deploy:
      mode: replicated
      replicas: 1
    volumes:
      - hdfs:/data

  dc_pg_keycloak:
    image: ${HARBOR_REGISTRY}/${HARBOR_PROJECT}/pg_keycloak:${PRODUCT_VERSION}
    networks:
      dc_network:
        aliases:
          - dc-pg-keycloak
    deploy:
      mode: replicated
      replicas: 1
    volumes:
      - pg_keycloak:/var/lib/postgresql/data

  dc_keycloak:
    image: ${HARBOR_REGISTRY}/${HARBOR_PROJECT}/keycloak:${PRODUCT_VERSION}
    networks:
      dc_network:
        aliases:
          - dc-keycloak
    ports:
      - target: 8080
        published: 8080
        protocol: tcp
        mode: host
    deploy:
      mode: replicated
      replicas: 1
    env_file: keycloak.env

volumes:
  pg_data:
  pg_dump:
  hdfs:
  pg_expose:
  pg_keycloak:

networks:
  dc_network:
   driver: overlay
   driver_opts:
    encrypted: ""
fichier backend.env
# URL public avec http ou https
# public URL with http or https
dc.app.url.web-ui=${DC_URL_PUBLIC}

# Configuration Keycloak
# Keycloak Configuration
keycloak.auth-server-url=http://dc-keycloak:8080/auth

# Configuration base de donnée (nom du serveur de base de donnée)
# Database configuration (database host)
dc.app.db.host=dc-pg

# 
# Configuration du datasource d'exposition de donnée (nom du serveur de base de donnée)
# Expose Database configuration (database host)
spring.expose-datasource.host=dc-pg-expose

# Configuration Redis
# Redis configuration
dc.app.notification.urls=redis://dc-redis:6379
fichier keycloak.env
# Datachain Url
# Url de Datachain
DATACHAIN_CLIENT_URL=${DC_URL_PUBLIC}

# keycloak public Url
# Url public de keycloak
KEYCLOAK_FRONTEND_URL=${KC_URL_PUBLIC}/auth
fichier spark.env
# Configuration du contexte Spark (url accessible depuis le backend)
# Spark context Url
dc.app.context.url=http://dc-spark1:8090

# Configuration spark
# Déploiement Spark local sur 6 CPU cores
dc.app.spark.master=local[6]
# 6 CPU
dc.app.spark.cores.max=6
# 8 
dc.app.spark.executor.memory=8g

# Configuration HDFS
dc.app.data-file.hdfs=file:///data

# Configuration notifications
dc.app.notification.urls=redis://dc-redis:6379
fichier web_ui.env
KEYCLOAK_CONFIG={"url": "${KC_URL_PUBLIC}/auth","realm": "dc-realm","clientId": "dc_front", "backendClientId": "dc_backend", "userRole" : "dc_user", "projectRole" : "dc_project", "adminRole" : "dc_admin", "memberRole" : "dc_member"}