<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Ubuntu 22.04 + Docker + Nginx Proxy Manager + Let’s Encrypt + ThingsBoard 구축 가이드]]></title><description><![CDATA[<p dir="auto">Ubuntu 22.04 + Docker + Nginx Proxy Manager + Let’s Encrypt + ThingsBoard 구축 가이드</p>
<ol>
<li>개요</li>
</ol>
<p dir="auto">본 문서는 다음 환경을 기준으로 ThingsBoard Community Edition(CE)을 구축하는 방법을 설명한다.</p>
<p dir="auto">구성도</p>
<p dir="auto">Internet<br />
│<br />
▼<br />
Nginx Proxy Manager<br />
│<br />
▼<br />
ThingsBoard (Docker)<br />
│<br />
├─ PostgreSQL<br />
└─ Redis</p>
<p dir="auto">사용 환경</p>
<ul>
<li>Ubuntu 22.04 LTS</li>
<li>Docker</li>
<li>Docker Compose</li>
<li>Nginx Proxy Manager(NPM)</li>
<li>Let’s Encrypt SSL</li>
<li>ThingsBoard CE</li>
<li>PostgreSQL</li>
<li>Redis</li>
</ul>
<p dir="auto">예제 도메인</p>
<p dir="auto"><a href="http://iot.example.com" rel="nofollow ugc">iot.example.com</a></p>
<p dir="auto">본인의 도메인으로 변경하여 사용한다.</p>
<p dir="auto">⸻</p>
<ol start="2">
<li>DNS 설정</li>
</ol>
<p dir="auto">도메인 관리 페이지에서 A 레코드를 추가한다.</p>
<p dir="auto">타입	호스트	값<br />
A	iot	서버 공인IP</p>
<p dir="auto">예시</p>
<p dir="auto"><a href="http://iot.example.com" rel="nofollow ugc">iot.example.com</a><br />
→ 123.123.123.123</p>
<p dir="auto">DNS 전파 확인</p>
<p dir="auto">nslookup <a href="http://iot.example.com" rel="nofollow ugc">iot.example.com</a></p>
<p dir="auto">또는</p>
<p dir="auto">dig <a href="http://iot.example.com" rel="nofollow ugc">iot.example.com</a></p>
<p dir="auto">⸻</p>
<ol start="3">
<li>Docker 설치</li>
</ol>
<p dir="auto">패키지 업데이트</p>
<p dir="auto">sudo apt update<br />
sudo apt upgrade -y</p>
<p dir="auto">Docker 설치</p>
<p dir="auto">curl -fsSL <a href="https://get.docker.com" rel="nofollow ugc">https://get.docker.com</a> | sudo sh</p>
<p dir="auto">Docker Compose 확인</p>
<p dir="auto">docker compose version</p>
<p dir="auto">현재 사용자 권한 추가</p>
<p dir="auto">sudo usermod -aG docker $USER</p>
<p dir="auto">재로그인 후 확인</p>
<p dir="auto">docker ps</p>
<p dir="auto">⸻</p>
<ol start="4">
<li>작업 폴더 생성</li>
</ol>
<p dir="auto">mkdir -p ~/thingsboard<br />
cd ~/thingsboard</p>
<p dir="auto">⸻</p>
<ol start="5">
<li>docker-compose.yml 작성</li>
</ol>
<p dir="auto">services:<br />
postgres:<br />
image: postgres:16<br />
container_name: tb-postgres<br />
restart: unless-stopped<br />
environment:<br />
POSTGRES_DB: thingsboard<br />
POSTGRES_USER: thingsboard<br />
POSTGRES_PASSWORD: tb_password<br />
volumes:<br />
- ./postgres:/var/lib/postgresql/data<br />
networks:<br />
- tb-net<br />
redis:<br />
image: redis:7<br />
container_name: tb-redis<br />
restart: unless-stopped<br />
command: redis-server --appendonly yes<br />
volumes:<br />
- ./redis:/data<br />
networks:<br />
- tb-net<br />
thingsboard:<br />
image: thingsboard/tb-postgres:latest<br />
container_name: thingsboard<br />
restart: unless-stopped<br />
depends_on:<br />
- postgres<br />
- redis<br />
environment:<br />
TB_QUEUE_TYPE: in-memory<br />
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/thingsboard<br />
SPRING_DATASOURCE_USERNAME: thingsboard<br />
SPRING_DATASOURCE_PASSWORD: tb_password<br />
REDIS_HOST: redis<br />
REDIS_PORT: 6379<br />
ports:<br />
- "1883:1883"<br />
- "5683:5683"<br />
- "8080:9090"<br />
volumes:<br />
- ./tb-data:/data<br />
- ./tb-logs:/var/log/thingsboard<br />
networks:<br />
- tb-net<br />
networks:<br />
tb-net:</p>
<p dir="auto">⸻</p>
<ol start="6">
<li>ThingsBoard 실행</li>
</ol>
<p dir="auto">docker compose up -d</p>
<p dir="auto">상태 확인</p>
<p dir="auto">docker ps</p>
<p dir="auto">⸻</p>
<ol start="7">
<li>ThingsBoard DB 초기화</li>
</ol>
<p dir="auto">최초 1회 실행</p>
<p dir="auto">docker exec -it thingsboard bash</p>
<p dir="auto">컨테이너 내부에서</p>
<p dir="auto">/usr/bin/install/install.sh</p>
<p dir="auto">설치 완료 후</p>
<p dir="auto">exit</p>
<p dir="auto">컨테이너 재시작</p>
<p dir="auto">docker restart thingsboard</p>
<p dir="auto">⸻</p>
<ol start="8">
<li>ThingsBoard 접속 확인</li>
</ol>
<p dir="auto">브라우저 접속</p>
<p dir="auto"><a href="http://xn--IP-v41jw5m:8080" rel="nofollow ugc">http://서버IP:8080</a></p>
<p dir="auto">초기 관리자 계정</p>
<p dir="auto">ID : <a href="mailto:sysadmin@thingsboard.org" rel="nofollow ugc">sysadmin@thingsboard.org</a><br />
PW : sysadmin</p>
<p dir="auto">최초 로그인 후 반드시 비밀번호를 변경한다.</p>
<p dir="auto">⸻</p>
<ol start="9">
<li>Nginx Proxy Manager 설정</li>
</ol>
<p dir="auto">NPM 관리자 페이지 접속</p>
<p dir="auto"><a href="http://xn--IP-v41jw5m:81" rel="nofollow ugc">http://서버IP:81</a></p>
<p dir="auto">기본 계정</p>
<p dir="auto"><a href="mailto:admin@example.com" rel="nofollow ugc">admin@example.com</a><br />
changeme</p>
<p dir="auto">⸻</p>
<ol start="10">
<li>Proxy Host 생성</li>
</ol>
<p dir="auto">NPM 메뉴</p>
<p dir="auto">Hosts<br />
→ Proxy Hosts<br />
→ Add Proxy Host</p>
<p dir="auto">Domain Names</p>
<p dir="auto"><a href="http://iot.example.com" rel="nofollow ugc">iot.example.com</a></p>
<p dir="auto">Scheme</p>
<p dir="auto">http</p>
<p dir="auto">Forward Hostname</p>
<p dir="auto">thingsboard</p>
<p dir="auto">또는</p>
<p dir="auto">서버IP</p>
<p dir="auto">Forward Port</p>
<p dir="auto">8080</p>
<p dir="auto">옵션 체크</p>
<p dir="auto">Websockets Support<br />
Block Common Exploits</p>
<p dir="auto">저장</p>
<p dir="auto">⸻</p>
<ol start="11">
<li>Let’s Encrypt SSL 설정</li>
</ol>
<p dir="auto">생성한 Proxy Host 편집</p>
<p dir="auto">SSL 탭 이동</p>
<p dir="auto">SSL Certificate</p>
<p dir="auto">Request a new SSL Certificate</p>
<p dir="auto">체크</p>
<p dir="auto">Force SSL<br />
HTTP/2 Support<br />
HSTS Enabled</p>
<p dir="auto">이메일 입력 후 저장</p>
<p dir="auto">예시</p>
<p dir="auto"><a href="mailto:admin@example.com" rel="nofollow ugc">admin@example.com</a></p>
<p dir="auto">정상 발급되면</p>
<p dir="auto"><a href="https://iot.example.com" rel="nofollow ugc">https://iot.example.com</a></p>
<p dir="auto">으로 접속 가능하다.</p>
<p dir="auto">⸻</p>
<ol start="12">
<li>MQTT 포트 개방</li>
</ol>
<p dir="auto">방화벽 허용</p>
<p dir="auto">sudo ufw allow 1883/tcp</p>
<p dir="auto">MQTT TLS 사용 시</p>
<p dir="auto">sudo ufw allow 8883/tcp</p>
<p dir="auto">⸻</p>
<ol start="13">
<li>ThingsBoard MQTT 테스트</li>
</ol>
<p dir="auto">Device 생성</p>
<p dir="auto">Devices<br />
→ Add Device</p>
<p dir="auto">Access Token 확인</p>
<p dir="auto">Device Details<br />
→ Copy Access Token</p>
<p dir="auto">예시</p>
<p dir="auto">abcd1234efgh5678</p>
<p dir="auto">⸻</p>
<p dir="auto">MQTT Publish 테스트</p>
<p dir="auto">설치</p>
<p dir="auto">sudo apt install mosquitto-clients -y</p>
<p dir="auto">전송</p>
<p dir="auto">mosquitto_pub <br />
-h <a href="http://iot.example.com" rel="nofollow ugc">iot.example.com</a> <br />
-p 1883 <br />
-t v1/devices/me/telemetry <br />
-u abcd1234efgh5678 <br />
-m '{"temperature":25}'</p>
<p dir="auto">ThingsBoard Dashboard에서 데이터 수신 확인 가능.</p>
<p dir="auto">⸻</p>
<ol start="14">
<li>백업</li>
</ol>
<p dir="auto">PostgreSQL 백업</p>
<p dir="auto">docker exec tb-postgres pg_dump <br />
-U thingsboard <br />
thingsboard \</p>
<blockquote>
<p dir="auto">backup.sql</p>
</blockquote>
<p dir="auto">복원</p>
<p dir="auto">cat backup.sql | docker exec -i tb-postgres <br />
psql -U thingsboard thingsboard</p>
<p dir="auto">⸻</p>
<ol start="15">
<li>업데이트</li>
</ol>
<p dir="auto">이미지 업데이트</p>
<p dir="auto">docker compose pull<br />
docker compose down<br />
docker compose up -d</p>
<p dir="auto">버전 확인</p>
<p dir="auto">docker logs thingsboard</p>
<p dir="auto">⸻</p>
<ol start="16">
<li>추천 운영 설정</li>
</ol>
<p dir="auto">자동 재시작</p>
<p dir="auto">이미 적용됨</p>
<p dir="auto">restart: unless-stopped</p>
<p dir="auto">로그 확인</p>
<p dir="auto">docker logs -f thingsboard</p>
<p dir="auto">리소스 확인</p>
<p dir="auto">docker stats</p>
<p dir="auto">데이터 백업 권장</p>
<p dir="auto">postgres/<br />
tb-data/<br />
tb-logs/</p>
<p dir="auto">정기적으로 백업한다.</p>
<p dir="auto">⸻</p>
<p dir="auto">완료</p>
<p dir="auto">최종 접속 주소</p>
<p dir="auto"><a href="https://iot.example.com" rel="nofollow ugc">https://iot.example.com</a></p>
<p dir="auto">기본 관리자 계정</p>
<p dir="auto"><a href="mailto:sysadmin@thingsboard.org" rel="nofollow ugc">sysadmin@thingsboard.org</a><br />
sysadmin</p>
<p dir="auto">이제 HTTPS가 적용된 ThingsBoard IoT 플랫폼을 운영할 수 있다.</p>
]]></description><link>http://bb.mirimonhub.com/topic/7/ubuntu-22.04-docker-nginx-proxy-manager-let-s-encrypt-thingsboard-구축-가이드</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Jul 2026 17:36:23 GMT</lastBuildDate><atom:link href="http://bb.mirimonhub.com/topic/7.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 18 Jun 2026 23:58:21 GMT</pubDate><ttl>60</ttl></channel></rss>