# CHƯƠNG IV: CẤU HÌNH VÀ MÔI TRƯỜNG VẬN HÀNH

Cấu hình tích hợp các công nghệ

# TRANG 1: Toàn tập cấu hình Deployment.toml

Tệp `deployment/deployment.toml` là file cấu hình duy nhất của WSO2 Micro Integrator. Mọi thông số từ Port, Memory đến Database đều được quản lý tại đây.

### 1.1. Cấu hình Server cơ bản

- **\[server\]:** Thiết lập `offset`. Nếu trong mạng có nhiều node WSO2, mỗi node cần có một offset khác nhau để tránh xung đột cổng.
- **\[management\_api\]:** Cấu hình User/Password để các công cụ bên ngoài (như VS Code hoặc MI Dashboard) có thể kết nối và quản lý.

### 1.2. Cấu hình Connection Pool (HikariCP)

Mặc định WSO2 MI sử dụng HikariCP để quản lý kết nối Database. Các tham số tối ưu cần lưu ý:

- `max_active`: Số lượng kết nối tối đa. Với LGSP, giá trị này nên đặt từ **30-50** tùy theo tải.
- `min_idle`: Duy trì ít nhất **5-10** kết nối chờ sẵn để tăng tốc độ phản hồi.

# TRANG 2: Quản lý Datasources và Kết nối Cơ sở dữ liệu

Dự án LGSP yêu cầu 3 nguồn dữ liệu chính được định nghĩa trong block `[[datasource]]`:

### 2.1. Nguồn dữ liệu ESB\_DB

Đây là nơi lưu trữ "trạng thái" của trục tích hợp.

- **Vai trò:** Quản lý bảng `job_schedule`, `sync_lock`, `api_logs`.
- **Driver:** Sử dụng `com.mysql.cj.jdbc.Driver` (MySQL 8+).
- **Lưu ý:** Datasource này phải trùng tên (`id = "ESB_DB"`) với khai báo trong các file `.dbs`.

### 2.2. Nguồn dữ liệu LGSP\_NOIBO

- **Vai trò:** Chứa các bảng danh mục đồng bộ về (Đơn vị hành chính, TTHC...).
- **Địa chỉ:** Thường nằm trên cụm DB chuyên dụng có tốc độ truy xuất cao.

### 2.3. Nguồn dữ liệu NIFI\_DB

- **Vai trò:** Phục vụ cho việc đẩy dữ liệu báo cáo sang hệ thống Apache Nifi.

# TRANG 3: Broker và Messaging Configuration (RabbitMQ/Kafka)

### 3.1. Cấu hình RabbitMQ (Transport)

Để sử dụng được mô hình "Store-and-Forward" (Gửi văn bản điện tử), bạn cần kích hoạt:

- **\[transport.rabbitmq.sender\]:** Cho phép WSO2 MI đẩy tin vào Queue.
- **\[transport.rabbitmq.listener\]:** Cho phép WSO2 MI lắng nghe và xử lý tin nhắn từ Queue.
- **Tham số:** Cần khai báo đúng IP/Port của RabbitMQ Server và Virtual Host (thường là `/`).

### 3.2. Cấu hình Kafka (Streaming)

Dùng cho việc đẩy Log Analytics:

- **bootstrap.servers:** Danh sách các Kafka Broker (IP:Port).
- **key.serializer/value.serializer:** Thường dùng `StringSerializer`.

# TRANG 4: Bảo mật, Keystores và Certificates

LGSP là hệ thống chính quyền, yêu cầu bảo mật HTTPS và mã hóa dữ liệu.

### 4.1. Quản lý Keystores

Nằm tại `repository/resources/security/`:

- **wso2carbon.jks:** Chứa chứng chỉ SSL của Server LGSP (Dùng cho HTTPS).
- **client-truststore.jks:** Chứa các Public Key của đối tác (NGSP, Cổng DVC Quốc gia) để WSO2 có thể gọi API HTTPS của họ mà không bị lỗi SSL.

### 4.2. Bảo mật mật khẩu (Secret Management)

Thay vì viết mật khẩu DB dạng Clear-text trong `deployment.toml`, ta nên dùng công cụ **Secure Vault** của WSO2 để mã hóa:

- Chạy lệnh `ciphertool.sh` để mã hóa mật khẩu.
- Sử dụng cú pháp `$secret{alias}` để gọi mật khẩu trong file cấu hình.