1. Yêu cầu hệ thống tối thiểu và kiểm tra phần cứng
Để triển khai Object Store dựa trên PostgreSQL, môi trường vật lý hoặc máy ảo cần đáp ứng các thông số sau để đảm bảo hiệu năng và độ ổn định.
CPU: Tối thiểu 4 cores. PostgreSQL xử lý tốt các tác vụ song song, Object Store cần nhiều luồng để xử lý request upload/download.
RAM: Tối thiểu 8 GB. PostgreSQL cần RAM để cache bộ nhớ (shared_buffers), Object Store cần RAM để buffer dữ liệu tạm thời.
Disk: Tối thiểu 100 GB SSD/NVMe. Tốc độ I/O là yếu tố sống còn. Không sử dụng HDD truyền thống cho data directory.
Hệ điều hành: Ubuntu 24.04 LTS (Noble Numbat).
Kiểm tra cấu hình hiện tại của server trước khi bắt đầu:
cat /proc/cpuinfo | grep processor | wc -l
Kết quả mong đợi: Số nguyên lớn hơn hoặc bằng 4.
free -h
Kết quả mong đợi: Dòng "total" của cột "Mem" lớn hơn hoặc bằng 8.0G.
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT
Kết quả mong đợi: Có ít nhất một phân vùng loại "disk" hoặc "part" với dung lượng >= 100G và loại "part" gắn vào "/" hoặc "/var/lib/postgresql".
2. Cài đặt và cập nhật Ubuntu 24.04 LTS
2.1. Cập nhật gói phần mềm và thư viện hệ thống
Cập nhật danh sách gói (package list) và nâng cấp toàn bộ hệ thống lên phiên bản mới nhất để tránh xung đột thư viện.
sudo apt update && sudo apt upgrade -y
Kết quả mong đợi: Quá trình chạy hoàn tất, không báo lỗi, thông báo "0 upgraded" hoặc liệt kê các gói đã nâng cấp.
Cài đặt các gói công cụ cần thiết cho việc quản lý server và build sau này.
sudo apt install -y build-essential curl wget git vim net-tools
Kết quả mong đợi: Các gói phần mềm được cài đặt thành công.
2.2. Cấu hình Firewall cơ bản
Khởi tạo UFW (Uncomplicated Firewall) và cấu hình mặc định chỉ cho phép kết nối từ trong ra ngoài, chặn tất cả kết nối từ ngoài vào trừ khi khai báo.
sudo ufw default deny incoming
Kết quả mong đợi: Default incoming policy changed to deny.
sudo ufw default allow outgoing
Kết quả mong đợi: Default outgoing policy changed to allow.
Kích hoạt SSH để không bị mất kết nối sau khi bật firewall.
sudo ufw allow OpenSSH
Kết quả mong đợi: Rule added.
Bật firewall và kiểm tra trạng thái.
sudo ufw enable
Kết quả mong đợi: Firewall is active.
sudo ufw status
Kết quả mong đợi: Status: active, thấy dòng "OpenSSH ALLOW".
3. Cài đặt PostgreSQL 16 qua Repository chính thức
3.1. Thêm repository của PostgreSQL
Ubuntu 24.04 mặc định chỉ có PostgreSQL 14 hoặc 15 trong kho chính. Để có PostgreSQL 16, cần thêm kho của đội ngũ PostgreSQL.
Đầu tiên, cài đặt gói để quản lý key và source list.
sudo apt install -y wget gnupg lsb-release
Kết quả mong đợi: Các gói cài đặt thành công.
Tải và thêm key GPG của PostgreSQL vào hệ thống.
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg
Kết quả mong đợi: Không có đầu ra lỗi, key được lưu vào thư mục trusted.gpg.d.
Thêm source list cho phiên bản 16 của Ubuntu Noble (24.04).
echo "deb http://apt.postgresql.org/pub/repos/apt noble-pgdg main" | sudo tee /etc/apt/sources.list.d/postgresql.list
Kết quả mong đợi: Nội dung source list được ghi vào file.
3.2. Cài đặt PostgreSQL 16 và các công cụ đi kèm
Cập nhật lại danh sách gói sau khi thêm source mới.
sudo apt update
Kết quả mong đợi: Dòng "Hit" hoặc "Get" từ kho apt.postgresql.org xuất hiện.
Cài đặt PostgreSQL 16, server, client, và các tiện ích cần thiết.
sudo apt install -y postgresql-16 postgresql-client-16 postgresql-contrib-16
Kết quả mong đợi: Quá trình cài đặt hoàn tất, không báo lỗi.
4. Cấu hình dịch vụ và khởi động tự động
4.1. Kiểm tra và khởi động service PostgreSQL
Sử dụng systemctl để khởi động dịch vụ PostgreSQL 16 ngay lập tức.
sudo systemctl start postgresql@16-main
Kết quả mong đợi: Không có lỗi, service bắt đầu chạy.
Cấu hình dịch vụ tự động khởi động khi máy chủ reboot.
sudo systemctl enable postgresql@16-main
Kết quả mong đợi: Thông báo "Created symlink ... -> /lib/systemd/system/postgresql@16-main.service".
Kiểm tra trạng thái hiện tại của service.
sudo systemctl status postgresql@16-main
Kết quả mong đợi: Dòng "Active: active (running)" màu xanh lá cây.
4.2. Cấu hình file pg_hba.conf để cho phép truy cập
Để Object Store (có thể chạy trên container hoặc service khác) kết nối vào PostgreSQL, cần cấu hình file xác thực. Mặc định PostgreSQL 16 trên Ubuntu thường chỉ cho phép kết nối qua socket Unix (local). Chúng ta cần mở thêm TCP/IP cho localhost (127.0.0.1) hoặc mạng nội bộ.
Chỉnh sửa file cấu hình xác thực tại đường dẫn đầy đủ sau:
sudo nano /etc/postgresql/16/main/pg_hba.conf
Tìm dòng có comment hoặc dòng mặc định cho IPv4 và sửa lại như sau (thêm vào cuối file hoặc sửa dòng tương ứng):
# IPv4 local connections:
host all all 127.0.0.1/32 scram-sha-256
# IPv4 local network (nếu cần cho container/mạng nội bộ):
host all all 0.0.0.0/0 scram-sha-256
Lưu ý: Dòng `0.0.0.0/0` cho phép kết nối từ mọi địa chỉ IP. Trong môi trường production, hãy thay thế bằng subnet cụ thể (ví dụ: `10.0.0.0/8`) để tăng bảo mật.
Lưu file (Ctrl+O, Enter) và thoát (Ctrl+X).
4.3. Cấu hình file postgresql.conf để lắng nghe kết nối
Để PostgreSQL nhận kết nối qua TCP/IP, cần sửa file cấu hình chính.
Chỉnh sửa file cấu hình tại đường dẫn đầy đủ:
sudo nano /etc/postgresql/16/main/postgresql.conf
Tìm tham số `listen_addresses` và thay đổi giá trị từ `'localhost'` thành `'*'`.
listen_addresses = '*'
Tìm tham số `port` để xác nhận cổng (mặc định là 5432, giữ nguyên trừ khi có yêu cầu khác).
port = 5432
Lưu file và thoát.
4.4. Khởi động lại dịch vụ để áp dụng cấu hình
Khởi động lại PostgreSQL để áp dụng các thay đổi trong pg_hba.conf và postgresql.conf.
sudo systemctl restart postgresql@16-main
Kết quả mong đợi: Service được restart thành công.
5. Verify kết quả cài đặt
5.1. Kiểm tra phiên bản PostgreSQL
Chạy lệnh để kiểm tra phiên bản server đang chạy.
sudo -u postgres psql --version
Kết quả mong đợi: `psql (PostgreSQL) 16.x.x` (với x là minor version).
Đăng nhập vào shell PostgreSQL và kiểm tra phiên bản từ bên trong.
sudo -u postgres psql -c "SELECT version();"
Kết quả mong đợi: Trả về dòng chứa "PostgreSQL 16.x.x on x86_64-pc-linux-gnu...".
5.2. Kiểm tra kết nối từ bên ngoài (TCP/IP)
Thử kết nối từ user postgres qua địa chỉ IP 127.0.0.1 để đảm bảo cấu hình `listen_addresses = '*'` và `pg_hba.conf` hoạt động đúng.
sudo -u postgres psql -h 127.0.0.1 -U postgres -c "SELECT 1 as test;"
Kết quả mong đợi: Hiện bảng với giá trị `test` là 1. Nếu hiện lỗi "FATAL: no pg_hba.conf entry..." thì cần kiểm tra lại bước 4.2.
5.3. Kiểm tra service tự động khởi động
Xác nhận lại service đã được enable.
systemctl is-enabled postgresql@16-main
Kết quả mong đợi: Trả về `enabled`.
Tổng kết trạng thái cuối cùng.
sudo systemctl status postgresql@16-main --no-pager
Kết quả mong đợi: `Active: active (running)` và `Loaded: loaded ... (enabled; preset: enabled)`.
Điều hướng series:
Mục lục: Series: Triển khai Database Object Store với PostgreSQL và Ubuntu 24.04
Phần 2: Cấu hình cơ sở dữ liệu PostgreSQL cho Object Store »