Introduction
This guide walks you through installing ThingsBoard CE 4.0.1 on Ubuntu 24.04 with the following setup:
- Entity database: PostgreSQL
- Telemetry database: Apache Cassandra
- Message queue: Kafka (running in Docker)
This hybrid architecture is production-ready and scalable for large IoT deployments.
- Install Java 17 (OpenJDK)
sudo apt install -y openjdk-17-jdk
java -version
Make sure Java 17 is the default version.
- ThingsBoard service installation
wget https://github.com/thingsboard/thingsboard/releases/download/v4.0.1/thingsboard-4.0.1.deb
udo dpkg -i thingsboard-4.0.1.deb
- Install PostgreSQL
sudo apt install -y postgresql-common
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
sudo apt update
sudo apt -y install postgresql-16
sudo su - postgres
psql
CREATE DATABASE thingsboard;
- Install Apache Cassandra
echo "deb [signed-by=/etc/apt/keyrings/apache-cassandra.asc] https://debian.cassandra.apache.org 50x main" | sudo tee /etc/apt/sources.list.d/cassandra.sources.list
sudo curl -o /etc/apt/keyrings/apache-cassandra.asc https://downloads.apache.org/cassandra/KEYS
sudo apt-get update
sudo apt-get install -y cassandra cassandra-tools
Check Cassandra service status
nodetool status
sudo systemctl status cassandra.service
- Start Kafka in Docker
Create the docker-compose.yml
:
vi ~/thingsboard-kafka.yml
Paste the following:
version: '3.2'
services:
kafka:
restart: always
image: bitnami/kafka:3.8.1
ports:
- 9092:9092 #to localhost:9092 from host machine
- 9093 #for Kraft
- 9094 #to kafka:9094 from within Docker network
environment:
ALLOW_PLAINTEXT_LISTENER: "yes"
KAFKA_CFG_LISTENERS: "OUTSIDE://:9092,CONTROLLER://:9093,INSIDE://:9094"
KAFKA_CFG_ADVERTISED_LISTENERS: "OUTSIDE://localhost:9092,INSIDE://kafka:9094"
KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT,CONTROLLER:PLAINTEXT"
KAFKA_CFG_INTER_BROKER_LISTENER_NAME: "INSIDE"
KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: "false"
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: "1"
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: "1"
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: "1"
KAFKA_CFG_PROCESS_ROLES: "controller,broker" #KRaft
KAFKA_CFG_NODE_ID: "0" #KRaft
KAFKA_CFG_CONTROLLER_LISTENER_NAMES: "CONTROLLER" #KRaft
KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: "0@kafka:9093" #KRaft
volumes:
- kafka-data:/bitnami
volumes:
kafka-data:
driver: local
Start Kafka:
docker compose -f ~/thingsboard-kafka.yml up -d
- Configure ThingsBoard
Edit the config file:
sudo vi /etc/thingsboard/conf/thingsboard.conf
Set the following environment variables:
# DB Configuration
export DATABASE_TS_TYPE=cassandra
export SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/thingsboard
export SPRING_DATASOURCE_USERNAME=postgres
export SPRING_DATASOURCE_PASSWORD=postgres
export CASSANDRA_CLUSTER_NAME=Thingsboard Cluster
export CASSANDRA_KEYSPACE_NAME=thingsboard
export CASSANDRA_URL=127.0.0.1:9042
export CASSANDRA_USE_CREDENTIALS=false
export CASSANDRA_USERNAME=
export CASSANDRA_PASSWORD=
export TB_QUEUE_TYPE=kafka
export TB_KAFKA_SERVERS=localhost:9092
Save and exit.
- Start ThingsBoard service
Initialize ThingsBoard Database
sudo /usr/share/thingsboard/bin/install/install.sh --loadDemo
Start and ThingsBoard
sudo service thingsboard start
- Access the Web UI
Open a browser and go to:
http://thingsboard.maksonlee.com:8080
Login credentials:
- System Administrator: sysadmin@thingsboard.org / sysadmin
- Tenant Administrator: tenant@thingsboard.org / tenant
Conclusion
You’ve successfully installed ThingsBoard CE 4.0.1 on Ubuntu 24.04 using:
- PostgreSQL for entities
- Cassandra for telemetry
- Kafka (in Docker) for the queue
This setup is scalable, production-ready, and suitable for large-scale IoT applications.