−25%

cho Windows trả theo năm, đến 31/10. Xem các gói

EQVPS

Cách cài PostgreSQL trên VPS và kết nối an toàn

Cài PostgreSQL 16 trên Ubuntu, tạo cơ sở dữ liệu và người dùng, rồi kết nối từ xa mà không để lộ cổng 5432 ra internet: qua đường hầm SSH hoặc danh sách cho phép.

PostgreSQL cài bằng một lệnh. Chỗ mọi người hay sai là truy cập từ xa: họ mở cổng 5432 cho cả thế giới, đặt một mật khẩu rồi thắc mắc vì sao nhật ký đầy những lần thử đăng nhập. Hướng dẫn này cài Postgres trên Ubuntu 24.04, tạo một cơ sở dữ liệu và chỉ ra hai cách an toàn để kết nối từ bên ngoài.

1. Cài đặt

apt update && apt install -y postgresql
systemctl status postgresql --no-pager

Trên Ubuntu 24.04 đó là PostgreSQL 16. Theo mặc định nó chỉ lắng nghe trên localhost; hãy giữ nguyên trừ khi bạn có lý do.

2. Tạo người dùng và cơ sở dữ liệu

sudo -u postgres psql <<'SQL'
CREATE USER app WITH PASSWORD 'use-a-long-random-password';
CREATE DATABASE appdb OWNER app;
SQL

Ứng dụng trên cùng máy chủ kết nối bằng postgresql://app:PASSWORD@localhost:5432/appdb.

3. Kết nối từ máy tính của bạn: đường hầm SSH (khuyến nghị)

Không cần mở gì, không cần cấu hình gì trên máy chủ. Đường hầm chuyển tiếp một cổng cục bộ qua SSH:

ssh -N -L 5433:localhost:5432 root@203.0.113.10

Trên gói NAT, hãy thêm cổng SSH cá nhân từ panel:

ssh -N -p 20123 -L 5433:localhost:5432 root@your-nat-host

Khi đường hầm đang mở, hãy trỏ trình khách cơ sở dữ liệu tới localhost:5433. SSH mã hóa mọi thứ và cổng 5432 vẫn đóng với internet. Các công cụ đồ họa như DBeaver và pgAdmin có tab “đường hầm SSH” làm đúng việc này.

4. Truy cập trực tiếp cho máy chủ khác (danh sách cho phép)

Nếu một máy chủ ứng dụng ở nơi khác cần kết nối trực tiếp, hãy chỉ cho phép IP của nó. Khi đó máy chủ cơ sở dữ liệu phải dùng gói có IP riêng, vì gói NAT không nhận kết nối đi vào nào ngoài SSH.

Trong /etc/postgresql/16/main/postgresql.conf:

listen_addresses = '*'

Ở cuối /etc/postgresql/16/main/pg_hba.conf:

hostssl  appdb  app  198.51.100.20/32  scram-sha-256

Mở tường lửa cho đúng một địa chỉ đó rồi khởi động lại:

ufw allow from 198.51.100.20 to any port 5432 proto tcp
systemctl restart postgresql

hostssl bắt buộc kết nối được mã hóa; gói Ubuntu đi kèm chứng chỉ tự ký, nên trình khách phải kết nối với sslmode=require.

5. Thiết lập ban đầu hợp lý

Với máy chủ có 2 GB RAM, trong postgresql.conf:

shared_buffers = 512MB
effective_cache_size = 1536MB
work_mem = 8MB

Khởi động lại sau khi thay đổi. Như vậy đủ cho hầu hết ứng dụng nhỏ; hãy tinh chỉnh thêm khi bạn thấy các truy vấn thực tế.

6. Sao lưu

Một bản dump mỗi đêm, giữ trong một tuần:

mkdir -p /var/backups/pg && chown postgres /var/backups/pg
cat > /etc/cron.d/pg-backup <<'EOF'
30 3 * * * postgres pg_dump -Fc appdb > /var/backups/pg/appdb-$(date +\%u).dump
EOF

-Fc tạo bản dump nén, khôi phục bằng pg_restore. Hãy sao chép các bản dump ra ngoài máy chủ nữa; Managed Backups bổ sung các điểm khôi phục hằng ngày cho toàn bộ máy.

Liên quan

FAQ

Tôi có nên mở cổng 5432 ra internet không?

Tốt nhất là không. Các cổng cơ sở dữ liệu để lộ bị quét và tấn công dò mật khẩu liên tục. Hãy kết nối qua đường hầm SSH, hoặc nếu máy chủ ứng dụng cần kết nối trực tiếp, chỉ cho phép IP của nó trong cả pg_hba.conf lẫn tường lửa.

Tôi có thể dùng PostgreSQL trên gói NAT không?

Có. Ứng dụng trên cùng máy chủ kết nối cục bộ, còn bạn truy cập cơ sở dữ liệu từ máy tính qua đường hầm SSH trên cổng SSH cá nhân. Điều gói NAT không làm được là nhận kết nối trực tiếp đi vào cổng 5432 từ một máy chủ khác.

PostgreSQL cần bao nhiêu RAM?

Nó chạy được với vài trăm megabyte và dùng mọi thứ bạn cấp làm bộ đệm. Điểm khởi đầu phổ biến là đặt shared_buffers khoảng 25% RAM. Với cơ sở dữ liệu của một ứng dụng nhỏ, 2 GB RAM trên máy chủ là rất thoải mái.

Làm sao sao lưu cơ sở dữ liệu?

Dùng pg_dump với định dạng tùy chỉnh ('pg_dump -Fc') và chạy nó bằng cron. Giữ cả bản sao bên ngoài máy chủ. Managed Backups bổ sung các điểm khôi phục hằng ngày cho toàn bộ máy chủ.

Tôi sẽ có phiên bản PostgreSQL nào?

Ubuntu 24.04 đi kèm PostgreSQL 16 và Debian 12 đi kèm bản 15. Để có phiên bản lớn mới hơn, hãy thêm kho apt chính thức của PostgreSQL (apt.postgresql.org).

Bình luận

Chưa có bình luận nào. Hãy là người đầu tiên.

Để lại bình luận

Bình luận được kiểm duyệt trước khi hiển thị.