加油
努力

如何在阿里云服务器上搭建PostgreSQL数据库?

在阿里云服务器(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 更低)

快速开通步骤:

  1. 登录 阿里云控制台
  2. 进入 云数据库 RDS创建实例
  3. 选择地域、规格(如 2核8G)、存储类型(SSD 云盘)、网络(VPC + 交换机)
  4. 引擎选择:PostgreSQL,版本选 13/14/15/16(推荐 15 或 16)
  5. 设置:
    • 数据库名称(如 postgres
    • 账号名(如 admin)及强密码
    • 安全组:绑定已有安全组,放行 5432 端口(同样建议限制源 IP)
  6. 创建成功后,在「数据库管理」中创建业务库和账号(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" mydb
RDS:自动备份 + 手动快照
🧹 清理旧日志 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.conflisten_addresses;③ pg_hba.conf 是否有对应规则;④ 防火墙(sudo ufw status,如启用则 sudo ufw allow 5432

  • Q:忘记 postgres 密码?
    A:临时修改 pg_hba.conftrust → 重载 → psql -U postgresALTER 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 应用后台),我可以为你定制优化方案 👇

云服务器