Cài đặt và chuẩn bị môi trường Ubuntu 24.04 LTS
Tải và cài đặt hệ điều hành
Tải file ISO chính thức Ubuntu 24.04 LTS từ trang chủ Canonical. Đảm bảo chọn bản "Desktop" hoặc "Server" tùy nhu cầu, tuy nhiên đối với môi trường Database AI, bản Server tiết kiệm tài nguyên hơn nhưng bản Desktop giúp thao tác trực quan hơn nếu không có SSH quen thuộc.
Sử dụng công cụ tạo USB Boot như Rufus (Windows) hoặc BalenaEtcher (macOS/Linux) để ghi ISO vào USB. Khởi động server, chọn "Try or Install Ubuntu", chọn ngôn ngữ và bàn phím, sau đó chọn "Install Ubuntu".
Trong bước phân vùng ổ cứng (Partitioning), chọn "Use entire disk" để tự động phân vùng. Nếu cần cấu hình nâng cao, chọn "Something else" để tạo riêng partition / và /home. Nhập thông tin user hệ thống (hostname, username, password).
Chờ quá trình cài đặt hoàn tất. Khi hệ thống yêu cầu restart, rút USB và nhấn Enter để khởi động lại vào Ubuntu mới.
Kết quả mong đợi: Màn hình đăng nhập Ubuntu hiện ra, bạn đăng nhập bằng tài khoản vừa tạo và thấy giao diện Terminal.
Cập nhật hệ thống và cài đặt công cụ cần thiết
Mở Terminal (Ctrl+Alt+T) và thực hiện lệnh cập nhật bảng danh sách gói phần mềm (package list) từ các repository mặc định. Bước này đảm bảo bạn cài đặt các phiên bản mới nhất của các thư viện nền tảng.
sudo apt update
Kết quả mong đợi: Terminal hiển thị dòng "Get: [url] [size]" và "Fetched [total size] in [time]", không có lỗi 404 hay connection failed.
Nâng cấp các gói phần mềm hiện có lên phiên bản mới nhất để vá lỗi bảo mật và cập nhật kernel. Quá trình này có thể yêu cầu xác nhận bằng cách gõ 'Y'.
sudo apt upgrade -y
Kết quả mong đợi: Hệ thống tải và cài đặt các bản vá, thông báo "0 upgraded, 0 newly installed, 0 to remove".
Cài đặt các công cụ hệ thống cần thiết cho môi trường DevOps và Database: vim (soạn thảo), curl (truy cập API), wget (tải file), build-essential (biên dịch), git (version control), và htop (giám sát tài nguyên).
sudo apt install -y vim curl wget build-essential git htop
Kết quả mong đợi: Các gói phần mềm được tải về và cài đặt thành công, không có thông báo lỗi dependency.
Cài đặt PostgreSQL 16 từ Repository Chính thức
Cấu hình Repository PostgreSQL
Ubuntu 24.04 mặc định có PostgreSQL 15 trong kho lưu trữ (archive). Để cài đặt PostgreSQL 16, chúng ta cần thêm repository chính thức của PostgreSQL Team vào hệ thống.
Đầu tiên, cài đặt gói `ca-certificates` để hệ thống có thể xác thực chứng chỉ SSL của repository PostgreSQL.
sudo apt install -y ca-certificates wget gnupg lsb-release
Kết quả mong đợi: Các công cụ quản lý chứng chỉ và mã hóa được cài đặt.
Tải public GPG key từ server chính thức của PostgreSQL để ký và xác minh tính toàn vẹn của các gói phần mềm sắp tải về.
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4C82.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg
Kết quả mong đợi: File key được lưu vào thư mục trusted.gpg.d, không có lỗi output.
Tạo file nguồn (source list) chỉ định repository cho PostgreSQL 16 tương thích với phiên bản Ubuntu 24.04 (code name "noble"). Lệnh này tạo file mới trong thư mục apt sources.
echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/postgresql.list
Kết quả mong đợi: Dòng cấu hình repository được ghi vào file `/etc/apt/sources.list.d/postgresql.list`.
Tải và cài đặt PostgreSQL 16
Cập nhật lại danh sách package list sau khi đã thêm repository mới để hệ thống nhận diện được các gói PostgreSQL 16.
sudo apt update
Kết quả mong đợi: Terminal hiển thị dòng "Get: http://apt.postgresql.org/pub/repos/apt noble-pgdg/main InRelease" và "Fetched [size] in [time]".
Cài đặt gói PostgreSQL 16. Các gói con sẽ được cài đặt tự động bao gồm: `postgresql-16` (core server), `postgresql-contrib-16` (các extension phổ biến), và `pgdg-sysadmin-tools-16` (công cụ quản trị).
sudo apt install -y postgresql-16 postgresql-contrib-16 pgdg-sysadmin-tools-16
Kết quả mong đợi: Quá trình cài đặt hoàn tất, hiển thị thông báo "Setting up postgresql-16 (16.x-1...)" và "Processing triggers for man-db".
Kiểm tra phiên bản PostgreSQL đã cài đặt để đảm bảo là 16.
psql --version
Kết quả mong đợi: Dòng output hiển thị "psql (PostgreSQL) 16.x", với x là phiên bản minor (ví dụ 16.2).
Cấu hình và Khởi động Dịch vụ PostgreSQL
Kích hoạt tự động khởi động (Enable) và chạy dịch vụ
Trên Ubuntu, PostgreSQL được quản lý bởi `systemd`. Chúng ta cần kích hoạt dịch vụ để nó tự động khởi động khi máy chủ bật lên (boot time).
sudo systemctl enable postgresql@16-main.service
Kết quả mong đợi: Dòng "Created symlink /etc/systemd/system/multi-user.target.wants/postgresql@16-main.service -> /lib/systemd/system/postgresql@16-main.service."
Khởi động ngay lập tức dịch vụ PostgreSQL 16 hiện tại.
sudo systemctl start postgresql@16-main.service
Kết quả mong đợi: Không có output lỗi, dịch vụ bắt đầu chạy.
Kiểm tra trạng thái dịch vụ để đảm bảo nó đang chạy (active) và không có lỗi (failed).
sudo systemctl status postgresql@16-main.service
Kết quả mong đợi: Dòng đầu tiên hiển thị màu xanh lá "● postgresql@16-main.service - PostgreSQL 16 database server" và trạng thái "active (running)".
Cấu hình kết nối mạng (Listening Address)
Mặc định, PostgreSQL chỉ lắng nghe kết nối từ localhost (127.0.0.1). Để ứng dụng Backend (Node.js/Python) hoặc các dịch vụ AI khác trong mạng nội bộ có thể kết nối, cần thay đổi tham số `listen_addresses`.
File cấu hình chính của PostgreSQL 16 nằm tại `/etc/postgresql/16/main/postgresql.conf`. Sử dụng `vim` để chỉnh sửa file này.
sudo vim /etc/postgresql/16/main/postgresql.conf
Tìm dòng `listen_addresses = 'localhost'` (thường có dấu `#` ở đầu, bị comment). Xóa dấu `#` và thay đổi giá trị thành `'*'` để lắng nghe trên tất cả các giao diện mạng, hoặc `'0.0.0.0'`.
Nội dung cần sửa trong file:
listen_addresses = '*'
Lưu file và thoát (trong vim: nhấn Esc, gõ `:wq`, nhấn Enter).
Kết quả mong đợi: File đã được lưu, tham số `listen_addresses` cho phép kết nối từ bên ngoài.
Cấu hình file `pg_hba.conf` để cho phép các user kết nối từ mạng nội bộ (LAN) hoặc internet. File này nằm tại `/etc/postgresql/16/main/pg_hba.conf`.
sudo vim /etc/postgresql/16/main/pg_hba.conf
Thêm dòng mới vào cuối file để cho phép kết nối qua TCP/IP (md5 hoặc scram-sha-256) từ mạng 10.0.0.0/8 (mạng nội bộ) hoặc 0.0.0.0/0 (tất cả - chỉ dùng khi cần thiết và có firewall bảo vệ).
Dòng cần thêm vào cuối file:
host all all 0.0.0.0/0 scram-sha-256
Lưu file và thoát.
Kết quả mong đợi: File `pg_hba.conf` đã cập nhật quy tắc truy cập mạng.
Khởi động lại dịch vụ PostgreSQL để áp dụng các thay đổi cấu hình vừa thực hiện.
sudo systemctl restart postgresql@16-main.service
Kiểm tra lại trạng thái để đảm bảo service không bị crash do cấu hình sai.
sudo systemctl status postgresql@16-main.service
Kết quả mong đợi: Dịch vụ vẫn hiển thị "active (running)", không có lỗi trong logs.
Tạo User Database và Quyền Truy cập
Tạo User mới và Database
Để quản lý Database AI, không nên dùng user mặc định `postgres` cho ứng dụng. Chúng ta sẽ tạo một user mới (ví dụ: `ai_user`) và một database riêng (ví dụ: `ai_db`).
Chuyển sang user `postgres` để thực thi lệnh SQL trong PostgreSQL.
sudo -u postgres psql
Kết quả mong đợi: Prompt thay đổi từ `$` sang `postgres@hostname:~#` hoặc `postgres=#`, cho thấy bạn đang trong môi trường shell của user postgres.
Tạo user mới với quyền tạo database. Lệnh này yêu cầu xác nhận password cho user `ai_user`.
CREATE USER ai_user WITH PASSWORD 'StrongPassword123!';
Kết quả mong đợi: Dòng "CREATE ROLE" hiện ra.
Tạo database mới tên `ai_db` và gán quyền sở hữu (ownership) cho user `ai_user` vừa tạo.
CREATE DATABASE ai_db OWNER ai_user;
Kết quả mong đợi: Dòng "CREATE DATABASE" hiện ra.
Cấp thêm quyền `SUPERUSER` nếu cần thiết (khuyên dùng: chỉ cấp quyền `CREATE DATABASE` và `CONNECT` cho ứng dụng, nhưng để setup nhanh cho series này, ta cấp quyền đầy đủ hơn).
ALTER USER ai_user WITH SUPERUSER;
Kết quả mong đợi: Dòng "ALTER ROLE" hiện ra.
Thoát khỏi shell của PostgreSQL.
\q
Kết quả mong đợi: Quay lại prompt terminal bình thường `$`.
Verify Kết quả cuối cùng
Thực hiện kiểm tra kết nối vào database `ai_db` bằng user `ai_user` để xác nhận mọi thứ đã hoạt động. Sử dụng lệnh `psql` với các tham số host, user, database và password.
PGPASSWORD='StrongPassword123!' psql -h 127.0.0.1 -U ai_user -d ai_db
Kết quả mong đợi: Prompt chuyển thành `ai_db=#`, chứng tỏ kết nối thành công.
Thực thi câu lệnh SQL đơn giản để kiểm tra khả năng ghi dữ liệu.
SELECT current_user, current_database();
Kết quả mong đợi: Bảng hiển thị 2 cột: `current_user` là `ai_user` và `current_database` là `ai_db`.
Thoát khỏi database.
\q
Trạng thái hệ thống đã sẵn sàng cho Phần 2: Cài đặt extension pgvector.
Điều hướng series:
Mục lục: Series: Triển khai Database AI với PostgreSQL, pgvector và Ubuntu 24.04
Phần 2: Cài đặt và cấu hình extension pgvector cho PostgreSQL »