安裝 PostgreSQL 只需一條指令。大家容易出錯的是遠端存取:把 5432 埠向全世界開放,設個密碼,然後納悶記錄裡為什麼全是登入嘗試。本指南在 Ubuntu 24.04 上安裝 Postgres、建立資料庫,並演示兩種從外部安全連線的方法。
1. 安裝
apt update && apt install -y postgresql
systemctl status postgresql --no-pager
在 Ubuntu 24.04 上裝的是 PostgreSQL 16。它預設只監聽 localhost;沒有特別理由的話就保持這樣。
2. 建立使用者和資料庫
sudo -u postgres psql <<'SQL'
CREATE USER app WITH PASSWORD 'use-a-long-random-password';
CREATE DATABASE appdb OWNER app;
SQL
同一台伺服器上的應用使用 postgresql://app:PASSWORD@localhost:5432/appdb 連線。
3. 從您的筆電連線:SSH 通道(推薦)
無需開放任何埠,也無需在伺服器上做任何設定。通道會透過 SSH 轉發一個本機埠:
ssh -N -L 5433:localhost:5432 root@203.0.113.10
在 NAT 方案上,加上面板裡顯示的專屬 SSH 埠:
ssh -N -p 20123 -L 5433:localhost:5432 root@your-nat-host
通道開著的時候,把資料庫用戶端指向 localhost:5433。SSH 會加密所有流量,5432 埠對網際網路依然關閉。DBeaver 和 pgAdmin 等圖形工具都有一個做同樣事情的 「SSH 通道」 選項卡。
4. 讓另一台伺服器直連(白名單)
如果別處的某台應用伺服器必須直接連線,就只放行它的 IP。此時資料庫伺服器必須使用帶獨立 IP 的方案,因為 NAT 方案除了 SSH 外不接受對內連線。
在 /etc/postgresql/16/main/postgresql.conf 中:
listen_addresses = '*'
在 /etc/postgresql/16/main/pg_hba.conf 末尾:
hostssl appdb app 198.51.100.20/32 scram-sha-256
只為這一個位址開啟防火牆,然後重新啟動:
ufw allow from 198.51.100.20 to any port 5432 proto tcp
systemctl restart postgresql
hostssl 強制使用加密連線;Ubuntu 的套件自備自簽名憑證,所以用戶端應使用 sslmode=require 連線。
5. 合理的初始設定
對於 2 GB 記憶體的伺服器,在 postgresql.conf 中:
shared_buffers = 512MB
effective_cache_size = 1536MB
work_mem = 8MB
修改後重新啟動。這對大多數小應用來說已經足夠;等看到真實查詢後再細調。
6. 備份
每晚匯出一次,保留一週:
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 產生一個壓縮的匯出檔案,用 pg_restore 恢復。也把這些匯出檔案複製到伺服器之外;Managed Backups 還會為整台機器增加每日還原點。
評論
目前還沒有評論。歡迎成為第一位。