Lựa chọn phương thức triển khai PostgreSQL phù hợp
Dựng database server trên Fedora không đơn thuần là chạy lệnh install. Tùy vào nhu cầu về độ ổn định hay tính năng mới, mình thường cân nhắc ba hướng đi sau đây:
| Phương pháp | Ưu điểm | Nhược điểm |
|---|---|---|
| AppStream (Mặc định) | Độ ổn định cao, tương thích hoàn hảo với SELinux. | Phiên bản thường trễ hơn bản gốc khoảng 6 tháng đến 1 năm. |
| PGDG Repo (Chính chủ) | Cập nhật tức thì các bản vá và tính năng mới nhất. | Cần quản lý repo thủ công, dễ gây xung đột nếu không cấu hình đúng. |
| Podman (Container) | Cô lập tốt, chạy được nhiều phiên bản song song. | Hiệu suất I/O có thể giảm 3-5% do lớp network ảo hóa. |
Sau 2 năm vận hành Fedora cho các dự án thực tế, mình ưu tiên PGDG Repo. Cách này giúp bạn tiếp cận sớm các cải tiến về JSONB hay Logical Replication mà không phải chờ đợi lâu. Dưới đây là quy trình triển khai thực tế đảm bảo cả hiệu năng lẫn bảo mật.
Bước 1: Cài đặt từ Repository chính thức
Fedora đi kèm module PostgreSQL mặc định. Để tránh “râu ông nọ cắm cằm bà kia”, bạn cần vô hiệu hóa module này trước khi add repo từ trang chủ PostgreSQL.
# Chặn module mặc định để tránh xung đột
sudo dnf -qy module disable postgresql
# Thêm PGDG Repo cho Fedora
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/F-$(rpm -E %fedora)-x86_64/pgdg-fedora-repo-latest.noarch.rpm
# Cài đặt phiên bản 16 (ổn định nhất hiện tại)
sudo dnf install -y postgresql16-server postgresql16-contrib
Cài đặt xong, hãy khởi tạo database cluster. Lệnh này sẽ thiết lập cấu trúc thư mục và các file hệ thống cần thiết.
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
Bước 2: Thiết lập Firewalld – Chỉ mở cửa khi cần thiết
Fedora Server rất nghiêm ngặt trong việc quản lý port. Thay vì mở toang port 5432 cho toàn mạng, hãy chỉ cho phép các IP tin cậy (như App Server) truy cập.
# Cách an toàn: Chỉ cho phép IP 10.0.0.5 (ví dụ Web Server của bạn)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.5" port protocol="tcp" port="5432" accept'
# Nếu dùng trong mạng nội bộ tin cậy
sudo firewall-cmd --add-service=postgresql --permanent
sudo firewall-cmd --reload
Bước 3: Thu phục SELinux thay vì tắt bỏ
Nhiều quản trị viên chọn cách tắt SELinux để tránh lỗi Permission Denied. Đây là sai lầm nghiêm trọng về bảo mật. Nếu bạn đổi nơi lưu dữ liệu sang ổ cứng khác (ví dụ /mnt/data/postgres), SELinux sẽ chặn đứng service vì sai nhãn (label).
Hãy dùng các lệnh sau để gán lại nhãn đúng, giúp PostgreSQL hoạt động trơn tru mà vẫn an toàn:
# Gán nhãn bảo mật cho thư mục data mới
sudo semanage fcontext -a -t postgresql_db_t "/mnt/data/postgres(/.*)?"
sudo restorecon -Rv /mnt/data/postgres
Nếu ứng dụng cần gửi thông báo qua email hoặc kết nối ra ngoài, bạn cần bật thêm quyền này:
sudo setsebool -P postgresql_can_network_connect 1
Bước 4: Cấu hình truy cập từ xa an toàn
File cấu hình mặc định chỉ cho phép kết nối nội bộ. Bạn cần điều chỉnh để server lắng nghe các kết nối từ bên ngoài nhưng vẫn phải đảm bảo mã hóa.
1. Chỉnh sửa postgresql.conf
Đổi localhost thành dấu * để lắng nghe trên mọi card mạng:
listen_addresses = '*'
2. Cấu hình xác thực trong pg_hba.conf
Tuyệt đối không dùng trust hay password (bản rõ). Hãy dùng scram-sha-256 để bảo vệ thông tin đăng nhập.
# Cho phép dải IP nội bộ truy cập với mật khẩu mã hóa mạnh
host all all 10.0.0.0/24 scram-sha-256
Kích hoạt service để áp dụng thay đổi:
sudo systemctl enable --now postgresql-16
Kinh nghiệm tối ưu từ thực tế vận hành
Sau một thời gian quản trị, mình nhận thấy vài tinh chỉnh nhỏ có thể mang lại khác biệt lớn về hiệu suất:
- Tận dụng Huge Pages: Với server có RAM trên 16GB, hãy đặt
huge_pages = try. Việc này giúp giảm overhead quản lý bộ nhớ của CPU, tăng tốc độ truy vấn khoảng 10-15%. - Quản lý Log: PostgreSQL có thể tạo ra file log hàng chục GB nếu không kiểm soát. Hãy cấu hình
log_rotation_age = 1dvàlog_rotation_size = 100MBđể tránh đầy ổ cứng bất thình lình. - Xử lý sự cố: Nếu database không khởi động được, thay vì đoán mò, hãy chạy
journalctl -u postgresql-16hoặc kiểm tra log SELinux bằngausearch -m avc -ts recent.
Triển khai PostgreSQL trên Fedora đòi hỏi sự tỉ mỉ với SELinux và Firewalld. Tuy nhiên, khi đã cấu hình đúng, bạn sẽ có một hệ thống cực kỳ vững chắc, đủ sức gánh vác các ứng dụng production quan trọng.

