在阿里云服务器(ECS)上搭建 PostgreSQL 数据库,可分为 手动安装(推荐用于学习/定制化需求)和 使用阿里云 RDS PostgreSQL(推荐用于生产环境)两种方式。以下为你详细说明两种方案,并重点介绍手动部署的完整、安全、可维护流程(CentOS 7/8 或 Ubuntu 20.04+/22.04+)。
✅ 方案一:手动部署 PostgreSQL(适合开发/测试/可控环境)
🌐 前提条件
- 已购买并启动一台阿里云 ECS 实例(建议配置:2核4G+,系统盘 ≥ 40GB)
- 推荐操作系统:Ubuntu 22.04 LTS(本文以 Ubuntu 为例)或 CentOS 7/8(命令略有差异)
- 已配置安全组规则(开放
5432端口,仅允许可信 IP 访问,切勿全放行!) - 已通过 SSH 登录服务器(如
ssh -i your-key.pem ubuntu@your-eip)
🔧 步骤 1:更新系统 & 安装依赖
sudo apt update && sudo apt upgrade -y
sudo apt install -y wget curl gnupg2 lsb-release ca-certificates
📦 步骤 2:添加官方 PostgreSQL APT 仓库(推荐最新稳定版)
✅ 避免系统自带旧版本(如 Ubuntu 22.04 默认是 14.x),使用 PostgreSQL Global Development Group 官方源。
# 导入公钥
curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
# 添加仓库(以 Ubuntu 22.04 jammy 为例;其他版本请查官网)
echo "deb https://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
# 更新包索引
sudo apt update
🚀 步骤 3:安装 PostgreSQL(含客户端 + 服务端)
# 安装最新稳定版(如 15.x 或 16.x,当前截至2024年主流为 15/16)
sudo apt install -y postgresql-16 postgresql-client-16 postgresql-contrib-16
# ✅ 自动启动并启用开机自启
sudo systemctl enable postgresql
sudo systemctl start postgresql
💡 安装后自动创建系统用户
postgres,主数据目录通常为/var/lib/postgresql/16/main/
🔐 步骤 4:初始化与基础安全配置
a) 切换到 postgres 用户并访问 psql
sudo -u postgres psql
b) 修改默认密码(关键!)
-- 在 psql 中执行:
ALTER USER postgres PASSWORD 'YourStrongPass123!';
q
c) 配置远程访问(如需网络/其他服务器连接)
⚠️ 务必先确认安全组已限制 IP(如只放行你的办公 IP)!
编辑 postgresql.conf:
sudo nano /etc/postgresql/*/main/postgresql.conf
找到并修改:
# listen_addresses = 'localhost' ← 改为:
listen_addresses = 'localhost,172.???.???.???' # ✅ 建议仅监听内网IP(ECS内网地址),或指定公网IP
# 更安全做法:只写 'localhost',通过 SSH 隧道连接(见下方)
编辑 pg_hba.conf(客户端认证规则):
sudo nano /etc/postgresql/*/main/pg_hba.conf
在文件末尾添加(示例:允许特定IP通过密码登录):
# TYPE DATABASE USER ADDRESS METHOD
host all all 192.168.1.100/32 md5 # 允许某内网IP
host all all 203.208.60.10/32 md5 # 允许你的固定公网IP(强烈建议!)
# ❌ 禁止:host all all 0.0.0.0/0 md5 (绝对不要!)
✅ 保存后重载配置:
sudo systemctl reload postgresql
🌐 步骤 5:验证连接(本地 & 远程)
-
本地连接:
sudo -u postgres psql -U postgres -d postgres # 输入密码后应进入 psql 提示符 -
远程连接(从你本地电脑):
psql -h your-eip-or-domain -U postgres -d postgres -p 5432
🔒 生产建议:关闭公网直连,改用 SSH 隧道(更安全):
# 本地终端执行(保持隧道开启) ssh -L 5433:localhost:5432 -N -f -i your-key.pem ubuntu@your-eip # 然后本地连接:psql -h 127.0.0.1 -p 5433 -U postgres
🛠️ 步骤 6:(可选)创建专用数据库与用户
sudo -u postgres psql
CREATE DATABASE myapp;
CREATE USER myuser WITH PASSWORD 'SecurePass456!';
GRANT ALL PRIVILEGES ON DATABASE myapp TO myuser;
q
📦 步骤 7:安装常用扩展(如 pg_stat_statements 性能分析)
sudo apt install -y postgresql-16-contrib
sudo -u postgres psql -c "CREATE EXTENSION IF NOT EXISTS pg_stat_statements;"
☁️ 方案二:使用阿里云 RDS PostgreSQL(强烈推荐生产环境)
✅ 优势:高可用(主备自动切换)、自动备份/快照、监控告警、一键扩容、SQL审计、透明数据加密(TDE)、免运维
❌ 注意:按量付费/包年包月,成本略高于自建(但综合 TCO 更低)
快速开通步骤:
- 登录 阿里云控制台
- 进入 云数据库 RDS → 创建实例
- 选择地域、规格(如 2核8G)、存储类型(SSD 云盘)、网络(VPC + 交换机)
- 引擎选择:PostgreSQL,版本选 13/14/15/16(推荐 15 或 16)
- 设置:
- 数据库名称(如
postgres) - 账号名(如
admin)及强密码 - 安全组:绑定已有安全组,放行 5432 端口(同样建议限制源 IP)
- 数据库名称(如
- 创建成功后,在「数据库管理」中创建业务库和账号(RDS 控制台图形化操作)
📌 RDS 连接地址形如:
pgm-bp1xxx.postgres.rds.aliyuncs.com:5432
✅ 支持 SSL 加密连接(强烈开启)
🛡️ 安全加固建议(必做!)
| 项目 | 操作 |
|---|---|
| 🔐 密码策略 | 使用 12 位以上、大小写字母+数字+符号组合 |
| 🚫 关闭默认库访问 | REVOKE CONNECT ON DATABASE template1 FROM PUBLIC; |
| 📊 启用日志审计 | 修改 postgresql.conf:log_statement = 'mod'log_directory = 'pg_log'logging_collector = on |
| 🔄 定期备份 | 手动:pg_dump -U postgres -F c -b -v -f "/backup/mydb.dump" mydbRDS:自动备份 + 手动快照 |
| 🧹 清理旧日志 | sudo find /var/log/postgresql/ -name "*.log" -mtime +30 -delete |
📚 附:常用命令速查
| 功能 | 命令 |
|---|---|
| 查看状态 | sudo systemctl status postgresql |
| 重启服务 | sudo systemctl restart postgresql |
| 进入 psql | sudo -u postgres psql |
| 列出数据库 | l |
| 连接某库 | c database_name |
| 查看表 | dt |
| 退出 | q |
❓常见问题解答
-
Q:安装后无法远程连接?
A:检查① 安全组是否放行 5432 且限制了 IP;②postgresql.conf的listen_addresses;③pg_hba.conf是否有对应规则;④ 防火墙(sudo ufw status,如启用则sudo ufw allow 5432) -
Q:忘记 postgres 密码?
A:临时修改pg_hba.conf为trust→ 重载 →psql -U postgres→ALTER USER postgres PASSWORD 'xxx';→ 改回md5并重载。 -
Q:磁盘空间不足?
A:清理 WAL 日志(SELECT pg_switch_wal();)、归档日志、pg_stat_statements表,或扩容云盘 +resize2fs(Linux)。
需要我为你:
- ✅ 生成完整的 一键部署脚本(Ubuntu/CentOS)?
- ✅ 提供 RDS 连接示例(Python/Java/Node.js)?
- ✅ 配置 PgBouncer 连接池 或 Patroni 高可用集群?
- ✅ 输出 Ansible Playbook 自动化部署?
欢迎随时告诉我你的具体场景(如:个人博客、企业 SaaS、AI 应用后台),我可以为你定制优化方案 👇
云小栈