Install NaBot by docker - MedBot-team/NaBot GitHub Wiki

Install NaBot by docker

  1. Install docker-compose

  2. Create .env file, with this sample

$ cat .env

TOKEN=$MY_TOKEN
MYSQL_DATASETS_ROOT_PASSWORD=$MY_DATASETS_DATABASE_PASSWORD
MYSQL_EVENTS_ROOT_PASSWORD=$MY_EVENTS_DATABASE_PASSWORD
RASA_SERVER_URL=http://rasa:5005/webhooks/rest/webhook
SQL_USER=root
DATASETS_DB_HOST=db_datasets
EVENTS_DB_HOST=db_events
MYSQL_DATASETS_DATABASE=datasets
MYSQL_EVENTS_DATABASE=rasa
DRUG_TABLE=drugs
LAB_TABLE=labs
ACTION_HOST=app
TELEGRAM_ACCESS_TOKEN=$MY_TELEGRAM_TOKEN
TELEGRAM_VERIFY=$MY_TELEGRAM_BOT_ID
TELEGRAM_WEBHOOK_URL=$MY_API_SERVER_URL/webhooks/telegram/webhook
  1. Create docker-compose file:
$ cat docker-compose.yml

services:
services:
  ui:
    image: medbot/nabot_ui:latest
    depends_on:
      rasa:
        condition: service_healthy
    container_name: ui-server
    restart: always
    networks:
      - frontend-network
    volumes:
      - ./.env:/streamlit/.env
    ports:
      - 80:8501
    healthcheck:
        test: ["CMD", "printf", ".", ">", "/dev/tcp/127.0.0.1/8501"]
        interval: 30s
        timeout: 10s
        retries: 30
  rasa:
    image: medbot/nabot_chatbot
    depends_on:
      app:
        condition: service_healthy
    container_name: chatbot-server
    restart: always
    expose: 
      - 5005
    ports:
      - 5005:5005
    healthcheck:
        test: ["CMD", "printf", ".", ">", "/dev/tcp/127.0.0.1/5005"]
        interval: 45s
        timeout: 10s
        retries: 30
    volumes:
      - logs_data:/rasa-server/rasa/logs
      - ./.env:/rasa-server/rasa/.env
    networks:
      - rasa-network
      - frontend-network
      - events-network
  app:
    image: medbot/nabot_action
    depends_on:
      db_datasets:
        condition: service_healthy
    container_name: action-server
    restart: always
    volumes:
      - logs_data:/action-server/logs
      - ./.env:/action-server/.env
    networks:
      - rasa-network
      - datasets-network
    expose: 
      - 5055
    healthcheck:
        test: ["CMD", "printf", ".", ">", "/dev/tcp/127.0.0.1/5055"]
        interval: 45s
        timeout: 10s
        retries: 30
  db_datasets:
    image: mysql:8
    container_name: datasets-server
    command: '--default-authentication-plugin=mysql_native_password'
    restart: always
    volumes:
      - ./datasets-server:/docker-entrypoint-initdb.d
      - db-data:/var/lib/mysql
    networks:
      - datasets-network
    env_file:
      - ./.env
    environment:
      - MYSQL_DATABASE=${MYSQL_DATASETS_DATABASE}
      - MYSQL_ROOT_PASSWORD=${MYSQL_DATASETS_ROOT_PASSWORD}
    expose: 
      - 3306
    cap_add:
      - SYS_NICE
    healthcheck:
        test: ["CMD", 'mysqladmin', 'ping', '-h', 'localhost', 
                '-u', 'root', '-p$MYSQL_ROOT_PASSWORD' ]
        interval: 3m30s
        timeout: 45s
        retries: 30
  db_events:
    image: mysql:8
    container_name: events-server
    command: '--default-authentication-plugin=mysql_native_password'
    restart: always
    volumes:
      - ./events-server:/docker-entrypoint-initdb.d
      - db-event:/var/lib/mysql
    networks:
      - events-network
    env_file:
      - ./.env
    environment:
      - MYSQL_DATABASE=${MYSQL_EVENTS_DATABASE}
      - MYSQL_ROOT_PASSWORD=${MYSQL_EVENTS_ROOT_PASSWORD}
    expose: 
      - 3306
    cap_add:
      - SYS_NICE
    healthcheck:
        test: ["CMD", 'mysqladmin', 'ping', '-h', 'localhost', 
                '-u', 'root', '-p$MYSQL_ROOT_PASSWORD' ]
        interval: 3m30s
        timeout: 45s
        retries: 30

networks:
  frontend-network:
    name: medbot-frontend-network
    driver: bridge
  rasa-network:
    name: medbot-rasa-network
    driver: bridge
  datasets-network:
    name: medbot-datasets-network
    driver: bridge
  events-network:
    name: medbot-events-network
    driver: bridge

volumes:
  db-data:
    name: data_db
  db-event:
    name: event_db
  logs_data:
    name: logs_db
  1. Enjoy your chatbot :wink:
docker-compose -f docker-compose.yml up -d
  1. Test your chatbot