Articles in this section
Category / Section

Deploy Bold BI Using Traefik Reverse Proxy Without Nginx Dependencies

Published:

This section explains how to deploy the Bold BI application with Traefik reverse proxy without Nginx dependencies using a multi-container Docker Compose file.

  1. Create a Traefik configuration file with the name traefik.yml for the Bold BI application.

    global:
    checkNewVersion: true
    
    # log default is ERROR
    log:
    level: WARN
    
    # enable dashboard on 8080 
    api:
    insecure: true
    dashboard: true
    
    ping: {}
    
    #Auto-proxyy containers if they have proper labels
    #And also use this file for dynamic config (tls)
    providers:
    docker:
        exposedByDefault: false
        watch: true
    file:
        fileName: /etc/traefik/traefik.yaml
        watch: true
    
    #Listen on 80/443, and redirect all 80 to 443 via 301
    entryPoints:
    web:
        address: :80
        #Comment out these lines if you don't want to redirect everything
        http:
        redirections:
            entryPoint:
            to: websecure
            scheme: https
            permanent: true
    websecure:
        address: :443
    
    tls:
    certificates:
        - certFile: /certs/<ssl_cert_file_name>
          keyFile: /certs/<ssl_key_file_name>
    

    <ssl_cert_file_name> - Name of the SSL certificate
    Example: domain.crt
    <ssl_key_file_name> - Name of the SSL Private key:
    Example: domain.key

  2. Create a docker-compose.yaml file that starts your Bold BI application with Traefik reverse proxy.

    version: '3.3'
    
    services:
     id-web:
       image: gcr.io/boldbi-294612/bold-identity:6.3.3
       restart: on-failure
       environment:
         - APP_BASE_URL=https://example.com     
         - INSTALL_OPTIONAL_LIBS=mongodb,mysql,influxdb,snowflake,oracle,npgsql
       volumes:
         - boldservices_data:/application/app_data
       networks:
         - boldservices
       healthcheck:
           test: ["CMD", "curl", "-f", "http://localhost/health-check"]
           interval: 10s
           timeout: 10s
           retries: 5
       labels:
         traefik.enable: 'true'
         traefik.http.routers.id-web.rule: Host(`example.com`) && PathPrefix(`/`)
         traefik.http.routers.id-web.entrypoints: websecure
         traefik.http.routers.id-web.tls: 'true'
    
     id-api:
       image: gcr.io/boldbi-294612/bold-identity-api:6.3.3
       restart: on-failure
       volumes:
         - boldservices_data:/application/app_data
       networks:
         - boldservices
       healthcheck:
           test: ["CMD", "curl", "-f", "http://localhost/health-check"]
           interval: 10s
           timeout: 10s
           retries: 5
       labels:
         traefik.enable: 'true'
         traefik.http.routers.id-api.rule: Host(`example.com`) && PathPrefix(`/api`)
         traefik.http.routers.id-api.entrypoints: websecure
         traefik.http.routers.id-api.tls: 'true'
    
     id-ums:
       image: gcr.io/boldbi-294612/bold-ums:6.3.3
       restart: on-failure
       volumes:
         - boldservices_data:/application/app_data
       networks:
         - boldservices
       healthcheck:
           test: ["CMD", "curl", "-f", "http://localhost/health-check"]
           interval: 10s
           timeout: 10s
           retries: 5
       labels:
         traefik.enable: 'true'
         traefik.http.routers.id-ums.rule: Host(`example.com`) && PathPrefix(`/ums`)
         traefik.http.routers.id-ums.entrypoints: websecure
         traefik.http.routers.id-ums.tls: 'true'
    
     bi-web:
       image: gcr.io/boldbi-294612/boldbi-server:6.3.3
       restart: on-failure
       volumes:
         - boldservices_data:/application/app_data
       networks:
         - boldservices
       healthcheck:
           test: ["CMD", "curl", "-f", "http://localhost/health-check"]
           interval: 10s
           timeout: 10s
           retries: 5
       labels:
         traefik.enable: 'true'
         traefik.http.routers.bi-web.rule: Host(`example.com`) && PathPrefix(`/bi`)
         traefik.http.routers.bi-web.entrypoints: websecure
         traefik.http.routers.bi-web.tls: 'true'
    
     bi-api:
       image: gcr.io/boldbi-294612/boldbi-server-api:6.3.3
       restart: on-failure
       volumes:
         - boldservices_data:/application/app_data
       networks:
         - boldservices
       healthcheck:
           test: ["CMD", "curl", "-f", "http://localhost/health-check"]
           interval: 10s
           timeout: 10s
           retries: 5
       labels:
         traefik.enable: 'true'
         traefik.http.routers.bi-api.rule: Host(`example.com`) && PathPrefix(`/bi/api`)
         traefik.http.routers.bi-api.entrypoints: websecure
         traefik.http.routers.bi-api.tls: 'true'
    
     bi-jobs:
       image: gcr.io/boldbi-294612/boldbi-server-jobs:6.3.3
       restart: on-failure
       volumes:
         - boldservices_data:/application/app_data
       networks:
         - boldservices
       healthcheck:
           test: ["CMD", "curl", "-f", "http://localhost/health-check"]
           interval: 10s
           timeout: 10s
           retries: 5
       labels:
         traefik.enable: 'true'
         traefik.http.routers.bi-jobs.rule: Host(`example.com`) && PathPrefix(`/bi/jobs`)
         traefik.http.routers.bi-jobs.entrypoints: websecure
         traefik.http.routers.bi-jobs.tls: 'true'		
    
     bi-dataservice:
       image: gcr.io/boldbi-294612/boldbi-designer:6.3.3
       restart: on-failure
       # environment:                         ##Refer to README.md for available environment variables
       #   - widget_bing_map_enable=false
       #   - widget_bing_map_api_key=""
       #   - AppSettings__locale-path=""
       volumes:
         - boldservices_data:/application/app_data
       networks:
         - boldservices
       healthcheck:
           test: ["CMD", "curl", "-f", "http://localhost/health-check"]
           interval: 10s
           timeout: 10s
           retries: 5
       labels:
         traefik.enable: 'true'
         traefik.http.routers.bi-dataservice.rule: Host(`example.com`) && PathPrefix(`/bi/designer`)
         traefik.http.routers.bi-dataservice.entrypoints: websecure
         traefik.http.routers.bi-dataservice.tls: 'true'		
    
     traefik:
       image: "traefik:v2.2"
       healthcheck:
         test:
           - CMD
           - traefik
           - healthcheck
         interval: 10s
         timeout: 5s
         retries: 3
       ports:
         - "80:80"
         - "443:443"
         - "8080:8080"
       volumes:
         - <traefik yaml file path>:/etc/traefik/traefik.yaml
         - <SSL certificate folder path>:/certs/
         - /var/run/docker.sock:/var/run/docker.sock
       networks:
         - boldservices
    
    networks:
     boldservices:
    
    volumes:
     boldservices_data:
       driver: local
       driver_opts:
         type: 'none'
         o: 'bind'
         device: '<host_path_boldbi_data>'
         
    

    Replace the example.com with a domain name in APP_URL and labels section.

    < traefik yaml file path > - Specify the path for the traefik yaml configuration file.
    Example: /root/traefik.yaml
    < SSL certificate folder path > - Specify the path for the SSL certificate folder.
    Example: /root/certs/
    Note: Refer to this document to refer to the environment variable for the Bold BI application.

  3. Allocate a directory in your host machine to store the shared folders for application usage. Replace the directory path with <host_path_boldbi_data> in the docker-compose.yml file.
    For example:up\\ Linux: device: ‘/var/boldbi/boldbi_data’
    Windows: device: ‘D:/boldbi/boldbi_data’

  4. Now, build a container using the following command from the Bold BI docker-compose file location.

    docker-compose up -d 
    
  5. Configure the Bold BI On-Premise application startup to use the application. Refer to the following link for more details on configuring the application startup.

    https://help.boldbi.com/embedded-bi/application-startup

Was this article useful?
Like
Dislike
Help us improve this page
Please provide feedback or comments
SS
Written by Sivanesan Saravanan
Updated:
Comments (0)
Please  to leave a comment
Access denied
Access denied