Skip to main content

· 7 min read
Tín Nguyễn

Đây là một dự án được sử dụng cho mục đích nghiên cứu iot sử dụng tunel của ngork

Bộ cấu hình Docker để chạy Blynk Server cùng với API endpoint và ngrok, cho phép ESP8266 kết nối đến Blynk Server thông qua TCP tunnel.

Repository: https://github.com/tinboy16/blynk-ngrok

1. Kiến trúc​

Hệ thống gồm các thành phần:

  • Blynk Server: chạy trong Docker.
  • API: Node.js, cung cấp endpoint /api/ để trả về địa chỉ TCP ngrok hiện tại cho ESP8266.
  • Nginx: gateway cho web và API.
  • ngrok-web: public web/API thông qua HTTPS.
  • ngrok-app: tunnel TCP cho cổng web/app của Blynk.
  • ngrok-esp: tunnel TCP cho ESP8266.

Luồng kết nối chính:

ESP8266
|
| HTTPS GET
v
ngrok-web
|
v
Nginx
|
v
API
|
| trả về host + port
v
ESP8266
|
| TCP Blynk
v
ngrok-esp
|
v
Blynk Server

2. Yêu cầu​

Cần cài:

  • Docker
  • Docker Compose
  • Git

Kiểm tra:

docker --version
docker compose version
git --version

3. Clone repository​

git clone https://github.com/tinboy16/blynk-ngrok.git
cd blynk-ngrok

4. Tạo file .env​

Không commit file .env lên GitHub.

Tạo file:

.env

Nội dung:

NGROK_AUTHTOKEN=YOUR_NGROK_AUTHTOKEN

Thay YOUR_NGROK_AUTHTOKEN bằng Auth Token của tài khoản ngrok.

5. Khởi động hệ thống​

Chạy:

docker compose up -d

Kiểm tra:

docker compose ps

Các container chính:

blynk
blynk-endpoint-api
blynk-gateway
blynk-web-ngrok
blynk-ngrok-app
blynk-ngrok-esp

Xem log:

docker compose logs -f

Hoặc xem riêng:

docker logs blynk
docker logs blynk-endpoint-api
docker logs blynk-gateway
docker logs blynk-web-ngrok
docker logs blynk-ngrok-app
docker logs blynk-ngrok-esp

6. Kiểm tra API​

API public có dạng:

https://YOUR_NGROK_DOMAIN/api/

Ví dụ:

https://exciting-painfully-kiwi.ngrok-free.app/api/

API trả về JSON tương tự:

{
"ok": true,
"app": {
"host": "0.tcp.ap.ngrok.io",
"port": 13268,
"public_url": "tcp://0.tcp.ap.ngrok.io:13268"
},
"esp": {
"host": "0.tcp.ap.ngrok.io",
"port": 25984,
"public_url": "tcp://0.tcp.ap.ngrok.io:25984"
}
}

ESP8266 sử dụng thông tin trong trường esp để kết nối Blynk.

7. Cấu hình ESP8266​

Trong code ESP8266 cần cấu hình WiFi, Blynk Auth và domain API:

const char* WIFI_SSID = "YOUR_WIFI_SSID";
const char* WIFI_PASS = "YOUR_WIFI_PASSWORD";

char BLYNK_AUTH[] = "YOUR_BLYNK_AUTH";

const char* API_HOST =
"YOUR_NGROK_DOMAIN";

const char* API_PATH =
"/api/";

const uint16_t API_PORT = 443;

8. Cách ESP8266 hoạt động​

ESP8266 thực hiện các bước:

  1. Kết nối WiFi.
  2. Resolve DNS của API domain.
  3. Kết nối HTTPS đến API.
  4. Gửi GET /api/.
  5. Đọc HTTP response.
  6. Xử lý response dạng chunked.
  7. Parse JSON bằng ArduinoJson.
  8. Lấy esp.host và esp.port.
  9. Dùng host và port nhận được để cấu hình Blynk.
  10. Kết nối đến Blynk Server.
  11. Nếu kết nối mất, ESP8266 lấy endpoint mới và kết nối lại.

Việc lấy endpoint động rất hữu ích khi TCP port của ngrok thay đổi.

9. API sử dụng HTTP Chunked​

API có thể trả response với:

Transfer-Encoding: chunked

ESP8266 cần đọc từng chunk trước khi parse JSON.

Không nên chỉ sử dụng:

client.readString();

để giả định toàn bộ response luôn có sẵn trong một lần đọc.

Code ESP8266 của dự án có phần xử lý:

HTTP status
HTTP headers
Transfer-Encoding: chunked
Content-Length
Connection: close
JSON parsing

10. Các cổng sử dụng​

Theo cấu hình Docker Compose:

Thành phầnPort
Blynk HTTP8080
Blynk HTTPS9443
API3000 nội bộ
Nginx80 nội bộ
ngrok webHTTPS public
ngrok appTCP public
ngrok ESPTCP public

Trong hệ thống hiện tại, ESP8266 sử dụng TCP tunnel trỏ vào Blynk Server port 8080.

Cấu hình ngrok tương ứng:

ngrok-esp:
image: ngrok/ngrok:latest
container_name: blynk-ngrok-esp
restart: unless-stopped

environment:
NGROK_AUTHTOKEN: "${NGROK_AUTHTOKEN}"

command:
- tcp
- blynk:8080
- --log=stdout

depends_on:
- blynk

Nếu thay đổi port Blynk, cần thay đổi cả server.properties, Docker Compose và endpoint mà ESP8266 sử dụng.

11. Kiểm tra tunnel ngrok​

Xem log:

docker logs blynk-ngrok-esp --tail 100

Khi tunnel hoạt động sẽ có dòng tương tự:

started tunnel
url=tcp://0.tcp.ap.ngrok.io:XXXXX

Port XXXXX có thể thay đổi khi tunnel được tạo lại.

Do đó ESP8266 không nên hard-code TCP port ngrok.

Thay vào đó, ESP8266 lấy endpoint từ:

/api/

12. Kiểm tra kết nối ESP8266​

Serial Monitor:

[WiFi] CONNECTED
[API] GET NGROK ENDPOINT
[HTTPS] TLS CONNECTED!
[JSON] PARSE SUCCESS
[JSON] ok = true
NEW BLYNK ENDPOINT
[Blynk] CONNECTING
[Blynk] CONNECTED!

Nếu API hoạt động nhưng Blynk không kết nối được, kiểm tra:

docker logs blynk-ngrok-esp --tail 100

Đặc biệt chú ý:

failed to open private leg
connection refused

Nếu xuất hiện lỗi này, ngrok đang chạy nhưng container Blynk không lắng nghe ở port mà ngrok đang trỏ tới.

13. Kiểm tra Blynk Server​

Kiểm tra container:

docker ps

Kiểm tra process:

docker exec blynk ps aux

Kiểm tra cấu hình:

docker exec blynk cat /data/config/server.properties

Ví dụ:

hardware.mqtt.port=8440
http.port=8080
https.port=9443

Lưu ý: hardware.mqtt.port, http.port và https.port là các cổng khác nhau. Không nên nhầm port MQTT với port HTTP/HTTPS.

14. Dữ liệu và backup​

data/
backup/

File cấu hình bí mật:

.env

Ví dụ:

.env
data/
backup/

15. Cấu trúc project​

Cấu trúc cơ bản:

blynk-ngrok/
├── api/
│ └── server.js
├── nginx/
│ └── default.conf
├── docker-compose.yaml
├── .env
├── .gitignore
├── data/
└── backup/

16. Dừng hệ thống​

docker compose down

Dừng và xóa container nhưng giữ dữ liệu trong volume bind mount:

docker compose down

Khởi động lại:

docker compose up -d

17. Cập nhật project​

Sau khi pull code mới:

git pull
docker compose up -d --build

Nếu image không cần build lại:

docker compose pull
docker compose up -d

18. Xem trạng thái​

docker compose ps

Xem toàn bộ log:

docker compose logs --tail 100

Theo dõi log realtime:

docker compose logs -f

19. Lưu ý bảo mật​

Không commit các thông tin sau:

.env
WiFi password
Blynk Auth Token
NGROK_AUTHTOKEN
private keys
database credentials
backup/
data/

Nếu đã lỡ commit token hoặc mật khẩu lên GitHub, cần thay token/mật khẩu đó ngay cả khi đã xóa file khỏi commit mới nhất.

20. Giấy phép​

Project này được cung cấp để phục vụ mục đích nghiên cứu, thử nghiệm và triển khai hệ thống Blynk Server cá nhân.

Kiểm tra giấy phép của các thành phần bên thứ ba trước khi sử dụng trong môi trường thương mại.

English​

Blynk Ngrok Gateway​

Docker setup for running a Blynk Server with an API endpoint, Nginx gateway and ngrok TCP/HTTP tunnels.

Main components​

  • Blynk Server
  • Node.js API
  • Nginx gateway
  • ngrok web tunnel
  • ngrok app TCP tunnel
  • ngrok ESP8266 TCP tunnel

Quick start​

Clone the repository:

git clone https://github.com/tinboy16/blynk-ngrok.git
cd blynk-ngrok

Create .env:

NGROK_AUTHTOKEN=YOUR_NGROK_AUTHTOKEN

Start the services:

docker compose up -d

Check:

docker compose ps

View logs:

docker compose logs -f

API​

The API endpoint is:

https://YOUR_NGROK_DOMAIN/api/

It returns the current public Blynk TCP endpoint for the ESP8266.

Example:

{
"ok": true,
"esp": {
"host": "0.tcp.ap.ngrok.io",
"port": 25984,
"public_url": "tcp://0.tcp.ap.ngrok.io:25984"
}
}

The ESP8266 reads this endpoint instead of hard-coding the ngrok TCP port.

ESP8266​

The ESP8266:

  1. Connects to WiFi.
  2. Requests /api/.
  3. Reads the HTTP response.
  4. Supports chunked transfer encoding.
  5. Parses the JSON response.
  6. Gets the current Blynk host and port.
  7. Connects to Blynk.
  8. Refreshes the endpoint when the connection is lost.

Security​

Do not commit:

.env
data/
backup/
WiFi passwords
Blynk authentication tokens
ngrok authentication tokens
private keys
database credentials

Repository​

https://github.com/tinboy16/blynk-ngrok

· One min read

Installing the Nubit Node

Requirement machine​

Light Node:

SPECRecommend
CPU2 Cores
RAM1 GB
Storage50 GB SSD
NETWORK100 Mbps
OSUbuntu 22.04
Port25565

Install Necessary Packages​


sudo apt update && sudo apt upgrade -y
sudo apt install curl git wget build-essential jq screen -y

Run a node Nubit​


screen -S nubit


curl -sL1 https://nubit.sh | bash

Ctrl + A + D to Detach screen nubit

If you try again run node (Optional)


wget https://nubit.sh/start.sh
chmod -R 777 ./start.sh

./start.sh

Backup your mnemonic wallet​


cat $HOME/nubit-node/mnemonic.txt

Congratulations on successfully setting up a Nubit Light Node, ready for the project’s Phase 2 testnet

· 2 min read
Tín Nguyễn

Thông Tin Cơ Bản​

  • Họ và Tên: Nguyễn Thương Tín
  • Ngày Sinh: 01/06/2002
  • Địa Chỉ: Thành phố Bảo Lộc, Tỉnh Lâm Đồng
  • Email: [email protected]
  • Số Điện Thoại: 0792413743

Giới Thiệu​

Xin chào! Tôi là Nguyễn Thương Tín, Sở thích thiết kế mạch điện tử. Trong thời gian rảnh rỗi, tôi thích nghe nhạc, đi dạo.

Học Vấn​

  • Trình Độ Học Vấn: Trung Học Phổ Thông
  • Ngành Học Chính: Sư Phạm Tin Học
  • Các Khóa Học Hoặc Chứng Chỉ Khác: Khóa học blockchain anyone

Kinh Nghiệm Làm Việc​

VNBnode​

  • Vị Trí: Admin, web developer
  • Thời Gian Làm Việc: Đang làm
  • Mô Tả Công Việc: Xây dựng quản lý website

Kỹ Năng​

  • Ngôn Ngữ Lập Trình: python, C++, C#, js
  • Kỹ Năng Kỹ Thuật: Linux, Server, Collaboration, Communication, NetWork, Arduino, Validator
  • Ngoại Ngữ: Tiếng Anh

Dự Án Cá Nhân​

  • Dự Án 1: Hệ thống tưới cây tự động
  • Dự Án 2: Hệ thống vườnnpm run ươm
  • Dự Án 3: WebSite Đội đặc nhiệm nhí

Liên Kết Xã Hội​

Nếu bạn quan tâm đến hợp tác hoặc muốn biết thêm về tôi, đừng ngần ngại liên hệ với tôi. Rất vui được làm quen với bạn!

· One min read
Tín Nguyễn
tip

Use the power of React to create interactive blog posts.

<button onClick={() => alert('button clicked!')}>Click me!</button>