安装 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 还会为整台机器增加每日还原点。
评论
暂无评论。来做第一个吧。