在腾讯云应用服务器(通常指 CVM 云服务器,运行 Linux 或 Windows 系统)上安装 PostgreSQL,最稳妥且符合生产环境规范的做法是使用官方源或包管理器安装,而不是直接下载二进制包手动编译(除非有特殊内核定制需求)。
以下是基于 CentOS/RHEL 和 Ubuntu/Debian 两大主流操作系统的标准安装流程。PostgreSQL 在国内云环境中非常常见,但需注意:务必从官方源安装,避免使用第三方非认证 RPM/DEB 包,以防安全漏洞。
一、前置准备
-
确认操作系统版本
cat /etc/os-release # 例如:CentOS 7, CentOS Stream 8/9, Ubuntu 20.04, Ubuntu 22.04 -
开放防火墙端口
PostgreSQL 默认监听5432端口。- 若使用腾讯云控制台:需在【安全组】中放行 TCP 5432 端口(仅建议开发测试环境对外暴露;生产环境建议通过内网访问或使用 VPC 内网通信)。
-
若使用本地防火墙:
# CentOS (firewalld) sudo firewall-cmd --permanent --add-port=5432/tcp sudo firewall-cmd --reload # Ubuntu (ufw) sudo ufw allow 5432/tcp
二、CentOS/RHEL 系统安装步骤
1. 添加 PostgreSQL 官方 YUM 仓库
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
注意:根据系统版本选择对应的 repo rpm。
- EL7 →
EL-7-x86_64- EL8/Stream8 →
EL-8-x86_64- EL9 →
EL-9-x86_64
2. 安装 PostgreSQL 服务端和客户端
# 安装指定版本(如 15),也可不写版本号获取最新稳定版
sudo yum install -y postgresql15-server postgresql15-contrib
3. 初始化数据库
# CentOS 7
sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
# CentOS 8/9
sudo /usr/lib/postgresql/15/bin/postgresql-15-setup initdb
4. 启动并设置开机自启
sudo systemctl enable postgresql-15
sudo systemctl start postgresql-15
sudo systemctl status postgresql-15
三、Ubuntu/Debian 系统安装步骤
1. 添加 PostgreSQL APT 仓库
# 安装依赖
sudo apt update
sudo apt install -y wget ca-certificates
# 导入密钥
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
# 添加仓库(以 Ubuntu 22.04 + PG 15 为例)
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
# 更新索引
sudo apt update
2. 安装 PostgreSQL
sudo apt install -y postgresql-15 postgresql-client-15
3. 启动服务
sudo systemctl enable postgresql
sudo systemctl start postgresql
sudo systemctl status postgresql
四、基础配置与安全加固(关键!)
1. 修改密码
PostgreSQL 默认创建 postgres 用户,无密码或随机密码。
# 切换到 postgres 用户
sudo su - postgres
# 进入 psql 命令行
psql
# 修改密码(替换为你的强密码)
ALTER USER postgres WITH PASSWORD 'YourStrongPassword123!';
# 退出
q
exit
2. 允许远程连接(谨慎操作)
编辑配置文件:
# CentOS: /var/lib/pgsql/15/data/postgresql.conf
# Ubuntu: /etc/postgresql/15/main/postgresql.conf
sudo vim /etc/postgresql/15/main/postgresql.conf # Ubuntu 路径示例
找到并修改:
listen_addresses = '*'
编辑 pg_hba.conf 控制访问权限:
sudo vim /etc/postgresql/15/main/pg_hba.conf
添加一行(允许特定 IP 段连接,切勿随意写 0.0.0.0/0):
host all all 10.0.0.0/8 scram-sha-256
说明:
10.0.0.0/8表示仅允许内网访问。若需公网访问,请替换为具体 IP 或 CIDR,并确保使用强密码+SSL。
重启服务生效:
sudo systemctl restart postgresql
五、替代方案:直接使用腾讯云 TDSQL-PG 或 RDS for PostgreSQL
如果你是在生产环境部署,强烈建议不要自行在 CVM 上管理 PostgreSQL。原因如下:
| 对比项 | 自建 CVM + PostgreSQL | 腾讯云 RDS/TDSQL-PG |
|---|---|---|
| 运维成本 | 高(备份、监控、升级、高可用均需自己搞) | 低(托管式,自动备份、监控、补丁) |
| 可用性 | 需自行搭建主从/ Patroni | 原生高可用架构,故障自动切换 |
| 安全性 | 需自行配置 SSL、审计、防攻击 | 内置 WAF、DDoS 防护、数据加密 |
| 性能优化 | 需调优参数 | 云厂商深度优化内核与存储 |
✅ 推荐做法:
- 开发测试环境:可在 CVM 上自建轻量级 PostgreSQL。
- 生产环境:优先使用 腾讯云 RDS for PostgreSQL 或 TDSQL PostgreSQL 版,通过内网连接,更安全、稳定、省心。
六、常见问题排查
-
无法连接数据库?
- 检查安全组是否放行 5432。
- 检查
pg_hba.conf是否允许对应 IP。 - 检查
postgresql.conf中listen_addresses是否为'*'。 - 检查防火墙状态:
sudo systemctl status firewalld或ufw status。
-
中文乱码?
- 初始化时指定编码:
initdb --locale zh_CN.UTF-8 -E UTF8 - 或在建库时指定:
CREATE DATABASE mydb ENCODING 'UTF8' LC_COLLATE 'zh_CN.UTF-8' LC_CTYPE 'zh_CN.UTF-8';
- 初始化时指定编码:
-
如何查看日志?
# CentOS journalctl -u postgresql-15 -f # Ubuntu tail -f /var/log/postgresql/postgresql-15-main.log
如需进一步协助(如配置主从复制、性能调优、迁移至云数据库),可提供具体场景继续提问。
CLOUD云枢