如果你准备在 Debian 13 上部署博客、面板或者自建服务,PostgreSQL 通常会是一个比较稳妥的选择。
这篇文章走的是一条比较实用的主线:
- 安装 PostgreSQL
- 修改
postgres密码 - 新建业务数据库和用户
- 开启远程连接
- 配一条最基本的防火墙规则
我这次特地联网核实了一下 Debian 13 当前的官方包情况:trixie/stable 里的 postgresql 元包目前对应的是 postgresql-17,所以本文也统一按 PostgreSQL 17 来写。
适用场景 #
这篇教程适合下面这些情况:
- 你在 Debian 13 上新装 PostgreSQL
- 你希望从另一台机器远程连进数据库
- 你需要一个“够用、清楚、能直接照着做”的主线配置
如果你要做高可用、主从复制、备份策略、连接池或者更复杂的权限分层,这篇文章先不展开。
第一步:安装 PostgreSQL #
先更新软件源并安装数据库:
sudo apt update
sudo apt install -y postgresql postgresql-client
装完之后先检查服务状态:
systemctl status postgresql
pg_lsclusters
在 Debian 的 postgresql-common 体系下,安装完成后默认会创建一个名为 main 的集群,所以你通常会看到类似这样的信息:
- 版本:
17 - 集群名:
main - 端口:
5432
第二步:登录 PostgreSQL 并修改密码 #
先切到 postgres 系统用户进入 psql:
sudo -u postgres psql
然后修改 postgres 账号密码:
ALTER USER postgres WITH PASSWORD '请改成你的强密码';
执行完成后输入:
\q
就可以退出。
这里再补一句更实用的提醒:ALTER USER 这种方式可以直接用,但如果你担心命令历史里留下明文密码,也可以在 psql 里使用 \password postgres 交互式改密码。
第三步:新建业务数据库和用户 #
如果这台 PostgreSQL 不是只拿来临时测试,建议不要长期直接让业务程序使用 postgres 超级用户登录。
比较稳的做法是单独建一个业务用户和数据库:
sudo -u postgres psql
CREATE ROLE appuser WITH LOGIN PASSWORD '请改成你的业务密码';
CREATE DATABASE appdb OWNER appuser;
\du
\l
\q
这样后面你的程序就可以用:
- 用户:
appuser - 数据库:
appdb
来连接,而不是一直拿超级用户跑业务。
第四步:开启远程连接 #
Debian 13 上默认集群通常会放在:
/etc/postgresql/17/main/postgresql.conf/etc/postgresql/17/main/pg_hba.conf
先修改监听地址:
sudo nano /etc/postgresql/17/main/postgresql.conf
把:
#listen_addresses = 'localhost'
改成:
listen_addresses = '*'
然后修改客户端认证规则:
sudo nano /etc/postgresql/17/main/pg_hba.conf
如果你只是先测试远程访问,可以临时加入这一行:
host all all 0.0.0.0/0 scram-sha-256
如果你明确知道自己的客户端来源 IP 或网段,更推荐 写成更窄的范围,比如:
host all all 203.0.113.10/32 scram-sha-256
因为 0.0.0.0/0 表示允许所有 IPv4 地址来尝试连接,虽然仍然要过密码认证,但暴露面会更大。
如果你还需要 IPv6 远程连接,再补一行类似:
host all all ::/0 scram-sha-256
第五步:重启 PostgreSQL 使配置生效 #
改完配置后,重启服务:
sudo systemctl restart postgresql
然后检查一下端口监听状态:
ss -ltn | grep 5432
如果已经正常监听,通常就能看到 5432 对应的 TCP 端口处于监听状态。
第六步:放行防火墙端口 #
如果你的服务器已经启用了防火墙,那只改 PostgreSQL 配置还不够,端口也要放行。
如果你之前按博客里的 Debian 加固教程用了 nftables,可以补一条规则:
sudo nft add rule inet filter input tcp dport 5432 accept
sudo nft list ruleset
如果你不希望数据库对全网开放,更稳的方式是只对白名单 IP 放行,或者干脆不开放公网,改用内网、Tailscale 或 SSH 隧道来连接。
第七步:从客户端测试远程连接 #
在另一台机器上安装 PostgreSQL 客户端后,可以这样测试:
psql -h 你的服务器IP -U appuser -d appdb -W
如果你想直接测试 postgres 账号,也可以:
psql -h 你的服务器IP -U postgres -d postgres -W
连上之后可以简单执行:
SELECT version();
\conninfo
确认当前已经是远程连接进来的。
第八步:做一次收尾检查 #
完成之后,建议至少检查这些点:
systemctl status postgresqlpg_lsclustersss -ltn | grep 5432sudo -u postgres psql -c "\du"sudo -u postgres psql -c "\l"sudo nft list ruleset
如果你打算把数据库直接给业务程序用,还可以再确认:
- 业务用户是不是只对业务库有权限
- 远程放行范围是不是过宽
- 是否真的需要公网直连
常见问题 #
1. 改了 pg_hba.conf 还是连不上 #
优先检查:
postgresql.conf里的listen_addresses是否真的改了- PostgreSQL 服务是不是已经重启
- 防火墙是不是还拦着
5432
2. 服务正常,但远程连接超时 #
这通常更像是网络或防火墙问题,不一定就是 PostgreSQL 本身出了问题。
优先看:
- 云厂商安全组
- 本机防火墙
- 监听地址是否不是
localhost
3. 密码明明改了,却认证失败 #
这种情况常见于:
- 改错了用户
pg_hba.conf认证方式和客户端能力不匹配- 实际连接到的不是你以为的那个实例
4. 直接开放 0.0.0.0/0 安不安全 #
不推荐长期这么放。
更稳的顺序一般是:
- 先缩小到固定 IP / 固定网段
- 再配好强密码
- 最好再配防火墙白名单或内网访问
小结 #
如果你只是想在 Debian 13 上把 PostgreSQL 快速跑起来,同时允许远程连接,这条主线基本就够了:
- 安装 PostgreSQL 17
- 改
postgres密码 - 建业务用户和业务库
- 调整
listen_addresses - 配
pg_hba.conf - 放行
5432 - 客户端实测连接
等这套基础链路跑通后,后面再继续补:
- 自动备份
- 只读账号
- 连接池
- 数据目录和磁盘规划
- 复制与高可用