Khởi động và cấu hình dịch vụ PostgreSQL
Chúng ta cần đảm bảo dịch vụ PostgreSQL đã chạy và cấu hình file chính để hỗ trợ lưu trữ vector cho AI.
Khởi động dịch vụ PostgreSQL
Trên Ubuntu 24.04, PostgreSQL sử dụng systemd để quản lý dịch vụ. Chúng ta sẽ khởi động và enable dịch vụ để tự động chạy khi máy khởi động lại.
Thực hiện lệnh sau để khởi động dịch vụ và kiểm tra trạng thái:
sudo systemctl start postgresql
sudo systemctl enable postgresql
systemctl status postgresql
Kết quả mong đợi: Output hiển thị "active (running)" và "loaded". Nếu thấy "inactive (dead)", cần kiểm tra lại log bằng sudo journalctl -u postgresql.
Cấu hình file postgresql.conf
File cấu hình chính postgresql.conf kiểm soát các tham số toàn cục như memory, logging và listen address. Chúng ta cần điều chỉnh để server có thể nhận kết nối từ ứng dụng Python (LangChain) chạy trên cùng máy hoặc từ xa.
Đường dẫn file cấu hình trên Ubuntu 24.04 thường nằm tại /etc/postgresql/16/main/postgresql.conf (phiên bản 16 là mặc định cho Ubuntu 24.04 LTS).
Sửa file để uncomment và chỉnh sửa các dòng sau:
sudo nano /etc/postgresql/16/main/postgresql.conf
Tìm dòng listen_addresses và thay đổi thành:
listen_addresses = '*'
Tìm dòng max_connections và tăng lên nếu cần (mặc định 100, giữ nguyên hoặc tăng lên 200 cho môi trường dev):
max_connections = 200
Thêm hoặc chỉnh sửa dòng shared_buffers (nên đặt bằng 25% RAM vật lý, ví dụ 4GB RAM thì đặt 1GB):
shared_buffers = 1GB
Lưu file (Ctrl+O, Enter) và thoát (Ctrl+X). Sau đó restart dịch vụ để áp dụng:
sudo systemctl restart postgresql
Kết quả mong đợi: Dịch vụ restart thành công không lỗi.
Cấu hình file pg_hba.conf
File pg_hba.conf (PostgreSQL Host-Based Authentication) quyết định ai được kết nối, từ đâu và bằng phương pháp nào. Để ứng dụng AI (LangChain) chạy trên localhost có thể kết nối, ta cần cấu hình rõ ràng.
Đường dẫn file: /etc/postgresql/16/main/pg_hba.conf.
Chỉnh sửa file:
sudo nano /etc/postgresql/16/main/pg_hba.conf
Thêm các dòng sau vào cuối file (trước dòng local all all peer hoặc local all all md5):
# Kết nối từ localhost (IPv4) cho ứng dụng AI
host all all 127.0.0.1/32 md5
# Kết nối từ localhost (IPv6)
host all all ::1/128 md5
# Kết nối từ mạng nội bộ (nếu cần deploy container khác trong cùng host)
host all all 0.0.0.0/0 md5
Lưu ý: Phương thức md5 yêu cầu mật khẩu. Điều này an toàn hơn trust (không cần mật khẩu) cho môi trường production. Restart dịch vụ sau khi sửa:
sudo systemctl restart postgresql
Kết quả mong đợi: Dịch vụ accept kết nối từ IP đã cấu hình.
Cài đặt và khởi tạo extension pgvector
pgvector là extension mã nguồn mở cho phép PostgreSQL lưu trữ và tìm kiếm vector embeddings. Đây là thành phần cốt lõi để xây dựng RAG (Retrieval-Augmented Generation).
Cài đặt package pgvector
Trên Ubuntu 24.04, package này có sẵn trong repository mặc định. Chúng ta sẽ cài đặt nó qua apt.
Thực hiện lệnh:
sudo apt update
sudo apt install postgresql-16-pgvector
Kết quả mong đợi: Quá trình cài đặt thành công, không báo lỗi thiếu dependency.
Khởi tạo extension trong database
Chỉ cài package chưa đủ, chúng ta cần chạy lệnh SQL để tạo extension trong database cụ thể. PostgreSQL user mặc định là postgres.
Đầu tiên, switch sang user postgres:
sudo -i -u postgres
Truy cập vào shell của PostgreSQL (psql):
psql -U postgres
Trong prompt postgres=#, tạo extension pgvector. Lệnh này sẽ tạo các loại dữ liệu (vector) và các hàm hỗ trợ tìm kiếm cosine distance:
CREATE EXTENSION vector;
Kết quả mong đợi: Trả về CREATE EXTENSION. Nếu báo lỗi extension "vector" is not available, hãy kiểm tra lại bước cài đặt package hoặc restart lại service PostgreSQL.
Verify extension đã được tạo bằng lệnh:
\dx
Kết quả: Danh sách extensions hiển thị vector với version hiện tại.
Thoát khỏi psql:
\q
Thoát khỏi user postgres:
exit
Tạo database, user và cấp quyền truy cập
Để đảm bảo bảo mật, chúng ta không dùng user postgres (superuser) cho ứng dụng. Thay vào đó, tạo một database riêng và user riêng với quyền hạn vừa đủ.
Tạo Database và User
Chúng ta sẽ tạo một database tên ai_rag_db và một user tên ai_app_user với mật khẩu mạnh.
Switch sang user postgres để thực hiện thao tác quản trị:
sudo -i -u postgres
Truy cập psql:
psql -U postgres
Trong prompt postgres=#, thực hiện các lệnh SQL sau:
1. Tạo database mới:
CREATE DATABASE ai_rag_db;
2. Tạo user mới với mật khẩu (thay 'YourStrongPassword123!' bằng mật khẩu thực tế):
CREATE USER ai_app_user WITH PASSWORD 'YourStrongPassword123!';
3. Cấp quyền truy cập vào database cho user:
GRANT ALL PRIVILEGES ON DATABASE ai_rag_db TO ai_app_user;
Kết quả mong đợi: Mỗi lệnh trả về CREATE DATABASE hoặc CREATE ROLE hoặc GRANT.
Cấp quyền sử dụng extension pgvector
Quan trọng: User mới tạo mặc định không có quyền tạo extension. Ta cần cấp quyền này trong database cụ thể để ứng dụng có thể tạo schema vector.
Trong psql, chuyển sang database vừa tạo:
\c ai_rag_db
Cấp quyền CREATE trên schema public để user có thể tạo table và index vector:
GRANT ALL ON SCHEMA public TO ai_app_user;
Cấp quyền để user có thể sử dụng extension pgvector (thường cần quyền tạo extension trong database):
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO ai_app_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO ai_app_user;
Để chắc chắn user có thể chạy lệnh CREATE EXTENSION trong database này, ta cần cấp quyền CREATE trên database (đã làm ở trên) và đảm bảo extension đã tồn tại. Nếu cần, ta có thể tạo extension một lần nữa trong database này dưới quyền postgres (đã có sẵn từ bước trước) hoặc cấp quyền CREATEROLE (không khuyến khích) hoặc đơn giản là chạy lệnh tạo extension trong database này bằng quyền postgres:
Chạy lệnh tạo extension trong database ai_rag_db (nếu chưa có):
CREATE EXTENSION IF NOT EXISTS vector;
Cấp quyền truy cập vào các object do extension tạo (table, function, type) cho user ai_app_user:
GRANT ALL ON ALL TABLES IN SCHEMA public TO ai_app_user;
GRANT ALL ON ALL FUNCTIONS IN SCHEMA public TO ai_app_user;
GRANT ALL ON ALL TYPES IN SCHEMA public TO ai_app_user;
Kết quả mong đợi: Trả về GRANT cho từng dòng.
Thoát khỏi psql:
\q
Thoát khỏi user postgres:
exit
Verify kết quả kết nối
Bước cuối cùng là kiểm tra xem user mới tạo có thể kết nối vào database mới và truy cập được extension pgvector hay không.
Thử kết nối từ user ai_app_user vào database ai_rag_db:
psql -h 127.0.0.1 -U ai_app_user -d ai_rag_db
Hệ thống sẽ yêu cầu nhập mật khẩu (mật khẩu bạn đã đặt ở bước tạo user). Sau khi đăng nhập thành công, prompt sẽ hiển thị ai_rag_db=>.
Trong prompt, chạy lệnh kiểm tra extension:
\dx
Kết quả mong đợi: Danh sách hiển thị vector.
Thử tạo một bảng đơn giản có cột vector để xác nhận quyền hạn:
CREATE TABLE documents (
id SERIAL PRIMARY KEY,
content TEXT,
embedding vector(1536)
);
Kết quả: Trả về CREATE TABLE. Nếu thành công, hệ thống đã sẵn sàng cho bước tiếp theo: xây dựng môi trường Python LangChain.
Xóa bảng test (để giữ database sạch):
DROP TABLE documents;
Thoát:
\q
Điều hướng series:
Mục lục: Series: Triển khai Database AI với LangChain, PostgreSQL và Ubuntu 24.04
« Phần 1: Chuẩn bị môi trường Ubuntu 24.04 và cài đặt phần mềm cơ bản
Phần 3: Xây dựng môi trường phát triển LangChain với Python »