Viết một đoạn code mẫu sử dụng thư viện @elastic/elasticsearch trong Node.js để kết nối an toàn qua HTTPS bằng các file ca.crt và tài khoản xpack.
Để ứng dụng backend Node.js kết nối an toàn với Elasticsearch đang bật tính năng bảo mật X-Pack HTTPS, chúng ta sử dụng thư viện @elastic/elasticsearch. Quá trình này đòi hỏi phải đọc file ca.crt (chứng chỉ gốc) đã trích xuất trước đó để xác minh tính hợp lệ của kết nối.
Dưới đây là quy trình và đoạn code mẫu cấu hình đầy đủ bằng Node.js và ES Modules, sử dụng giao thức HTTPS và xác thực cơ bản (Basic Authentication).
1. Chuẩn bị môi trường
Cài đặt thư viện Elasticsearch chính thức từ Elastic:
npm install @elastic/elasticsearch
2. Khởi tạo Client Node.js
Tạo một file cấu hình (ví dụ: elastic-client.js) với nội dung kết nối chuẩn:
import { Client } from '@elastic/elasticsearch';
import fs from 'fs';
import path from 'path';
// Đọc nội dung file ca.crt bằng fs.readFileSync
// Đường dẫn này cần trỏ chính xác đến vị trí bạn lưu file ca.crt
const caCert = fs.readFileSync(path.join(process.cwd(), 'ca.crt'));
// Khởi tạo một thể hiện (instance) của Elasticsearch client
const client = new Client({
// 1. Chỉ định địa chỉ của Node với giao thức https://
node: 'https://localhost:9200',
// 2. Khai báo thông tin xác thực của tài khoản (X-Pack)
auth: {
username: 'elastic', // Hoặc một user có quyền tương ứng
password: 'mat_khau_cua_ban_day' // Thay bằng mật khẩu thật
},
// 3. Cấu hình bảo mật TLS (Transport Layer Security)
tls: {
ca: caCert, // Truyền nội dung chứng chỉ CA gốc
rejectUnauthorized: true // Bắt buộc xác thực danh tính chứng chỉ (Rất quan trọng cho Production)
}
});
// Hàm tiện ích để kiểm tra trạng thái kết nối
async function checkConnection() {
try {
// Gửi một request ping đơn giản
const pingResult = await client.ping();
console.log('✅ Kết nối Elasticsearch thành công:', pingResult);
// Lấy thông tin chi tiết của cluster để đảm bảo quyền hạn đang hoạt động
const info = await client.info();
console.log('📌 Thông tin Cluster:', info.cluster_name);
} catch (error) {
console.error('❌ Kết nối Elasticsearch thất bại:', error.message);
}
}
// Thực thi hàm kiểm tra
checkConnection();
export default client;
💡 Lưu ý thực tế khi triển khai Production
Trong các dự án Node.js thực tế (đặc biệt khi bạn triển khai trên nền tảng như Railway, Docker hoặc các hệ thống Cloud), thông tin xác thực (username, password, node_url) không bao giờ được viết trực tiếp vào code.
Hãy luôn sử dụng biến môi trường thông qua thư viện dotenv (ví dụ: process.env.ELASTIC_PASSWORD, process.env.ELASTIC_NODE) để bảo mật tuyệt đối cho hệ thống của bạn
All rights reserved