Document toolboxDocument toolbox

Deployment Guide Wallboard 13.7

Solution Prerequisites

Following are the solution setup prerequisites.

Hardware requirements

For HA deployment, each machine in the cluster should have the following hardware specifications.


Minimum requirement

CPU

2 cores vCPU (4 cores for non-HA deployment)

RAM

4 GB (8 GB for non-HA deployment)

Disk

100 GB mounted on /

NICs

1 NIC

On this page


Software Requirements

OS Compatibility

The following OS software is required on the server:

Item

Version

Notes

CentOS

7.x updated to the latest packages (use Yum update)Administrative privileges (root) are required to follow the deployment steps.

Database Requirements

Item

Notes

MS SQL Database Server 2016/2017 Express/Standard/EnterpriseFor clustered SQL Server installation, the customer will be responsible to provide the cluster. For stand-alone DB deployment, DB (2017 express) will be included within docker containers.
Microsoft SQL Server 2017Microsoft SQL Server 2017, Microsoft Corporation Express Edition (64-bit) on Linux (Ubuntu 16.04.5 LTS). 
Only valid in case of a non-HA deployment.

Docker Engine Requirements

ItemNotes

Docker CE

Docker CE 18.06.0+


Browser Compatibility

Item

Version

Notes

Firefox

72.0.2(64-bit)


Chrome

Not tested 


IENot tested

Not supported

Cisco Unified CCX Compatibility

Recently tested against CCX version 12.0. On-Demand testing can be done on other CCX versions higher and/or prior to v12.0 and CCX Enhanced editions.

Installation Steps

Internet should be available on the machine where the application is being installed and connections on port 9242 should be allowed in the network firewall to carry out the installation steps. Commands and steps marked with (HA only) tag shouldn't be executed in a standalone single server deployment. All the commands start with a # indicating that root user privileges are required to execute these commands. Trailing # is not a part of the command.

Allow ports in the firewall (HA only)

For internal communication of docker swarm, you'll need to allow the communication (both inbound and outbound) on the ports: 2376/tcp, 2377/tcp, 7946/tcp, 7946/udp, 4789/udp, 80/tcp and 443/tcp.

To start the firewall on CentOS (if it isn't started already), execute the following commands. You'll have to execute these commands on all the cluster machines.: 

# systemctl enable firewalld
# systemctl start firewalld

To allow the ports on CentOS firewall, you can execute the following commands. You'll have to execute these commands on all the cluster machines.

# firewall-cmd --add-port=2376/tcp --permanent
# firewall-cmd --add-port=2377/tcp --permanent
# firewall-cmd --add-port=7946/tcp --permanent
# firewall-cmd --add-port=7946/udp --permanent
# firewall-cmd --add-port=4789/udp --permanent
# firewall-cmd --add-port=80/tcp --permanent
# firewall-cmd --add-port=443/tcp --permanent
# firewall-cmd --reload

Configure Log Rotation

Add the following lines in /etc/docker/daemon.json file (create the file if not there already) and restart the docker daemon using systemctl restart docker. Perform this step on all the machines in the cluster in case of HA deployment.

{   
    "log-driver": "json-file", 
    "log-opts": {
        "max-size": "50m",
        "max-file": "3"
    } 
}

Creating a Swarm Cluster

  1. Initialize a swarm manager with the IP address of the machine on which it is being run:

    # docker swarm init --advertise-addr <ip-addr>
  2. Get the swarm cluster token and join all the nodes in the cluster. . (HA only)

    # docker swarm join-token manager

    This command will print another command on the console. Copy that command and execute it on the other two machines to join the cluster as master nodes. A sample result is being shown below

  3. Execute the following command on all the machines in the cluster to login to docker registry: (HA only)

    docker login gitlab.expertflow.com:9242 --username deployment --password xWb8WafM8ZvdwBHNxLm3

Installing Application

  1. Download the deployment script deploy-wallboard.sh and place it in the /root directory. This script will:
    1. delete the wallboard directory in the present working directory if it exists.
    2. clone the wallboard repository from gitlab in the present working directory.
  2. To execute the script, give it the execute permissions and execute it. 

    # chmod +x deploy-wallboard.sh
    # ./deploy-wallboard.sh
  3. Create two databases in your DB server corresponding to wallboard and umm. This step is only required if you're using your own DB server/cluster. If you're using the built in MSSQL database server, you don't need to do anything. 
  4. Update environment variables  in the following files inside /root/wallboard/docker/environment_variables folder.

    1. common-variables.env

      NameDescription
      Do not change the default values for non-HA deployment OR if you want to use the built in database. For HA, use SQL server cluster settings instead of the defaults. If you want to use your own MSSQL instance anyway, update the following variables accordingly.
      DB_URL

      Wallboard database connection url

      For example:

      • jdbc:jtds:sqlserver://<MACHINE-IP or FQDN>:PORT/db_name
      • jdbc:jtds:sqlserver://<MACHINE-IP or FQDN>:PORT/db_name;instanceName=SomeInstance
      DB_USERdatabase user
      DB_PASSWORDdatabase password
      DB_DRIVERJDBC driver e.g., net.sourceforge.jtds.jdbc.Driver
      DB_DIALECTDatabase dialect e.g., org.hibernate.dialect.SQLServer2008Dialect
    2. umm-variables.env

      NameDescription
      Do not change the default values for non-HA deployment OR if you want to use the built in database. For HA, use SQL server cluster settings instead of the defaults. If you want to use your own MSSQL instance anyway, update the following variables accordingly.
      DB_URL

      UMM  database connection url

      For example:

      • jdbc:jtds:sqlserver://<MACHINE-IP or FQDN>:PORT/db_name
      • jdbc:jtds:sqlserver://<MACHINE-IP or FQDN>:PORT/db_name;instanceName=SomeInstance
      DB_USERdatabase user
      DB_PASSdatabase password
      DB_DRIVERJDBC driver e.g., net.sourceforge.jtds.jdbc.Driver
      DB_DIALECTDatabase dialect e.g., org.hibernate.dialect.SQLServer2008Dialect
      DB_RETRY_ATTEMPTS
      Defines how many times will try to acquire a new Connection from the database before giving up. By default is it set to 1.
      DB_TIMEOUT_CONNECTION 
      Sets the database connection timeout period after which an idle connection is removed from the pool. By default it is set to 1800 ie. (30 min) if its not provided.
      Change the following variables as per your environment
      PRIM_FINESSE_IP

      Primary Finesse URL including port (if not 80 or 443)

      For example:

      • http://finesse10-5.com
      • https://finesse12-0.com:8445
      SEC_FINESSE_IP

      Secondary Finesse URL including port (if not 80 or 443)

      For example:

      • http://finesse10-5.com
      • https://finesse12-0.com:8445
      FINESSE_USERFinesse administrator user
      FINESSE_PASSFinesse administrator password

      ADMIN_PASS

      Password of the admin user

    3. synchronizer-variables.env

      NameDescription

      CC_TYPE

      Decides whether Cisco contact center is UCCX or UCCE

      Holds string "UCCX" for UCCX and "UCCE" for UCCE. Default is UCCX

      REDUNDANT_DEPLOYMENTDecides if synchronizer deployment is redundant. Holds strings "true" or "false". Default is false 
      INSTANCE_NAMEUsed for differentiation of instances when deployed redundant, could be any string.
      SYNC_AGENTSTo enable Agent sync set it to "true", default is true
      SYNC_AGENTS_STATSEnables/disables agents stats sync, default is true
      SYNC_AGENTS_EMAIL_STATSEnables/disables agent email stats, default is false
      SYNC_QUEUES_STATSEnables/disables queue stats, default is true
      SYNC_QUEUESEnables/disables queues/skillgroups in case of UCCE, default is true
      Following variables are used when CC_TYPE = "UCCX"
      UCCX_PUB_IPPrimary UCCX IP
      UCCX_PUB_USERNAMEPrimary UCCX admin username
      UCCX_PUB_PASSWORDPrimary UCCX admin password
      UCCX_SUB_USERNAMESecondary UCCX admin username
      UCCX_SUB_PASSWORDSecondary UCCX admin password
      UCCX_PUB_DB_PASSWORDPrimary UCCX database reporting user (hruser) password
      UCCX_SUB_DB_PASSWORDSecondary UCCX database reporting user (hruser) password
      UCCX_REAL_TIME_PORTUCCX real-time APIs port, default is 9080
      SYNC_SKILLSEnables/disables UCCX skills sync, default is false
      SYNC_SUPERVISORSEnables/disables UCCX supervisors sync, default is false
      SLA_FORMULA#1  = (Calls Answered/ Calls presented)*100 (updated after every 5 sec)
      #2 = (Calls Answered met SL/ Calls presented)*100 (updated after every 5 mins)
      SLA_Decimal#true  =  (The SLA value will be displayed for up to 2 decimal points).
      #false = (The SLA value will be rounded off.)
      CCX_API_TIMEOUT

      Defines the timeout for CCX APIs in milliseconds.

      #Default is 3000 milliseconds if not set in env.

      #A value of 5000 milliseconds is recommended.

      CCX_AGENT_STATE_REST_OPERATION

      post= For running real-time API via POST method

      get= For running real-time API via GET method

      #Default if not set is : GET

      CCX_SSL

      #Boolean (true or false)

      #if  set to true it will append https:// to all ccx apis

      #if  set to false it will append http:// to all ccx apis

      #Default is set to false

      Following variables are used when CC_TYPE = "UCCE"
      CCE_DB_URL

      UCCE awdb database url

      jdbc:jtds:sqlserver://192.168.1.87:1433/ucce_awdb

      CCE_DB_USERCCE database user
      CCE_DB_PASSWORDCCE database password
      TZThe Timezone of UCCE e.g. Asia/Karachi
  5. The following configuration must be done at UCCX. This will allow UCCX System to write real time data to tables that Synchronizer uses to fetch for gadgets.
    1. Go to Tools > “Real Time Snapshot Config” on UCCX Administration UI.
    2. Enable all three checkboxes
    3. Select “5” from dropdown against “Data Writing Interval”
    4. Provide the IP addresses of the machine where Synchronizer will run (comma separated IPs in case of HA, otherwise only one IP) separated by commas in the field against “Server Name” under “Wallboard System.
    5. Click on update button. 
  6. Get domain/CA signed SSL certificates for wallboard FQDN/CN and place the files in /root/wallboard/docker/certificates folder. The file names should be server.crt and server.key.
  7. Update the translation files inside /root/wallboard/docker/translations folder for multilingual UI. The file names in translation folder should remain unchanged.
  8. Having environment configurations done, copy the wallboard directory to second machine.

    # scp -r /root/wallboard root@<machine-ip>:/root/
  9. Execute the following commands inside /root/wallboard directory on both machines.

    # chmod 755 install.sh
    # ./install.sh
  10. Run the following command to ensure that all the components are up and running. The screenshot below shows a sample response for a standalone non-HA deployment. 

    # docker service ls



Virtual IP configuration (HA only)

Repeat the following steps for all the machines in the HA cluster.

  1. Download keepalived.sh script and place it in /root directory.
  2. Give execute permission and execute the script: 

    # chmod +x keepalived.sh
    # ./keepalived.sh
  3. Configure keep.env file inside /root/keep-alived folder

    NameDescription
    KEEPALIVED_UNICAST_PEERS

    IP of pear VM. Value on VM1 should be IP of VM2 and vice versa.

    192.168.1.76

    KEEPALIVED_VIRTUAL_IPSAny virtual IP. It should be available(dedicated) in the LAN. For example: 192.168.1.245
    KEEPALIVED_PRIORITYPriority of the node. Instance with lower number will have a higher priority. It can take any value from 1-255. 
    KEEPALIVED_INTERFACEName of the network interface with which your machine is connected to the network. On CentOS, ifconfig or ip addr sh will show all the network interfaces and assigned addresses. 
    CLEARANCE_TIMEOUTCorresponds to the initial startup time of the application in seconds which is being monitored by keepalived. A nominal value of 60-120 is good enough
    KEEPALIVED_ROUTER_IDDo not change this value.
    SCRIPT_VAR

    This script is continuously polled after 2 seconds. Keepalived relinquishes control if this shell script returns a non-zero response. For wallboard, it should be:

    pidof dockerd && wget -O index.html https://localhost/login

  4. Give the execute permission and execute the script: 

    # chmod +x keep-command.sh
    # ./keep-command.sh

Adding License

  1. Browse to https://FQDN/umm in your browser (FQDN will be the domain name assigned to the VIP). 
  2. Click on the red warning icon on right, paste the license in the field and click save. 



Uninstalling

To uninstall the application completely, execute the following commands. Execute the second command only if deployed in HA.

# docker stack rm wallboard
# docker-compose -f /root/wallboard/docker/docker-compose.yml down # docker rm -f keep-alived
# docker system prune
# docker network prune


Troubleshooting

  • To update any changes in the environment variables and/or compose file, simple execute the install script again:

    /root/wallboard/install.sh
  • To restart the whole stack completely, execute the following commands: 

    # docker stack rm wallboard
    # /root/wallboard/install.sh
  • To find out the name of any service, execute the following command: 

    # docker service ls
    • Example response: 
  • To restart any single service (with a single replica), execute the following command. Following example restarts wallboard-backend. Replace the name of any service from the above command. 

    # docker service update --force wallboard_wallboard-backend
  • Never execute systemctl restart docker after starting keep-alived. This would immediately shutdown the ssh and logout the current user's session.