diff --git a/scripts/deployments/deploy_everything_locally.bash b/scripts/deployments/deploy_everything_locally.bash index a20c02e8..e1c0c1f1 100755 --- a/scripts/deployments/deploy_everything_locally.bash +++ b/scripts/deployments/deploy_everything_locally.bash @@ -258,4 +258,9 @@ if [ "$start_simcore" -eq 0 ]; then pushd "${service_dir}" call_make "." up-"$stack_target" popd + log_info "starting vendor services..." + service_dir="${repo_basedir}"/services/vendors + pushd "${service_dir}" + call_make "." up-"$stack_target" + popd fi diff --git a/services/maintenance-page/docker-compose.yml.j2 b/services/maintenance-page/docker-compose.yml.j2 index 1b7b4e58..97fb4c35 100644 --- a/services/maintenance-page/docker-compose.yml.j2 +++ b/services/maintenance-page/docker-compose.yml.j2 @@ -28,6 +28,7 @@ services: - traefik.enable=true - traefik.swarm.network=${PUBLIC_NETWORK} - traefik.http.routers.{{"maintenance_" + j2item.replace('@','').replace(' ','').replace('.','').replace('-','').replace('\'','') + "_html"}}.priority={{MAINTENANCE_PAGES_TRAEFIK_PRIORITY}} + - traefik.http.routers.{{"maintenance_" + j2item.replace('@','').replace(' ','').replace('.','').replace('-','').replace('\'','') + "_html"}}.rule=Host(`{{VENDOR_CHATBOT_SUBDOMAIN_PREFIX}}.{{j2item}}`) || (Host(`{{j2item}}`) && PathPrefix(`/`)) || (HostRegexp(`services.{{j2item}}`) && PathPrefix(`/`)) - traefik.http.routers.{{"maintenance_" + j2item.replace('@','').replace(' ','').replace('.','').replace('-','').replace('\'','') + "_html"}}.rule=Host(`{{VENDOR_MANUAL_SUBDOMAIN_PREFIX}}.{{j2item}}`) || (Host(`{{j2item}}`) && PathPrefix(`/`)) || (HostRegexp(`services.{{j2item}}`) && PathPrefix(`/`)) - traefik.http.routers.{{"maintenance_" + j2item.replace('@','').replace(' ','').replace('.','').replace('-','').replace('\'','') + "_html"}}.tls=true - traefik.http.services.{{"maintenance_" + j2item.replace('@','').replace(' ','').replace('.','').replace('-','').replace('\'','') + "_html"}}.loadbalancer.server.port=80 diff --git a/services/vendors/docker-compose.yml.j2 b/services/vendors/docker-compose.yml.j2 index 82be95d8..e860a292 100644 --- a/services/vendors/docker-compose.yml.j2 +++ b/services/vendors/docker-compose.yml.j2 @@ -5,7 +5,7 @@ services: image: ${VENDOR_MANUAL_IMAGE} init: true {%- raw %} - hostname: "{{.Node.Hostname}}-{{.Task.Slot}}" + hostname: "v-manual-{{.Node.Hostname}}-{{.Task.Slot}}" {%- endraw %} deploy: replicas: ${VENDOR_MANUAL_REPLICAS} @@ -30,11 +30,45 @@ services: - traefik.http.services.vendor_manual.loadbalancer.server.port=${VENDOR_MANUAL_PORT} - traefik.http.routers.vendor_manual.entrypoints=https - traefik.http.routers.vendor_manual.tls=true - - traefik.http.routers.vendor_manual.rule={{ generate_vendors_manual_traefik_rule(VENDOR_MANUAL_PRODUCTS, VENDOR_MANUAL_SUBDOMAIN_PREFIX) }} + - traefik.http.routers.vendor_manual.rule={{ generate_vendors_traefik_rule(VENDOR_MANUAL_PRODUCTS, VENDOR_MANUAL_SUBDOMAIN_PREFIX) }} - traefik.http.routers.vendor_manual.middlewares=ops_gzip@swarm, authenticated_platform_user@swarm networks: - public - + chat: + image: ${VENDOR_CHATBOT_IMAGE} + init: true +{%- raw %} + hostname: "v-chat-{{.Node.Hostname}}-{{.Task.Slot}}" +{%- endraw %} + deploy: + replicas: ${VENDOR_CHATBOT_REPLICAS} + placement: + constraints: + - node.labels.simcore==true + resources: + limits: + cpus: "1.0" + memory: 2.5G + reservations: + cpus: "0.1" + memory: 512M + update_config: + parallelism: 1 + order: start-first + failure_action: continue + delay: 10s + labels: + - traefik.enable=true + - traefik.swarm.network=${PUBLIC_NETWORK} + - traefik.http.services.vendor_chat.loadbalancer.server.port=${VENDOR_CHATBOT_PORT} + - traefik.http.routers.vendor_chat.entrypoints=https + - traefik.http.routers.vendor_chat.tls=true + - traefik.http.routers.vendor_chat.rule={{ generate_vendors_traefik_rule(VENDOR_CHATBOT_PRODUCTS, VENDOR_CHATBOT_SUBDOMAIN_PREFIX) }} + - traefik.http.routers.vendor_chat.middlewares=authenticated_platform_user@swarm + - prometheus-job=vendor-chat + - prometheus-port=8000 + networks: + - public networks: public: external: true diff --git a/services/vendors/j2cli_customization.py b/services/vendors/j2cli_customization.py index 802597bf..0268acba 100644 --- a/services/vendors/j2cli_customization.py +++ b/services/vendors/j2cli_customization.py @@ -1,11 +1,9 @@ -def _generate_vendors_manual_traefik_rule(domains: str, subdomain_prefix: str) -> str: +def _generate_vendors_traefik_rule(domains: str, subdomain_prefix: str) -> str: domain_list = domains.strip().strip(",").split(",") domains = [f"{subdomain_prefix}.{domain}" for domain in domain_list] return " || ".join(f"Host(`{d}`)" for d in domains) def j2_environment(env): - env.globals.update( - generate_vendors_manual_traefik_rule=_generate_vendors_manual_traefik_rule - ) + env.globals.update(generate_vendors_traefik_rule=_generate_vendors_traefik_rule) return env diff --git a/services/vendors/template.env b/services/vendors/template.env index 7086513a..8e6b5a2c 100644 --- a/services/vendors/template.env +++ b/services/vendors/template.env @@ -3,4 +3,10 @@ VENDOR_MANUAL_REPLICAS=${VENDOR_MANUAL_REPLICAS} VENDOR_MANUAL_SUBDOMAIN_PREFIX=${VENDOR_MANUAL_SUBDOMAIN_PREFIX} VENDOR_MANUAL_PRODUCTS=${VENDOR_MANUAL_PRODUCTS} VENDOR_MANUAL_PORT=${VENDOR_MANUAL_PORT} +VENDOR_CHATBOT_IMAGE=${VENDOR_CHATBOT_IMAGE} +VENDOR_CHATBOT_REPLICAS=${VENDOR_CHATBOT_REPLICAS} +VENDOR_CHATBOT_SUBDOMAIN_PREFIX=${VENDOR_CHATBOT_SUBDOMAIN_PREFIX} +VENDOR_CHATBOT_PRODUCTS=${VENDOR_CHATBOT_PRODUCTS} +VENDOR_CHATBOT_PORT=${VENDOR_CHATBOT_PORT} PUBLIC_NETWORK=${PUBLIC_NETWORK} +OTEL_EXPORTER_OTLP_ENDPOINT=${TRACING_OPENTELEMETRY_COLLECTOR_ENDPOINT}:${TRACING_OPENTELEMETRY_COLLECTOR_PORT}