核心四步:装对版本(YUM加官方源)、初始化数据目录、改postgresql.conf和pg_hba.conf两处配置、设密码并开放防火墙5432端口;缺一不可,否则远程连接失败。

在 Linux 上部署 PostgreSQL 并开放远程访问,核心就四件事:装对版本、初始化数据目录、改两处配置文件、设密码加防火墙。少一步都连不上,不是服务没起,是策略拦住了。
安装与初始化(以 CentOS/RHEL 8 为例)
用官方 YUM 源最稳,避免系统自带的老旧版本:
- 添加 PostgreSQL 官方仓库:
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm - 禁用系统默认模块,防止冲突:
sudo dnf -qy module disable postgresql - 安装服务端和扩展工具:
sudo dnf install -y postgresql16-server postgresql16-contrib - 初始化数据库目录(这步不能跳):
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb - 启用并启动服务:
sudo systemctl enable postgresql-16 && sudo systemctl start postgresql-16
允许远程监听(改 postgresql.conf)
默认只监听本地,必须显式放开网络接口:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 编辑主配置文件:
sudo vim /var/lib/pgsql/16/data/postgresql.conf - 找到 listen_addresses 行,取消注释并改为:
listen_addresses = 'localhost,192.168.1.100'(推荐写具体内网 IP)
或临时测试可用:
listen_addresses = '*'(监听所有 IPv4 地址) - 保存后 reload 配置(不中断连接):
sudo systemctl reload postgresql-16
配置客户端认证(改 pg_hba.conf)
光放开监听不够,pg_hba.conf 才真正决定“谁可以连、怎么连”:
- 追加一行允许局域网登录(例如 192.168.1.0/24 网段):
sudo tee -a /var/lib/pgsql/16/data/pg_hba.conf <<EOF
host all all 192.168.1.0/24 md5
EOF - 如需临时测试公网连通(仅限非生产环境):
host all all 0.0.0.0/0 md5 - 注意:规则按顺序匹配,新规则要加在已有 restrictive 规则之后;改完必须 reload:
sudo systemctl reload postgresql-16
设密码 + 开防火墙 + 验证
postgres 用户默认无数据库密码,远程登录必须设;系统防火墙也得放行端口:
- 切换用户并设置密码:
sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'YourStrongPass123';" - 开放 5432 端口(firewalld):
sudo firewall-cmd --add-port=5432/tcp --permanent && sudo firewall-cmd --reload - 验证监听是否生效:
sudo ss -tlnp | grep :5432 → 应看到 *:5432 或具体 IP:5432 - 从另一台机器测试连接:
psql -h 192.168.1.100 -U postgres -d postgres

















