Skip to content

Installing Tableau Server Version 2023.03.04

Tableau Server is an enterprise-level platform that enables secure sharing, collaboration and management of Tableau dashboards. It provides data visualizations across an organization and addresses high availability (HA/DR) strategies and security protocols.

For more information, refer to the official Tableau Server operating system requirements section.

Prerequisites

The following conditions must be met to install Tableau Server:

Note

  • To reinstall Tableau or format the VM, you must first deactivate the license. Failure to do so will render the license unusable.
  • Ensure a full backup is performed before proceeding.

Deactivate License

Run the following commands to deactivate the license.

su - veservice
LICENSEKEY_INTERACTOR="xxxx"
LICENCEKEY_VIEWER="xxxx"
USERNAME="veservice"
PASSWORD="clcm"
tsm licenses deactivate -k $LICENCEKEY_VIEWER -u $USERNAME -p $PASSWORD
tsm licenses deactivate -k $LICENSEKEY_INTERACTOR -u $USERNAME -p $PASSWORD
tsm restart

Activate License

Run the following commands to activate the license.

su - veservice
LICENSEKEY_INTERACTOR="xxxxx"
LICENCEKEY_VIEWER="xxxx"
USERNAME="veservice"
PASSWORD="clcm"
tsm licenses activate -k $LICENCEKEY_VIEWER -u $USERNAME -p $PASSWORD
tsm licenses activate -k $LICENSEKEY_INTERACTOR -u $USERNAME -p $PASSWORD

Common Commands

  • Check license status: tsm licenses list
  • Check tableau status: tsm status -v

To configure Tableau Server, follow the steps:

  1. Set up Virtual Machines (VMs).

    1. Create three virtual machines with the following specifications:

      Server CPU Memory (GB) Storage Comments
      tableau-01 64 128 100GB (SSD) + 500GB (SSD) Primary Node
      tableau-02 32 128 100GB (SSD) + 500GB (SSD) Worker Node 1
      tableau-03 32 128 100GB (SSD) + 500GB (SSD) Worker Node 2

      Network

    2. Configure the network on each node by running the following commands:

      nmcli c reload ens192
      nmcli c up ens192
      sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
      setenforce 0
      systemctl stop firewalld
      systemctl disable firewalld
      
    3. Update the host /etc/hosts file on each node and configure it according to your environment.

      vi /etc/hosts
      

      host file

  2. Upload installation files and configure SSH access.

  3. Create a directory for Tableau installation files on tableau-01 and upload the required installation files to the newly created directory.
    Note: Ensure you obtain the Tableau Server ticket provider and RPM from the Siemens OPS team.

    mkdir /tmp/tableau
    upload: tableau-server-2023-3-4.x86_64.rpm to /tmp/tableau
    upload: tableau_ticket_provider-0.7.13.tgz, rename to tableau_ticket_provider.tgz
    
  4. Generate SSH keys and copy them to worker nodes (worker01 and worker02).

    ssh-keygen
    ssh-copy-id worker01 ssh-copy-id worker02
    
  5. Copy the installation files to the worker nodes using scp.

    scp tableau-server-2023-3-4.x86_64.rpm worker01:/tmp/tableau/
    scp tableau-server-2023-3-4.x86_64.rpm worker02:/tmp/tableau/
    
  6. Initialize node on each node and configure disk. Update the values based on your environment's disk.

    1. Identify the disk to be used, replace /dev/sdb with the appropriate disk.
    2. Format the disk as ext4 (update /dev/sdb if needed).
    3. Persist the mount by adding the disk entry to /etc/fstab.
    4. Create a new user named veservice.
    5. Set the correct ownership for the veservice home directory.

      VIRTUAL_DISK_NAME="/dev/sdb"          #Use 'lsblk', update according to the environment
      echo yes|mkfs.ext4 /dev/sdb           #Use 'lsblk', update according to the environment
      mkdir -p /home/sdb                    #Adjust the directory path as required
      mount /dev/sdb  /home/sdb
      echo `blkid /dev/sdb | awk '{print $2}' | sed 's/\"//g'` /home/sdb ext4 defaults 0 0 >> /etc/fstab             #Update according to environment
      useradd veservice
      echo "clcm" | passwd veservice --stdin
      chmod -v u+w /etc/sudoers
      echo "Add super permission to user veservice..."
      echo "veservice  ALL=(ALL)  NOPASSWD: ALL"  >>/etc/sudoers
      chown veservice:veservice /home/veservice/
      
  7. Deploy Tableau Server on tableau-01

    1. Define necessary environment variables based on your specific configuration.

      USERNAME="veservice"
      PASSWORD="clcm"
      TECHUSER_PWD="clcm"
      DATAVOLUME="/home/sdb"                   #update according to environment
      TSM_ACTIVATED="not_yet"
      PACKAGE_PATH="/tmp/tableau/"
      TBL_PGSQL_DRIVER="postgresql-42.7.3.jar"
      
      TBLSRV_INSTALLER="2023.3.4"
      TBLSRV_PACKAGE="tableau-server-${TBLSRV_INSTALLER//./-}.x86_64.rpm"
      
      LICENSEKEY_INTERACTOR="<add-licensekey-interactor>"         #update according to environment
      LICENCEKEY_VIEWER="<add-licensekey-viewer>"                         #update according to environment
      MINDGATE_IP="<ip-address>"                                      #update according to environment, wait to mindgate install
      CONTROLLER_IP="<ip-address>"                        #update according to environment
      NODE2_IP="<ip-address>"                    #update according to environment
      NODE3_IP="<ip-address>"                          #update according to environment
      
    2. Install required packages and Python 3.12.

      sudo yum -y install epel-release
      sudo yum -y update
      sudo reboot
      sudo yum -y groupinstall "Development Tools"
      sudo yum -y install openssl-devel bzip2-devel libffi-devel xz-devel
      gcc --version
      
      sudo yum -y install wget
      wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz
      tar xvf Python-3.12.0.tgz
      cd Python-3.12*/
      ./configure --enable-optimizations
      sudo make altinstall
      
    3. Download and install the Tableau Server package.

      yum install $PACKAGE_PATH/$TBLSRV_PACKAGE -y
      VERSION_STRING=$(rpm -qa | grep -i tableau-server- | cut -d "-" -f 3) echo $VERSION_STRING
      
    4. Download and install the PostgreSQL JDBC driver for Tableau.

      mkdir -p /opt/tableau/tableau_driver/jdbc/
      curl -sS https://jdbc.postgresql.org/download -o /opt/tableau/tableau_driver/jdbc/$TBL_PGSQL_DRIVER
      ls /opt/tableau/tableau_driver/jdbc
      
    5. Configure Tableau Server with the provided credentials.

      echo "${PASSWORD}" > pwd_file
      sudo /opt/tableau/tableau_server/packages/scripts.$VERSION_STRING/initialize-tsm --accepteula -a $USERNAME --password-file=pwd_file -d $DATAVOLUME/server
      rm -rf pwd_file
      source /etc/profile.d/tableau_server.sh
      echo "success">/tmp/tsm_activated
      
    6. Activate the Tableau licenses.

      su - veservice -c "tsm licenses activate -k $LICENSEKEY_INTERACTOR -u $USERNAME -p $PASSWORD"
      su - veservice -c "tsm licenses activate -k $LICENCEKEY_VIEWER -u $USERNAME -p $PASSWORD"   #update according to environment
      
    7. Create and apply registration information for the server.

      cat << EOF > /tmp/registration.json
      {
          "zip" : "76187",
          "country" : "Germany",
          "city" : "Karlsruhe",
          "last_name" : "lastname",
          "industry" : "AG",
          "eula" : "true",
          "title" : "Mr",
          "company_employees" : "Employe1,Employe2",
          "phone" : "1234567890",
          "company" : "AG",
          "state" : "BY",
          "opt_in" : "false",
          "department" : "DF",
          "first_name" : "abc",
          "email" : "abc.lastname@domain.com"
      }
      EOF
      
          su - veservice -c "tsm register --file /tmp/registration.json  --username $USERNAME --password $PASSWORD"
      
    8. Configure trusted IPs and other network settings.

      cat << EOF > /tmp/identity.json
      {
          "configEntities":{
            "identityStore":{ 
              "_type":"identityStoreType",
              "type":"local"
            }
        }
      }
      EOF
      
      su - veservice -c "tsm settings import -f /tmp/identity.json --username $USERNAME --password $PASSWORD"
      
      
      cat << EOF > /tmp/config.json
      { 
        "configEntities":{ 
            "gatewaySettings":{ 
              "_type":"gatewaySettingsType",
              "publicPort":443,
              "trustedIPs":[ 
                  "$MINDGATE_IP",
                  "$NODE2_IP",
                  "$NODE3_IP"
              ]
            },
            "trustedAuthenticationSettings":{ 
              "_type":"trustedAuthenticationSettingsType",
              "trustedHosts":["<ip-address>"]
            }
        },
        "configKeys":{ 
            "gateway.timeout":"900",
            "ssl.protocols":"all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1",
            "ssl.ciphersuite":"HIGH:MEDIUM:!aNULL:!MD5:!RC4:!3DES",     
            "wgserver.unrestricted_ticket":true,
            "wgserver.session.apply_lifetime_limit":true,
            "wgserver.session.lifetime_limit":"720",
            "wgserver.session.idle_limit":"30",
            "gateway.http.hsts":true,
            "gateway.http.referrer_policy":"same-origin",
            "subscriptions.enabled": true,
            "subscriptions.attachments_enabled": true,
            "subscriptions.max_attachment_size_megabytes": 32,
            "shareproductusagedata.enabled": false,
            "features.SelfServiceSchedules": true
        }
      }
      EOF
      
      su - veservice -c "tsm settings import -f /tmp/config.json --username $USERNAME --password $PASSWORD"
      
    9. Activate Tableau Server's legacy identity mode and apply any pending changes.

      #tsm authentication legacy-identity-mode enable
      su - veservice -c "tsm pending-changes apply -iw --ignore-prompt --username $USERNAME --password $PASSWORD"
      
    10. Remove old configuration files.

      rm -rf config.json
      rm -rf smtpconfig.json
      rm -rf registration.json
      rm -rf identity.json
      
    11. Set up Tableau Server, create the initial user account and retrieve the bootstrap file required for node configuration.

        su - veservice -c "tsm initialize --start-server --request-timeout 1800  --username $USERNAME --password $PASSWORD"
        su - veservice -c "tabcmd initialuser --server "localhost:80" --username "tblsrv_techuser" --password $TECHUSER_PWD"
        su - veservice -c "tsm topology nodes get-bootstrap-file --file bootstrap.json  --username $USERNAME --password $PASSWORD"
      
        scp /home/veservice/bootstrap.json $NODE2_IP:/home/veservice
        scp /home/veservice/bootstrap.json $NODE3_IP:/home/veservice
      
        service crond restart
      
        # FIREWALL
        yum install firewalld -y
        systemctl restart dbus
        systemctl start firewalld
        systemctl enable firewalld
        firewall-cmd --permanent --add-port=80/tcp
        firewall-cmd --permanent --add-port=8060/tcp
        firewall-cmd --permanent --add-port=8080/tcp
        firewall-cmd --permanent --add-port=8850/tcp
        firewall-cmd --permanent --add-port=8000-9000/tcp
        firewall-cmd --permanent --add-port=27000-27010/tcp
        firewall-cmd --reload
      
  8. Tableau Server installation on tableau-02 and tableau-03.

    USERNAME="veservice"
    PASSWORD="clcm"
    TECHUSER_PWD="clcm"
    DATAVOLUME="/home/sdb"                      #update according to environment
    TSM_ACTIVATED="not_yet"
    PACKAGE_PATH="/tmp/tableau/"
    TBL_PGSQL_DRIVER="postgresql-42.7.3.jar"
    TBLSRV_INSTALLER="2023.3.4"
    TBLSRV_PACKAGE="tableau-server-${TBLSRV_INSTALLER//./-}.x86_64.rpm"
    
    LICENSEKEY_INTERACTOR="<add-licensekey-interactor>"                              #update according to environment
    LICENCEKEY_VIEWER="<add-licensekey-viewer>"                                   #update according to environment
    MINDGATE_IP="<ip-address>"
    CONTROLLER_IP="<ip-address>"                        #update according to environment
    NODE2_IP="<ip-address>"                    #update according to environment
    NODE3_IP="<ip-address>"                          #update according to environment
    
    echo "$USERNAME:${PASSWORD}" | sudo chpasswd
    
    sudo yum -y install epel-release
    sudo yum -y update
    sudo reboot
    sudo yum -y groupinstall "Development Tools"
    sudo yum -y install openssl-devel bzip2-devel libffi-devel xz-devel
    gcc --version
    
    sudo yum -y install wget
    wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz
    tar xvf Python-3.12.0.tgz
    cd Python-3.12*/
    ./configure --enable-optimizations
    sudo make altinstall
    
    yum install $PACKAGE_PATH/$TBLSRV_PACKAGE -y
    VERSION_STRING=$(rpm -qa | grep -i tableau-server- | cut -d "-" -f 3) echo $VERSION_STRING
    
    
    mkdir -p /opt/tableau/tableau_driver/jdbc/
    curl -sS https://jdbc.postgresql.org/download/$TBL_PGSQL_DRIVER -o /opt/tableau/tableau_driver/jdbc/$TBL_PGSQL_DRIVER
    ls /opt/tableau/tableau_driver/jdbc
    
    /opt/tableau/tableau_server/packages/scripts.${VERSION_STRING}/initialize-tsm --accepteula -a $USERNAME -b /home/veservice/bootstrap.json -d $DATAVOLUME/server
    
    # FIREWALL
    yum install firewalld -y
    systemctl restart dbus
    systemctl start firewalld
    systemctl enable firewalld
    firewall-cmd --set-default-zone=public
    firewall-cmd --permanent --add-port=80/tcp
    firewall-cmd --permanent --add-port=8060/tcp
    firewall-cmd --permanent --add-port=8080/tcp
    firewall-cmd --permanent --add-port=8850/tcp
    firewall-cmd --permanent --add-port=8000-9000/tcp
    firewall-cmd --permanent --add-port=27000-27010/tcp
    firewall-cmd --reload
    
  9. Tableau Server cluster setup on tableau-01

    USERNAME="veservice"
    PASSWORD="clcm"
    TECHUSER_PWD="clcm"
    DATAVOLUME="/home/sdb"                   #update according to environment
    TSM_ACTIVATED="not_yet"
    PACKAGE_PATH="/tmp/tableau/"
    TBL_PGSQL_DRIVER="postgresql-42.7.3.jar"
    TBLSRV_INSTALLER="TableauServer-2023-1-6-SPA-x86_64.rpm"
    LICENSEKEY_INTERACTOR="<add-licensekey-interactor>"                 #update according to environment
    LICENCEKEY_VIEWER="<add-licensekey-viewer>"                                 #update according to environment
    MINDGATE_IP="<ip-address>"                                #update according to environment
    CONTROLLER_IP="<ip-address>"                        #update according to environment
    NODE2_IP="<ip-address>"                    #update according to environment
    NODE3_IP="<ip-address>"                          #update according to environment
    
    LIST_OF_NODES=($(tsm topology list-nodes --username $USERNAME --password $PASSWORD | tr " " "\n" | sort -n))
    STRING_OF_NODES=$(tsm topology list-nodes --username $USERNAME --password $PASSWORD | tr "\n" ",")
    # Get the number of nodes from the LIST_OF_NODES array
    NUMBER_OF_NODES=${ LIST_OF_NODES[@]}
    echo $LIST_OF_NODES
    echo $STRING_OF_NODES
    echo $NUMBER_OF_NODES
    
    su - veservice -c "tsm stop --username $USERNAME --password $PASSWORD"
    
    su - veservice -c "tsm topology set-process -n node$(((NUMBER_OF_NODES+1) / 2)) -pr pgsql -c 1"
    
    su - veservice -c "tsm topology set-process -n node$(((NUMBER_OF_NODES+1) / 2)) -pr activemqserver -c 1"
    
    for node in ${LIST_OF_NODES[@]}; do
        tsm topology set-process -n $node -pr gateway -c 1
        tsm topology set-process -n $node -pr vizqlserver -c ${NUMBER_OF_INSTANCES:-2}
        tsm topology set-process -n $node -pr vizportal -c ${NUMBER_OF_INSTANCES:-2}
        tsm topology set-process -n $node -pr backgrounder -c ${NUMBER_OF_INSTANCES:-2}
        tsm topology set-process -n $node -pr cacheserver -c ${NUMBER_OF_INSTANCES:-2}
        tsm topology set-process -n $node -pr searchserver -c 1
        tsm topology set-process -n $node -pr indexandsearchserver -c 1
        tsm topology set-process -n $node -pr dataserver -c 2
        tsm topology set-process -n $node -pr filestore -c 1
        tsm topology set-process -n $node -pr metrics -c 1
        tsm topology set-process -n $node -pr tdsservice -c 1
        tsm topology set-process -n $node -pr contentexploration -c 1
        tsm topology set-process -n $node -pr collections -c 1
        tsm topology set-process -n $node -pr clustercontroller -c 1
    done
    
    su - veservice -c "tsm pending-changes apply -iw --ignore-prompt --username $USERNAME --password $PASSWORD"
    su - veservice -c "tsm stop --username $USERNAME --password $PASSWORD"
    su - veservice -c "tsm topology deploy-coordination-service --nodes ${STRING_OF_NODES::-1} --username $USERNAME --password $PASSWORD --ignore-prompt"
    #su - veservice -c "tsm topology cleanup-coordination-service --username $USERNAME --password $PASSWORD --ignore-prompt"
    su - veservice -c "tsm start --username $USERNAME --password $PASSWORD"
    
    su - veservice -c "tsm status -v"
    

Deploying ticket provider for CentOS

Note

Ensure that your system uses Python 3.11 and higher. For RHEL 8.5 or later, Python 3.11 and higher versions are supported.

  1. Set public key URL, extract and configure the ticket provider installer.

    PUBLIC_KEY_URL="https://core.piam.&lt;Domain>/token_keys"
    
    TCKTPRVDR_INSTALLER="tableau_ticket_provider.tgz"
    mkdir tmp_tcktprvdr
    tar zxvf ${TCKTPRVDR_INSTALLER} -C ./tmp_tcktprvdr
    sed -i -e "s~<PUBLIC_KEY_URL>~${PUBLIC_KEY_URL}~g" ./tmp_tcktprvdr/tableau-ticket-provider.service
    
  2. Update the install.sh and tableau-ticket-provider.service files to reflect the Python version (e.g., Python 3.12).

    python3.12 -m venv ${VENV}
    
    pip3.12 install --upgrade pip
    pip3.12 install *.whl
    
    SITE_PACKAGES=${VENV}/lib/python3.12/site-packages
    
    ExecStart=/opt/tableau-ticket-provider/tableauenv/bin/python3.12 -m tableau_ticket_provider
    
  3. Install the ticket provider and verify service installation.

    cd tmp_tcktprvdr && bash install.sh && cd ..
    rm -rf ./tmp_tcktprvdr
    
    systemctl | grep tableau-ticket-provider.service
    

Configuring Tableau Server

  1. Update the secret file mdsp-secret-infra-credentials for all namespaces.

    tableau_server_secret : clcm
    tbl_pass : clcm
    tbl_private_ip : http://<ip-address> (as per the env)
    tbl_public_ip : http://<ip-address> (as per the env)
    tbl_user: clcm
    
  2. Update the customer-gldn-values.yaml file.

Backing up and restoring Tableau Server

  1. Create a backup of Tableau Server by running the following command.

    /opt/tableau/tableau_server/packages/customer-bin.20231.23.0909.1155/tsm maintenance backup --file tblsrv_bckup --username $USERNAME --password $PASSWORD
    
  2. Set the correct permissions for the backup file and restore it.

    chown tableau:tableau /tableau/server/data/tabsvc/files/backups/restore_package.tsbak
    chmod o+rx /tableau/server/data/tabsvc/files/backups/restore_package.tsbak
    
    tsm stop --username ${USERNAME} --password ${PASSWORD}
    
    /opt/tableau/tableau_server/packages/customer-bin.20233.24.0314.1442/tsm maintenance restore --file tblsrv_bckup.tsbak --username ${USERNAME} --password ${PASSWORD}
    
    tsm start --username ${USERNAME} --password ${PASSWORD}
    

For more information, refer to the Tableau Server Identity Migration Guide.


Last update: January 31, 2025