−25%

Windows 年繳方案適用,至 10 月 31 日。 檢視方案

EQVPS
開始使用

如何在 VPS 上安裝 PostgreSQL 並安全連線

在 Ubuntu 上安裝 PostgreSQL 16,建立資料庫和使用者,並在不把 5432 埠暴露到網際網路的情況下遠端連線:透過 SSH 通道或白名單。

安裝 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 還會為整台機器增加每日還原點。

相關

常見問題

要把 5432 埠開放到網際網路嗎?

最好不要。暴露在外的資料庫埠會持續遭到掃描和暴力破解。請透過 SSH 通道連線;如果某台應用伺服器必須直連,就在 pg_hba.conf 和防火牆中都只放行它的 IP。

NAT 方案能用 PostgreSQL 嗎?

可以。同一台伺服器上的應用在本機連線,您則透過專屬 SSH 埠上的 SSH 通道,從筆電存取資料庫。NAT 方案做不到的是接受來自另一台伺服器、直接連到 5432 的對內連線。

PostgreSQL 需要多少記憶體?

它用幾百 MB 就能執行,給它多少就會拿多少當快取。常見的起點是把 shared_buffers 設為記憶體的 25% 左右。對小應用的資料庫來說,伺服器有 2 GB 記憶體就很寬裕了。

怎麼備份資料庫?

使用自訂格式的 pg_dump('pg_dump -Fc'),並透過 cron 定時執行。也要在伺服器之外儲存副本。Managed Backups 還會為整台伺服器增加每日還原點。

我會裝上哪個版本的 PostgreSQL?

Ubuntu 24.04 自備 PostgreSQL 16,Debian 12 自備 15。想要更新的大版本,就新增 PostgreSQL 官方 apt 源(apt.postgresql.org)。

評論

目前還沒有評論。歡迎成為第一位。

發表評論

評論在顯示前會經過審核。