Skip to content
Stand with Ukraine flag

Installing ThingsBoard CE using Docker (Linux, macOS)

This guide covers a single-node ThingsBoard Community Edition (CE) installation using Docker Compose on Linux or macOS. By the end, you will have a fully functional ThingsBoard instance running on your machine. For cluster setup, see Cluster Setup with Docker Compose.

Ensure your server meets the minimum requirements:

Use caseCPURAMRecommended services
Development / PoC1 core4 GBThingsBoard, PostgreSQL
Production (small)2 cores8 GBThingsBoard, PostgreSQL, Kafka
Production (recommended)4+ cores16+ GBThingsBoard, PostgreSQL, Kafka, Cassandra

Install Docker on your server:

Create a dedicated directory for your ThingsBoard installation and navigate to it. All subsequent commands in this guide should be run from this directory.

Terminal window
mkdir -p ~/thingsboard && cd ~/thingsboard

ThingsBoard uses a message queue to route messages between its internal services. Select the option that matches your infrastructure:

  • In Memory (default) — built-in queue, no extra setup required. Suitable for development and PoC. Not recommended for production or multi-node deployments.
  • Kafka — high-throughput, durable queue. Run it yourself or use a managed service such as AWS MSK.
  • Confluent Cloud — fully managed Kafka service. Use this if you want Kafka without managing the infrastructure yourself.

Create the docker-compose.yml file:

Terminal window
nano docker-compose.yml

Paste one of the configurations below, save, and exit. Or use the download button to save the file directly.

services:
postgres:
restart: always
image: "postgres:18"
ports:
- "5432"
environment:
POSTGRES_DB: thingsboard
POSTGRES_PASSWORD: postgres
volumes:
- postgres-data:/var/lib/postgresql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres -d thingsboard"]
interval: 10s
timeout: 5s
retries: 5
start_period: 10s
thingsboard-ce:
restart: always
image: "thingsboard/tb-node:4.3.1.1"
ports:
- "8080:8080"
- "7070:7070"
- "1883:1883"
- "8883:8883"
- "5683-5688:5683-5688/udp"
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "10"
environment:
TB_SERVICE_ID: tb-ce-node
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/thingsboard
SPRING_DATASOURCE_PASSWORD: postgres
depends_on:
postgres:
condition: service_healthy
volumes:
postgres-data:
name: tb-postgres-data
driver: local

Services started:

  • postgres — PostgreSQL database
  • thingsboard-ce — ThingsBoard application node
Ports (host:container)
Port mappingDescription
8080:8080Web UI and REST API. The left value is the host port — change it if 8080 is already in use.
1883:1883MQTT — plaintext IoT device connections
8883:8883MQTT over TLS — encrypted IoT device connections
5683:5683/udpCoAP — plaintext IoT protocol
5684:5684/udpCoAP over DTLS — encrypted CoAP
5685:5685/udpLwM2M CoAP — plaintext Lightweight M2M
5686:5686/udpLwM2M CoAP over DTLS — encrypted LwM2M
5687:5687/udpLwM2M — plaintext Lightweight M2M (Bootstrap)
5688:5688/udpLwM2M over DTLS — encrypted Lightweight M2M (Bootstrap)
7070:7070Edge RPC (gRPC) — connections from ThingsBoard Edge nodes
Environment variables
VariableDescription
POSTGRES_PASSWORDPassword for the PostgreSQL postgres user. Must match SPRING_DATASOURCE_PASSWORD. Change the default value in production.
SPRING_DATASOURCE_URLPostgreSQL JDBC connection URL. Specifies the host and database name. Default: jdbc:postgresql://postgres:5432/thingsboard.
SPRING_DATASOURCE_USERNAMEPostgreSQL username ThingsBoard connects as. Default: postgres.
SPRING_DATASOURCE_PASSWORDPostgreSQL password ThingsBoard uses to connect. Must match POSTGRES_PASSWORD.
TB_QUEUE_TYPEMessage queue type. Options: in-memory (default, single-node only), kafka, rabbitmq.
TB_KAFKA_SERVERSKafka bootstrap servers. Required when TB_QUEUE_TYPE=kafka. Default: localhost:9092.
Volumes
VolumeDescription
tb-postgres-dataPersists PostgreSQL data across container restarts and upgrades.
tb-ce-kafka-dataPersists Kafka data. Only present when TB_QUEUE_TYPE=kafka.

For the full list of configuration parameters, see the Configuration Reference.

Step 2. Initialize database schema and system assets

Section titled “Step 2. Initialize database schema and system assets”

Before starting ThingsBoard, initialize the database schema and load built-in assets. Choose the option that matches your goal:

  • With demo data — also loads a sample tenant account, pre-built dashboards, and demo devices. Useful for exploring the platform before deploying to production.
  • Clean install — initializes the database with system data only (rule chains, widget bundles, system dashboards).
Terminal window
docker compose run --rm -e INSTALL_TB=true -e LOAD_DEMO=true thingsboard-ce

The container exits automatically once initialization is complete.

Start all containers:

Terminal window
docker compose up -d

Monitor the startup. The line confirming the platform is ready will be highlighted:

Terminal window
docker compose logs -f thingsboard-ce | grep --line-buffered --color=always -E 'Started ThingsboardServerApplication|$'

Press Ctrl+C to detach from the log stream — containers will continue running in the background.

Open http://localhost:8080 in your browser. You should see the ThingsBoard login page. Use the following default credentials:

RoleEmailPasswordWith demo dataClean install
System Administrator[email protected]sysadmin
Tenant Administrator[email protected]tenant
Customer User[email protected]customer

See Getting Started for your next steps after login.

Stream the ThingsBoard container logs:

Terminal window
docker compose logs -f thingsboard-ce

Stop all containers:

Terminal window
docker compose down

Start all containers:

Terminal window
docker compose up -d

When a new ThingsBoard release becomes available, update your installation to benefit from the latest features and security patches.

See the Upgrade Instructions for detailed steps.

If you observe errors related to DNS issues, for example:

Terminal window
127.0.1.1:53: cannot unmarshal DNS message

Configure your system to use Google public DNS servers. See Linux and macOS instructions.