Cài đặt PostgreSQL 16 từ Repository chính thức
Ubuntu 24.04 mặc định thường chỉ cung cấp phiên bản PostgreSQL cũ qua repository chuẩn. Để sử dụng PostgreSQL 16, chúng ta cần thêm repository chính thức từ PostgreSQL Global Development Group.
Bước này giúp hệ thống nhận diện gói phần mềm mới nhất và đảm bảo tính tương thích với các tính năng tiên tiến.
Cài đặt công cụ mã hóa GPG và thêm khóa công khai của PostgreSQL vào hệ thống.
sudo apt update && sudo apt install -y wget gnupg lsb-release
Hệ thống sẽ cập nhật danh sách gói và cài đặt các công cụ phụ trợ cần thiết.
Thêm repository PostgreSQL 16 vào danh sách nguồn cài đặt của Ubuntu.
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4C82.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/postgresql.gpg > /dev/null
echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/postgresql.list
Repository đã được thêm vào file /etc/apt/sources.list.d/postgresql.list.
Cập nhật lại danh sách gói và cài đặt PostgreSQL 16 cùng các công cụ quản lý cần thiết.
sudo apt update
sudo apt install -y postgresql-16 postgresql-contrib-16 postgresql-client-16 pgadmin4
Quá trình cài đặt hoàn tất. Package postgresql-16 và các extension đã được nạp vào hệ thống.
Kiểm tra phiên bản đã cài đặt để xác nhận.
psql --version
Đầu ra hiển thị: psql (PostgreSQL) 16.x.
Cấu hình dịch vụ systemd và khởi động tự động
PostgreSQL 16 sử dụng systemd để quản lý dịch vụ trên Ubuntu 24.04. Mặc định dịch vụ đã được tạo nhưng cần đảm bảo nó chạy ngay lập tức và tự động khởi động khi server reboot.
Khởi động dịch vụ PostgreSQL và kích hoạt nó với chế độ auto-start.
sudo systemctl start postgresql
sudo systemctl enable postgresql
Dịch vụ PostgreSQL đã chạy và được cấu hình để tự động khởi động khi máy chủ bật lại.
Kiểm tra trạng thái hoạt động của dịch vụ để đảm bảo không có lỗi khởi động.
sudo systemctl status postgresql
Trạng thái hiển thị "active (running)" và thông tin "Loaded: enabled".
Tối ưu hóa hiệu năng với postgresql.conf
File cấu hình chính postgresql.conf chứa các tham số điều khiển bộ nhớ, kết nối và hiệu năng. Mặc định của PostgreSQL khá bảo thủ (conservative), chúng ta cần điều chỉnh cho phù hợp với tài nguyên RAM của server để xử lý tốt mô hình Multi-Tenant.
File cấu hình nằm tại /etc/postgresql/16/main/postgresql.conf. Trước khi chỉnh sửa, hãy sao lưu file gốc.
sudo cp /etc/postgresql/16/main/postgresql.conf /etc/postgresql/16/main/postgresql.conf.bak
File backup đã được tạo để phục hồi trong trường hợp cấu hình sai.
Sử dụng nano để mở file cấu hình và tìm các tham số cần sửa đổi.
sudo nano /etc/postgresql/16/main/postgresql.conf
Sửa các tham số sau trong file (giả sử server có 8GB RAM):
# Shared buffers: Tối ưu cho bộ nhớ đệm, khoảng 25% RAM nhưng không quá 24GB
shared_buffers = 2GB
# Max connections: Giới hạn số kết nối đồng thời, tăng từ 100 lên 200 cho Multi-Tenant
max_connections = 200
# Work mem: Bộ nhớ cho các thao tác sort/hash phức tạp
work_mem = 64MB
# Maintenance work mem: Bộ nhớ cho các lệnh như VACUUM, CREATE INDEX
maintenance_work_mem = 1GB
# Effective cache size: Ước tính bộ nhớ cache của OS
effective_cache_size = 6GB
# Checkpoint completion target: Giảm độ trễ khi ghi log
checkpoint_completion_target = 0.9
# WAL level: Cần thiết cho Replication và Backup
wal_level = replica
File đã được lưu với các tham số tối ưu. Lưu ý: Thay đổi shared_buffers và max_connections yêu cầu khởi động lại dịch vụ.
Khởi động lại dịch vụ PostgreSQL để áp dụng các thay đổi cấu hình.
sudo systemctl restart postgresql
Dịch vụ đã khởi động lại và áp dụng cấu hình mới.
Verify các tham số đã được áp dụng bằng lệnh psql.
sudo -u postgres psql -c "SHOW shared_buffers;"
sudo -u postgres psql -c "SHOW max_connections;"
Đầu ra hiển thị: 2GB và 200 tương ứng.
Cấu hình quyền truy cập an toàn với pg_hba.conf
File pg_hba.conf (Host-Based Authentication) quyết định ai có thể kết nối vào database, từ đâu và bằng phương pháp xác thực nào. Trong môi trường Multi-Tenant, việc này cực kỳ quan trọng để ngăn chặn truy cập trái phép.
File cấu hình nằm tại /etc/postgresql/16/main/pg_hba.conf. Sao lưu file trước khi chỉnh sửa.
sudo cp /etc/postgresql/16/main/pg_hba.conf /etc/postgresql/16/main/pg_hba.conf.bak
File backup đã được tạo.
Mở file cấu hình để chỉnh sửa các quy tắc kết nối.
sudo nano /etc/postgresql/16/main/pg_hba.conf
Thay thế các dòng mặc định (thường chỉ cho phép local socket) bằng cấu hình an toàn hơn. Cấu hình dưới đây cho phép:
- Local socket (localhost) dùng cho hệ thống và admin.
- Cho phép kết nối từ mạng nội bộ (10.0.0.0/8) bằng mật khẩu (md5/scram-sha-256).
- Chặn mọi kết nối từ bên ngoài trừ khi cấu hình cụ thể.
Nội dung file pg_hba.conf hoàn chỉnh (comment các dòng không dùng):
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all postgres peer
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 scram-sha-256
# IPv6 local connections:
host all all ::1/128 scram-sha-256
# Allow connections from internal network (replace with your specific subnet)
# Using scram-sha-256 for strong password hashing
host all all 10.0.0.0/8 scram-sha-256
# Deny all other external connections by default (implicit, but good to be explicit if needed)
# host all all 0.0.0.0/0 reject
File đã được lưu. Lưu ý: Thay đổi pg_hba.conf chỉ yêu cầu reload (tải lại), không cần restart dịch vụ.
Reload cấu hình PostgreSQL để áp dụng các quy tắc mới.
sudo systemctl reload postgresql
Dịch vụ đã reload cấu hình thành công.
Test kết nối từ localhost để đảm bảo cấu hình không bị khóa quyền truy cập cơ bản.
sudo -u postgres psql -c "SELECT 1;"
Đầu ra hiển thị: 1, xác nhận kết nối thành công.
Xác minh trạng thái cuối cùng và kiểm tra bảo mật
Để đảm bảo toàn bộ quy trình cài đặt và cấu hình đã hoàn tất chính xác, chúng ta cần thực hiện các bước kiểm tra tổng hợp về phiên bản, trạng thái dịch vụ và bảo mật mặc định.
Đăng nhập vào PostgreSQL bằng tài khoản postgres và kiểm tra phiên bản cũng như các thông số quan trọng.
sudo -u postgres psql -c "SELECT version();"
sudo -u postgres psql -c "SHOW listen_addresses;"
sudo -u postgres psql -c "SHOW port;"
Đầu ra hiển thị phiên bản PostgreSQL 16, listen_addresses (mặc định là 'localhost'), và port (mặc định là 5432).
Trong môi trường Multi-Tenant, chúng ta thường cần mở rộng listen_addresses để nhận kết nối từ các ứng dụng web khác trên cùng máy hoặc từ mạng LAN. Cấu hình listen_addresses trong postgresql.conf.
sudo nano /etc/postgresql/16/main/postgresql.conf
Thay đổi dòng listen_addresses từ 'localhost' thành '*' để lắng nghe trên tất cả các giao diện mạng.
listen_addresses = '*'
File đã được lưu. Lưu ý: Thay đổi listen_addresses yêu cầu restart dịch vụ.
Khởi động lại dịch vụ để áp dụng thay đổi về địa chỉ lắng nghe.
sudo systemctl restart postgresql
Dịch vụ đã khởi động lại.
Verify lại địa chỉ lắng nghe sau khi restart.
sudo -u postgres psql -c "SHOW listen_addresses;"
Đầu ra hiển thị: *, xác nhận server đang lắng nghe trên tất cả các giao diện.
Kiểm tra xem PostgreSQL có đang lắng nghe trên cổng 5432 của tất cả các giao diện IP hay không.
sudo ss -tlnp | grep postgres
Đầu ra hiển thị các dòng LISTEN với địa chỉ 0.0.0.0:5432 và ::1:5432, xác nhận dịch vụ đã sẵn sàng nhận kết nối từ xa.
Điều hướng series:
Mục lục: Series: Triển khai Database Multi-Tenant với PostgreSQL và Ubuntu 24.04
« Phần 1: Khởi động: Yêu cầu hệ thống và chuẩn bị môi trường Ubuntu 24.04
Phần 3: Kiến trúc Multi-Tenant: So sánh Schema riêng và Database riêng »