Mặc định PostgreSQL chỉ cho phép kết nối từ chính máy chủ (localhost). Khi triển khai ứng dụng Web, API, Docker hoặc cần quản lý cơ sở dữ liệu từ máy khác, bạn sẽ phải cấu hình PostgreSQL để cho phép kết nối từ xa (Remote Connection).
Trong bài viết này, chúng ta sẽ cấu hình PostgreSQL theo đúng quy trình gồm:
-
Cho phép PostgreSQL lắng nghe trên tất cả địa chỉ IP.
-
Cấu hình quyền truy cập bằng pg_hba.conf.
-
Mở cổng 5432 trên Firewall.
-
Khởi động lại dịch vụ PostgreSQL.
-
Kiểm tra kết nối từ máy khách.
Bước 1: Kiểm tra PostgreSQL đang hoạt động
Trước tiên hãy kiểm tra dịch vụ PostgreSQL.
Hoặc với PostgreSQL 16:
Kiểm tra cổng PostgreSQL đang lắng nghe:
Nếu PostgreSQL đang hoạt động, bạn sẽ thấy tiến trình đang sử dụng cổng 5432.
Bước 2: Cấu hình postgresql.conf
Tìm vị trí file cấu hình:
Ubuntu/Debian
Thông thường:
AlmaLinux/CentOS
Ví dụ:
Mở file:
Tìm dòng:
Thay bằng:
Hoặc:
Thiết lập này cho phép PostgreSQL lắng nghe kết nối từ mọi địa chỉ IP.
Bước 3: Cấu hình pg_hba.conf
File pg_hba.conf quyết định máy nào được phép kết nối đến PostgreSQL.
Tìm file:
Mở:
Thêm vào cuối file:
Cho phép tất cả địa chỉ IP:
Hoặc chỉ cho phép một máy cụ thể:
Hoặc cho phép toàn bộ mạng LAN:
Khuyến nghị: Không nên sử dụng 0.0.0.0/0 trên môi trường Production nếu không có Firewall hoặc VPN bảo vệ.
Bước 4: Khởi động lại PostgreSQL
Ubuntu/DebiaSpecial Containern
AlmaLinux/CentOS
Kiểm tra lại:
Nếu cấu hình đúng sẽ hiển thị:
Thay vì:
Bước 5: Mở Firewall
Ubuntu (UFW)
sudo ufw reload
Kiểm tra:
AlmaLinux/CentOS (Firewalld)
sudo firewall-cmd --reload
Kiểm tra:
Bước 6: Tạo User Và Cấp Quyền
Đăng nhập PostgreSQL:
Tạo User:
Cấp quyền cho Database:
Thoát:
\q
Bước 7: Kiểm Tra Kết Nối
Sử dụng lệnh:
Hoặc chuỗi kết nối:
Port=5432
Database=mailserver
Username=mailuser
Password=YourPassword
Nếu đăng nhập thành công nghĩa là PostgreSQL đã cho phép Remote Connection.
Kiểm Tra Khi Không Kết Nối Được
Kiểm tra PostgreSQL đang lắng nghe:
Kiểm tra Firewall:
Ubuntu:
AlmaLinux:
Kiểm tra cổng từ máy khách:
Nếu cổng mở nhưng vẫn không kết nối được, hãy kiểm tra:
-
Sai Username hoặc Password.
-
Sai địa chỉ IP trong pg_hba.conf.
-
Firewall của hệ điều hành hoặc Cloud Firewall.
-
PostgreSQL chưa khởi động lại sau khi chỉnh cấu hình.
Ví Dụ Cấu Hình Hoàn Chỉnh
postgresql.conf
port=5432
pg_hba.conf
local all postgres peer
local all all peer
host all all 127.0.0.1/32 scram-sha-256
host all all ::1/128 scram-sha-256
host all all 0.0.0.0/0 scram-sha-256
host all all ::/0 scram-sha-256
Chúc các bạn thành công