在阿里云 ECS 服务器上安装 PostgreSQL 有多种方式,具体取决于你的操作系统(CentOS、Ubuntu、Debian 等)以及你对版本控制和运维复杂度的要求。
以下是针对主流 Linux发行版的详细安装指南,以及推荐的最佳实践。
✅ 推荐方案:使用官方 YUM/APT 仓库安装
这种方式能确保你获得的是最新稳定版,并且可以通过包管理器轻松升级和管理服务。
1. CentOS / RHEL / Alibaba Cloud Linux
Alibaba Cloud Linux 基于 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
# 2. 禁用默认的 postgresql 模块(避免冲突)
sudo dnf module disable -y postgresql
# 3. 安装 PostgreSQL 服务端和客户端
# 将 15 替换为你需要的版本(如 14, 13, 12)
sudo yum install -y postgresql15-server postgresql15-contrib
# 4. 初始化数据库并启动服务
sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
sudo systemctl enable --now postgresql-15
# 5. 检查状态
systemctl status postgresql-15
2. Ubuntu / Debian
# 1. 导入 PostgreSQL 官方 GPG 密钥
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
# 2. 更新软件包列表
sudo apt update
# 3. 安装 PostgreSQL
# 将 15 替换为你需要的版本
sudo apt install -y postgresql-15
# 4. 启动并设置开机自启
sudo systemctl enable --now postgresql
sudo systemctl status postgresql
🔧 安装后基础配置
1. 修改默认用户密码
PostgreSQL 安装后会创建一个 postgres 系统用户和数据库超级用户。你需要为其设置密码:
# 切换到 postgres 用户
sudo su - postgres
# 进入 psql 命令行
psql
# 在 psql 中执行以下 SQL 命令(注意末尾分号)
ALTER USER postgres WITH PASSWORD 'your_strong_password';
# 退出 psql
q
# 退出 postgres 用户
exit
2. 允许远程连接(关键步骤!)
默认情况下,PostgreSQL 只允许本地连接。要允许阿里云其他服务器或本地电脑连接,需修改两个配置文件:
文件路径:
postgresql.confpg_hba.conf
💡 提示:不同发行版路径略有不同,可通过以下命令查找:
sudo find / -name "postgresql.conf" 2>/dev/null
① 修改 postgresql.conf
找到并取消注释/修改以下行:
listen_addresses = '*'
port = 5432
② 修改 pg_hba.conf
在文件末尾添加以下行,允许任意 IP 访问(生产环境建议限制特定 IP):
# TYPE DATABASE USER ADDRESS METHOD
host all all 0.0.0.0/0 md5
host all all ::0/0 md5
③ 重启服务使配置生效
# CentOS/RHEL
sudo systemctl restart postgresql-15
# Ubuntu/Debian
sudo systemctl restart postgresql
🌐 阿里云安全组配置(非常重要!)
即使防火墙和 PostgreSQL 都配置好了,如果阿里云控制台的安全组没有放行端口,外部依然无法连接。
- 登录 阿里云 ECS 控制台
- 找到你的实例 → 点击 安全组 → 配置规则
- 添加一条 入方向 规则:
- 协议类型:自定义 TCP
- 端口范围:
5432/5432 - 授权对象:
0.0.0.0/0(或指定你的公网 IP) - 优先级:1
🛡️ 生产环境最佳实践建议
| 项目 | 建议 |
|---|---|
| 备份 | 启用自动备份或使用 pg_dump 定期备份到 OSS |
| 监控 | 使用阿里云云监控或 Prometheus + Grafana 监控 CPU、内存、连接数 |
| 高可用 | 单节点 ECS 不适合生产核心业务,建议使用 阿里云 RDS PostgreSQL 或搭建主从复制 |
| 性能调优 | 根据 ECS 规格调整 shared_buffers, work_mem, max_connections 等参数 |
| SSL 加密 | 生产环境务必启用 SSL 连接,防止数据窃听 |
❓ 常见问题排查
-
连接被拒绝?
- 检查安全组是否放行 5432 端口。
- 检查
pg_hba.conf是否允许该 IP 连接。 - 检查
postgresql.conf中listen_addresses是否为*。
-
忘记密码?
- 以
postgres用户身份登录:sudo su - postgres→psql - 执行:
ALTER USER postgres WITH PASSWORD 'new_password';
- 以
-
如何创建新用户和数据库?
CREATE USER myuser WITH PASSWORD 'mypassword'; CREATE DATABASE mydb OWNER myuser; GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
💡 替代方案:直接使用阿里云 RDS PostgreSQL
如果你不是必须自建 PostgreSQL,强烈建议直接使用阿里云 RDS PostgreSQL:
- ✅ 免运维:自动备份、补丁升级、高可用架构
- ✅ 高性能:SSD 存储、弹性扩缩容
- ✅ 安全:VPC 内网隔离、白名单机制
- ✅ 成本:按需付费,无闲置资源浪费
除非你有特殊需求(如深度定制内核、学习目的、合规要求),否则 RDS 是更省心、更安全的选择。
云服务器