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.
Bình luận
Chưa có bình luận nào. Hãy là người đầu tiên.