# Install / Upgrade 5giotlead/tb-ce
[toc]
>[!Note]
**試著從 3.8.0 開始部署, 逐步升級至 3.9.0 (切勿直接跳升到最終目標版本)**
## Environment
**OS**
```
debian-12.9.0-amd64-netinst.iso
```
$ ``cat /etc/os-release``
```
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
```
**Docker Engine**
$ ``docker --version``
```shell
Docker version 27.5.1, build 9f9e405
```
## Install ghcr.io/5giotlead/tb-ce:3.8.0
參考:
- https://thingsboard.io/docs/user-guide/install/docker/
- https://hub.docker.com/_/postgres
### 1. docker-compose.yml
```yml==
services:
mytb:
image: "ghcr.io/5giotlead/tb-ce:3.8.0" # specified version
container_name: mytb
depends_on:
- postgres
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/thingsboard
TB_QUEUE_TYPE: in-memory
ports:
- "8080:9090"
- "1883:1883"
- "7070:7070"
- "5683-5688:5683-5688/udp"
restart: always
volumes:
- ./mytb-data:/data
- ./mytb-logs:/var/log/thingsboard
postgres:
image: postgres:16
container_name: postgres
environment:
POSTGRES_USER: thingsboard
POSTGRES_PASSWORD: postgres
POSTGRES_DB: thingsboard
PGPORT: 5432
ports:
- "5432:5432"
restart: always
volumes:
- ./postgre-data:/var/lib/postgresql/data
```
### 2. create mount folders
```shell
mkdir -p ./mytb-data && sudo chown -R 799:799 ./mytb-data
mkdir -p ./mytb-logs && sudo chown -R 799:799 ./mytb-logs
mkdir -p ./postgre-data && sudo chown -R 799:799 ./postgre-data
```
### 3. start the container
```shell
docker compose up -d
docker compose logs -f mytb
```
--------------------------------
## Upgrade to tb-ce:3.8.1
**shell**
```shell
docker compose stop
# ensure upgrade from 380
echo "3.8.0" | sudo tee ./mytb-data/.upgradeversion > /dev/null
# start postgres
docker compose up -d postgres
# temp-nw for upgrade-tb connect to postgres
docker network create --driver bridge temp_network
docker network connect temp_network postgres
# modify the network, url if needed
docker pull ghcr.io/5giotlead/tb-ce:3.8.1
docker run -it --network temp_network -e SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/thingsboard -v ./mytb-data:/data --rm ghcr.io/5giotlead/tb-ce:3.8.1 upgrade-tb.sh
# shutdown postgres, remove temp-nw
docker network disconnect temp_network postgres
docker compose down
docker network remove temp_network
docker compose rm -f mytb
```
**更新docker-compose.yml**
update image version
```diff
- image: "ghcr.io/5giotlead/tb-ce:3.8.0" # specified version
+ image: "ghcr.io/5giotlead/tb-ce:3.8.1" # specified version
```
**shell**
```
docker compose up -d
```
## Upgrade to tb-ce:3.9.0
**shell**
```shell
docker compose stop
# ensure upgrade from 381
echo "3.8.1" | sudo tee ./mytb-data/.upgradeversion > /dev/null
# start postgres
docker compose up -d postgres
```
[fix from #13074](https://github.com/thingsboard/thingsboard/issues/13074)
```
psql -h 127.0.0.1 -U thingsboard
```
```
UPDATE tb_schema_settings SET schema_version=3008000 WHERE schema_version=3006004;
exit;
```
**shell**
```shell
# temp-nw for upgrade-tb connect to postgres
docker network create --driver bridge temp_network
docker network connect temp_network postgres
# modify the network, url if needed
docker pull ghcr.io/5giotlead/tb-ce:3.9.0
docker run -it --network temp_network -e SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/thingsboard -v ./mytb-data:/data --rm ghcr.io/5giotlead/tb-ce:3.9.0 upgrade-tb.sh
# shutdown postgres, remove temp-nw
docker network disconnect temp_network postgres
docker compose down
docker network remove temp_network
docker compose rm -f mytb
```
**更新docker-compose.yml**
update image version
```diff
- image: "ghcr.io/5giotlead/tb-ce:3.8.1" # specified version
+ image: "ghcr.io/5giotlead/tb-ce:3.9.0" # specified version
```
**shell**
```
docker compose up -d
```
## Upgrade to tb-ce:3.9.1-spx
**shell**
```shell
docker compose stop
# ensure upgrade from 390
echo "3.9.0" | sudo tee ./mytb-data/.upgradeversion > /dev/null
# start postgres
docker compose up -d postgres
# temp-nw for upgrade-tb connect to postgres
docker network create --driver bridge temp_network
docker network connect temp_network postgres
# modify the network, url if needed
docker pull ghcr.io/5giotlead/tb-ce:3.9.1-spx
docker run -it --network temp_network -e SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/thingsboard -v ./mytb-data:/data --rm ghcr.io/5giotlead/tb-ce:3.9.1-spx upgrade-tb.sh
# shutdown postgres, remove temp-nw
docker network disconnect temp_network postgres
docker compose down
docker network remove temp_network
docker compose rm -f mytb
```
**更新docker-compose.yml**
update image version
```diff
- image: "ghcr.io/5giotlead/tb-ce:3.9.0" # specified version
+ image: "ghcr.io/5giotlead/tb-ce:3.9.1-spx" # specified version
```
**shell**
```
docker compose up -d
```
## Upgrade to tb-ce:4.0.0-spx
**shell**
```shell
docker compose stop
# ensure upgrade from 391
echo "3.9.1" | sudo tee ./mytb-data/.upgradeversion > /dev/null
# start postgres
docker compose up -d postgres
# temp-nw for upgrade-tb connect to postgres
docker network create --driver bridge temp_network
docker network connect temp_network postgres
# modify the network, url if needed
docker pull ghcr.io/5giotlead/tb-ce:4.0.0-spx
docker run -it --network temp_network -e SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/thingsboard -v ./mytb-data:/data --rm ghcr.io/5giotlead/tb-ce:4.0.0-spx upgrade-tb.sh
# shutdown postgres, remove temp-nw
docker network disconnect temp_network postgres
docker compose down
docker network remove temp_network
docker compose rm -f mytb
```
**更新docker-compose.yml**
update image version
```diff
- image: "ghcr.io/5giotlead/tb-ce:3.9.1-spx" # specified version
+ image: "ghcr.io/5giotlead/tb-ce:4.0.0-spx" # specified version
```
**shell**
```
docker compose up -d
```
## Upgrade to tb-ce:4.0.1-spx
**shell**
```shell
docker compose stop
# ensure upgrade from 400
echo "4.0.0" | sudo tee ./mytb-data/.upgradeversion > /dev/null
# start postgres
docker compose up -d postgres
# temp-nw for upgrade-tb connect to postgres
docker network create --driver bridge temp_network
docker network connect temp_network postgres
# modify the network, url if needed
docker pull ghcr.io/5giotlead/tb-ce:4.0.1-spx
docker run -it --network temp_network -e SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/thingsboard -v ./mytb-data:/data --rm ghcr.io/5giotlead/tb-ce:4.0.1-spx upgrade-tb.sh
# shutdown postgres, remove temp-nw
docker network disconnect temp_network postgres
docker compose down
docker network remove temp_network
docker compose rm -f mytb
```
**更新docker-compose.yml**
update image version
```diff
- image: "ghcr.io/5giotlead/tb-ce:4.0.0-spx" # specified version
+ image: "ghcr.io/5giotlead/tb-ce:4.0.1-spx" # specified version
```
**shell**
```
docker compose up -d
```