INFORMATION
I am trying very on deploying a docker swarm stack using traefik to start using rasa & rasa x. Unfortunately, this process is very complicated and I feel I am missing some points.
I am trying to replicate the following guide: Providing an HA AI Assistant with Traefik + Rasa + Docker - YouTube
Input
VERSIONS
RASA_X_VERSION=0.32.0
RASA_VERSION=1.10.10
RASA_X_DEMO_VERSION=0.31.5
The current docker.template.yml template file is the following:
version: "3.4"
networks:
web:
external: true
x-database-credentials: &database-credentials
DB_HOST: "db"
DB_PORT: "5432"
DB_USER: ${DB_USER:-admin}
DB_PASSWORD: ${DB_PASSWORD}
DB_LOGIN_DB: ${DB_LOGIN_DB:-rasa}
x-rabbitmq-credentials: &rabbitmq-credentials
RABBITMQ_HOST: "rabbit"
RABBITMQ_USERNAME: "user"
RABBITMQ_PASSWORD: ${RABBITMQ_PASSWORD}
x-redis-credentials: &redis-credentials
REDIS_HOST: ${REDIS_HOST}
REDIS_PORT: "6379"
REDIS_PASSWORD: ${REDIS_PASSWORD}
REDIS_DB: "1"
ALLOW_EMPTY_PASSWORD: "yes"
x-duckling-credentials: &duckling-credentials
RASA_DUCKLING_HTTP_URL: "http://duckling:8000"
x-rasax-credentials: &rasax-credentials
LOCAL_MODE: "false"
RASA_X_HOST: "http://rasa-x:5002"
RASA_X_TOKEN: ${RASA_X_TOKEN}
JWT_SECRET: ${JWT_SECRET}
RASA_USER_APP: "http://app:5055"
RASA_PRODUCTION_HOST: "http://rasa-production:5005"
RASA_WORKER_HOST: "http://rasa-worker:5005"
RASA_TOKEN: ${RASA_TOKEN}
RASA_WORKER_TOKEN: ${RASA_TOKEN}
RASA_X_PASSWORD: ${RASA_X_PASSWORD}
x-rasa-credentials: &rasa-credentials
<<: *rabbitmq-credentials
<<: *rasax-credentials
<<: *database-credentials
<<: *redis-credentials
<<: *duckling-credentials
RASA_TOKEN: ${RASA_TOKEN}
RASA_MODEL_PULL_INTERVAL: 10
RABBITMQ_QUEUE: "rasa_production_events"
x-rasa-services: &default-rasa-service
deploy:
restart_policy:
condition: on-failure
image: "rasa/rasa:${RASA_VERSION}-full"
command: >
x
--no-prompt
--debug
--production
--config-endpoint http://rasa-x:5002/api/config?token=${RASA_X_TOKEN}
--port 5005
--jwt-method HS256
--jwt-secret ${JWT_SECRET}
--auth-token ${RASA_TOKEN}
--cors "*"
services:
redis:
image: "bitnami/redis:5.0.5"
networks:
- default
environment:
REDIS_HOST: ${REDIS_HOST}
REDIS_PORT: "6379"
REDIS_PASSWORD: ${REDIS_PASSWORD}
REDIS_DB: "1"
ALLOW_EMPTY_PASSWORD: "yes"
volumes:
- ./settings/redis:/data
deploy:
mode: global
restart_policy:
condition: on-failure
rasa-x:
networks:
- default
deploy:
restart_policy:
condition: on-failure
image: "rasa/rasa-x:${RASA_X_VERSION}"
volumes:
- ./settings/models:/app/models
- ./settings/environments.yml:/app/environments.yml
- ./settings/credentials.yml:/app/credentials.yml
- ./settings/endpoints.yml:/app/endpoints.yml
- ./settings/logs:/logs
- ./settings/auth:/app/auth
environment:
<<: *database-credentials
<<: *rasa-credentials
SELF_PORT: "5002"
DB_DATABASE: "${DB_DATABASE:-rasa}"
RASA_MODEL_DIR: "/app/models"
RABBITMQ_QUEUE: "rasa_production_events"
PASSWORD_SALT: ${PASSWORD_SALT}
RASA_X_USER_ANALYTICS: "0"
SANIC_RESPONSE_TIMEOUT: "3600"
METRICS_CONSENT: ${METRICS_CONSENT}
UUID: ${UUID:-''}
rasa-production:
networks:
- default
<<: *default-rasa-service
environment:
<<: *rasa-credentials
DB_DATABASE: "tracker"
RABBITMQ_QUEUE: "rasa_production_events"
RASA_MODEL_SERVER: "http://rasa-x:5002/api/projects/default/models/tags/production"
REDIS_HOST: ${REDIS_HOST}
rasa-worker:
networks:
- default
<<: *default-rasa-service
environment:
<<: *rasa-credentials
DB_DATABASE: "worker_tracker"
RABBITMQ_QUEUE: "rasa_worker_events"
RASA_MODEL_SERVER: "http://rasa-x:5002/api/projects/default/models/tags/production"
REDIS_HOST: ${REDIS_HOST}
app:
networks:
- default
deploy:
restart_policy:
condition: on-failure
image: "rasa/rasa-x-demo:${RASA_X_DEMO_VERSION}"
db:
networks:
- default
deploy:
restart_policy:
condition: on-failure
image: "bitnami/postgresql:11.2.0"
environment:
POSTGRESQL_USERNAME: "${DB_USER:-admin}"
POSTGRESQL_PASSWORD: "${DB_PASSWORD}"
POSTGRESQL_DATABASE: "${DB_DATABASE:-rasa}"
volumes:
- ./settings/db:/bitnami/postgresql
rabbit:
networks:
- default
deploy:
restart_policy:
condition: on-failure
image: "bitnami/rabbitmq:3.7.17"
environment:
RABBITMQ_HOST: "rabbit"
RABBITMQ_USERNAME: "user"
RABBITMQ_PASSWORD: ${RABBITMQ_PASSWORD}
RABBITMQ_DISK_FREE_LIMIT: "{mem_relative, 0.1}"
duckling:
networks:
- default
deploy:
restart_policy:
condition: on-failure
image: "rasa/duckling:latest"
command: ["duckling-example-exe", "--no-access-log", "--no-error-log"]
nginx:
image: "rasa/nginx:${RASA_X_VERSION}"
networks:
- web
- default
volumes:
- ./settings/certs:/opt/bitnami/certs
- ./settings/terms:/opt/bitnami/nginx/conf/bitnami/terms
deploy:
replicas: 1
update_config:
parallelism: 1
failure_action: rollback
delay: 1m
order: start-first
restart_policy:
condition: on-failure
labels:
- traefik.enable=true
- traefik.port=8080
- traefik.entrypoints=https
- traefik.docker.network=web
- traefik.frontend.passHostHeader=true
- traefik.frontend.rule=Host:${RASA_DOMAIN}
- traefik.backend.loadbalancer.swarm=true
- traefik.backend.loadbalancer.stickiness=false
The entire project is open-sourced at https://github.com/whiteyhat/Rasa-Docker-Swarm-Stack.
Output
I am getting the following errors, but everything seems normal.
rasa-production service
2020-08-23 16:26:41 DEBUG rasa.cli.x - Failed to get a proper response from remote server. Status Code: 401. Response: '{"reasons":["Authorization header not present."],"exception":"Unauthorized"}'
@stephens any help on this? I saw your reply on a similar thread recommending me Kubernetes on-line script, what I would love to keep my cloud stack in docker swarm for stack convention