# Biến môi trường

> Mọi biến môi trường mà operator có thể tinh chỉnh — file .env của bundle, backend, runtime suy luận và các nút chỉnh TLS.

Cấu hình đi vào stack ở hai mức: **file `.env` của bundle** (được Docker Compose
đọc trong một bản cài offline) và **các biến môi trường theo từng container** (được
chính các file compose đặt). Trang này liệt kê cả hai.

Trong một bản cài từ bundle, bạn thường chỉ chỉnh `compose/.env` — trình cài đặt
sinh nó từ `.env.template` và nó sống sót qua các cập nhật. Các biến theo container
đã được release compose đấu nối sẵn; chỉ ghi đè chúng bằng một file compose override
do chính bạn duy trì.

## `.env` của bundle (cài đặt release)

| Biến | Mặc định | Tác dụng |
|---|---|---|
| `AIBOARD_JWT_SECRET` | sinh lúc cài | Khóa ký JWT (≥ 32 byte). **Bắt buộc** — release compose từ chối khởi động nếu thiếu. |
| `AIBOARD_HTTP_PORT` | `80` | Cổng HTTP của bảng điều khiển. |
| `AIBOARD_ALT_PORT` | `3000` | Cổng bảng điều khiển phụ. |
| `AIBOARD_HTTPS_PORT` | `443` | Cổng HTTPS (chỉ với lớp phủ TLS). |
| `AIBOARD_TLS_ENABLED` | `0` | `1` = phục vụ HTTPS bằng chứng chỉ tự ký được sinh ra và chuyển hướng 80 → 443. |
| `AIBOARD_TLS_HOST` | — | Các IP/hostname phân tách bằng dấu cách/phẩy được nướng vào SAN của chứng chỉ. |
| `AIBOARD_TLS_DIR` | `<bundle>/tls` | Nơi `cert.pem` / `key.pem` nằm (đường dẫn tuyệt đối được ghi lúc cài). |
| `AIBOARD_CERTS_ENABLED` | `0` | `1` = mount các chứng chỉ client datasource do operator cấp. |
| `AIBOARD_CERTS_DIR` | `<bundle>/certs` | CA + chứng chỉ client cho MQTT / OPC UA có bảo mật, mount chỉ-đọc. |
| `AIBOARD_MODEL_SEED_DIR` | `<bundle>/models` | Thư mục mô hình seed (được `update.sh` trỏ lại). |
| `BACKEND_IMAGE` · `FRONTEND_IMAGE` · `INFERENCE_IMAGE` | từ manifest của bundle | Các tag image để chạy — do `install.sh` / `update.sh` quản lý; không chỉnh tay. |

## Container backend

| Biến | Mặc định (release) | Tác dụng |
|---|---|---|
| `ASPNETCORE_ENVIRONMENT` | `Production` | Chọn lớp phủ cấu hình. |
| `Grpc__InferenceService__Address` | `http://inference:50051` | Đích gRPC của runtime suy luận. |
| `Database__ConnectionString` | `Data Source=/data/aiboard.db` | Vị trí cơ sở dữ liệu SQLite (volume bền vững). |
| `AIBOARD_JWT_SECRET` | từ `.env` | Khóa ký JWT dự phòng; bắt buộc ngoài môi trường development. |
| `CORS_ORIGINS` | các origin dev localhost | Danh sách origin trình duyệt được phép, phân tách bằng dấu phẩy — ghi đè khi phục vụ UI từ một host không mặc định. |
| `AIBOARD_CERTS_ROOT` | `/certs` | Thư mục gốc jail cho đường dẫn chứng chỉ TLS của datasource (chặn đọc file tùy tiện). |
| `AIBOARD_CSV_ROOT` | `/data/csv` | Thư mục gốc jail cho đường dẫn file phát lại/xuất CSV. |

Tinh chỉnh backend sâu hơn (thời gian sống của token, giới hạn tốc độ, mức trần
xác thực mô hình, cửa sổ lưu giữ) nằm trong các key `appsettings`; bất kỳ key nào
cũng có thể ghi đè bằng quy ước gạch dưới đôi chuẩn của .NET, ví dụ
`Auth__Jwt__ExpiryHours=12` hoặc `LoginRateLimit__PermitLimit=10`.

| Key appsettings | Mặc định | Tác dụng |
|---|---|---|
| `Auth:Jwt:ExpiryHours` | `8` | Thời gian sống của token đăng nhập (không có refresh token). |
| `LoginRateLimit:*` | bật, 5 / 60 giây | Cổng chặn đăng nhập thất bại theo từng IP. |
| `ExternalApi:Enabled` + `ExternalApi:RateLimit:*` | bật, 100 / 60 giây | Bề mặt External API-key và giới hạn tốc độ của nó. |
| `ModelManagement:MaxVersionsToKeep` | `5` | Cắt tỉa phiên bản khi cleanup. |
| `ModelManagement:Validation:MaxModelSizeMb` | `500` | Mức trần kích thước upload. |
| `InferenceObservability:RetentionDays` | `3` | Lưu giữ audit-log suy luận (SQLite). |
| `LoggingService:Retention:MaxEntries` | `10000` | Mức trần kho LogViewer. |
| `Swagger:Enabled` | `true` | Swagger UI tại `http://<box>:5000/`. Đặt `false` để ẩn tài liệu API ở các site bị khóa chặt. |

## Container suy luận

| Biến | Mặc định | Tác dụng |
|---|---|---|
| `EXECUTION_MODE` | `auto` | `auto` (TensorRT → CUDA → CPU), `tensorrt`, `cuda`, hoặc `cpu`. |
| `STRICT_EP` | tắt | `1` = từ chối khởi động thay vì âm thầm tụt một chế độ GPU đã ghim xuống CPU. |
| `MODEL_PATH` | `/app/models/predictive_maintenance.onnx` | Mô hình seed nạp lúc khởi động (mount qua volume, không bao giờ nướng vào image). |
| `MODEL_STORAGE_PATH` | `/data/models` | Các phiên bản mô hình đã đăng ký (volume chung với backend). |
| `LOG_DIR` | `/data/logs` (release) | Bật file log điều tra xoay vòng mức Warning+; không đặt = chỉ console. |
| `USE_REAL_INFERENCE` | `true` | Phải giữ `true` — chế độ mock đã bị bỏ; nếu không dịch vụ sẽ hỏng ngay. |
| `INFERENCE_STUB` | `0` | Đường tắt debug trả về dự đoán bằng 0. **Không bao giờ bật ở production.** |
| `FORCE_CPU` | tắt | Bí danh legacy cho `EXECUTION_MODE=cpu`. |

Các bundle Jetson bổ sung ghim `OPENBLAS_CORETYPE` và chạy với `runtime: nvidia` —
xem [Triển khai trên Jetson](/vi/install-deploy/jetson-deployment/).

## Container frontend

| Biến | Mặc định | Tác dụng |
|---|---|---|
| `AIBOARD_TLS_ENABLED` | `0` | Bật entrypoint nginx nhận biết TLS (chứng chỉ mount từ `AIBOARD_TLS_DIR`). |

Các URL của API và hub được biên dịch vào frontend lúc build (cùng origin `/api` +
`/hub/realtime`) — không có gì để cấu hình ở thời điểm chạy.

## Bước tiếp theo

  - [Cài đặt từ gói offline](/vi/install-deploy/offline-bundle-install/) — File .env đến từ đâu và secret được sinh ra như thế nào.
  - [Kiến trúc hệ thống](/vi/architecture/) — Dịch vụ nào đọc thiết lập nào.
  - [Bảo mật](/vi/security/) — Danh sách kiểm tra tăng cường cho cổng và secret bị phơi bày.
