Hướng dẫn Docker Lab
Hướng dẫn này dựng lên docker-industrial-lab — một sandbox simulator OPC UA + MQTT
cục bộ đi kèm trong repository này — cạnh stack Xisom của bạn, để bạn có thể thực hành
adapter datasource MQTT và OPC UA từ đầu đến cuối mà không cần một mạng nhà máy thật.
Bạn sẽ dựng những gì
Phần tiêu đề “Bạn sẽ dựng những gì”- Simulator OPC UA (
lab-opcua) — một server đã bảo mật phơi bày các tag nhà máy, các setpoint có thể ghi (để kiểm thử ghi đầu ra của AIBOARD), và các tag mẫu để kiểm thử quy mô. - Broker MQTT (
lab-mosquitto, Eclipse Mosquitto) — bảo mật theo mặc định (TLS + username/password, hoặc mutual-TLS), có một profile dự phòng ẩn danh. - MQTT publisher + sniffer — mô phỏng một thiết bị publish dữ liệu nhà máy, và xác nhận sink đầu ra của AIBOARD thực sự ghi ra cái gì.
- Stack Xisom của bạn (suy luận + backend + frontend) — gắn vào mạng Docker của lab
qua overlay tùy chọn
docker-compose.lab.ymlở gốc repo, hoặc được truy cập qua host loopback mà không cần nó.
Các bước
Phần tiêu đề “Các bước”-
Bootstrap secret và khởi chạy lab. Stack được bảo mật theo mặc định; một script chạy một lần sinh ra một CA riêng, chứng chỉ client, và thông tin xác thực broker/OPC UA ở lần chạy đầu tiên:
Terminal window cd docker-industrial-lab./scripts/bootstrap-secrets.sh # or: make certsdocker compose up -d # or: make updocker compose ps # expect every service "healthy" within ~30s -
Chạy smoke test để xác nhận stack đã bảo mật từ đầu đến cuối:
Terminal window ./scripts/smoke-test.sh # or: make smoke -
Gắn stack Xisom của bạn vào mạng lab (từ gốc repo, lên một cấp):
Terminal window cd ..docker compose -f docker-compose.yml -f docker-compose.lab.yml up -dViệc này gắn service
backendvào mạng Dockerindustrial-labcủa lab để nó tới được các simulator qua container DNS (opcua,mosquitto) — không cần cổng host nào. Các URL host-loopback (host.docker.internal:...) cũng hoạt động mà không cần overlay này. -
Thêm các datasource trong dashboard Xisom — một đầu vào OPC UA tại
opc.tcp://opcua:4840/factory/line1(hoặchost.docker.internalnếu không dùng overlay), và/hoặc một đầu vào MQTT tạimqtt://mosquitto:8884(TLS + username/password). Thông tin xác thực nằm trongdocker-industrial-lab/.envđã được sinh ra.
Kiểm tra
Phần tiêu đề “Kiểm tra”docker compose ps(bên trongdocker-industrial-lab/) hiện mọi servicehealthy.- Trong dashboard Xisom, bật và Start datasource, rồi mở Inference Stats — bạn sẽ thấy thông lượng trực tiếp từ các tag mô phỏng.
- Xác nhận một lần ghi đầu ra của AIBOARD thực sự đi tới đâu:
docker logs lab-opcua | grep WRITEhoặcdocker logs lab-mqtt-sniffer.
Các knob env mẫu (kiểm thử tải/quy mô)
Phần tiêu đề “Các knob env mẫu (kiểm thử tải/quy mô)”(v1.28.0, chỉ dành cho lab — không ảnh hưởng đến runtime sản phẩm.) Cả hai simulator
đều phơi bày thêm các knob env trong docker-industrial-lab/.env để đẩy số lượng tag và
tốc độ cao hơn demo nhà máy mặc định, hữu ích để thực hành adapter của AIBOARD dưới tải:
| Biến env | Mặc định | Mục đích |
|---|---|---|
SAMPLE_TAG_COUNT | 100 | Các tag mẫu bổ sung trên cả hai giao thức — MQTT aiboard/sample_mqtt/topic_1..N, OPC UA ns=2;s=SampleOpcua_Tag_1..N. 0 để tắt. |
SAMPLE_RATE_HZ | chưa đặt (tốc độ cũ) | Tốc độ lấy mẫu toàn vòng lặp tính bằng Hz cho cả hai simulator, ví dụ 10/20/50. Ghi đè PUBLISH_INTERVAL (MQTT) và mặc định 1 Hz của OPC UA. |
SAMPLE_WALK_STEP | 4.0 | Kích thước bước Gaussian mỗi mẫu của random walk hồi quy về trung bình (lớn hơn = nhảy nhiều hơn). |
SAMPLE_WALK_CENTER | 50.0 | Giá trị mà walk hồi quy về. |
SAMPLE_WALK_REVERSION | 0.05 | Cường độ kéo về tâm, 0–1 (0 = random walk thuần túy). |
SAMPLE_MQTT_QOS | 0 | QoS chỉ cho các topic MQTT mẫu — kiểm thử adapter ở 0/1/2. Các topic nhà máy luôn giữ QoS 0. |
SAMPLE_MQTT_RETAIN | false | Cờ retain chỉ cho các topic MQTT mẫu. |
Dọn dẹp
Phần tiêu đề “Dọn dẹp”cd docker-industrial-labmake down # docker compose --profile secure --profile insecure --profile dashboard down -vViệc này xóa các container và volume nhưng giữ lại PKI đã sinh (certs/,
mosquitto/secrets/) để một lần up trong tương lai không cần bootstrap lại. Xoay vòng
thông tin xác thực bằng ./scripts/bootstrap-secrets.sh --force.
Nếu có gì đó trục trặc
Phần tiêu đề “Nếu có gì đó trục trặc”Các service không đạt healthy, hoặc không có lưu lượng trong dashboard — xem runbook
Khắc phục sự cố, và cụ thể là
Đầu vào MQTT dừng hoặc lỗi cho các nguyên nhân
phía broker.