努力
奋斗

阿里云服务器ecs安装postgresql?

服务器价格表

在阿里云 ECS 上装 PostgreSQL,别整那些虚的。直接上干货,分两种情况:你想省事用官方镜像/一键安装,或者你想自己编译/包管理安装以掌握控制权。

大多数生产环境或学习用途,推荐用 APT/YUM 源安装(Debian/Ubuntu 用 apt,CentOS/RHEL 用 yum/dnf),比从源码编译稳定得多,也省得调依赖。


第一步:选对操作系统镜像

去阿里云控制台创建实例时,系统镜像选带 PostgreSQL 预装的“软件镜像”,还是纯 Linux 发行版?

  • 新手/快速体验:选“软件镜像”里的 PostgreSQL 专用镜像。进去就能用,但定制性差。
  • 推荐/生产环境:选标准的 Ubuntu 20.04/22.04 或 CentOS 7/8。这样你能完全控制版本、配置和后续升级。

下面以 Ubuntu 22.04 + PostgreSQL 15 为例(CentOS 逻辑类似,命令换一下就行)。


第二步:安装 PostgreSQL

SSH 连进服务器,执行:

# 更新软件源
sudo apt update

# 安装 PostgreSQL 及其常用工具
sudo apt install postgresql postgresql-contrib -y

安装完成后,PostgreSQL 服务通常会自动启动。检查状态:

sudo systemctl status postgresql

如果没启动,手动起:

sudo systemctl start postgresql
sudo systemctl enable postgresql  # 设置开机自启

第三步:配置远程访问(关键!)

默认情况下,PostgreSQL 只监听 localhost,网络连不上。你需要改两个文件:

1. 修改 postgresql.conf 允许监听所有 IP

sudo nano /etc/postgresql/15/main/postgresql.conf

找到这一行:

#listen_addresses = 'localhost'

改成:

listen_addresses = '*'

注意:版本号可能不同,比如 14、16,看你的实际路径。

2. 修改 pg_hba.conf 允许特定 IP 或 CIDR 连接

sudo nano /etc/postgresql/15/main/pg_hba.conf

在文件末尾添加一行,允许某个网段或特定 IP 连接。例如,允许你本地的 IP 192.168.1.100 连接:

host    all             all             192.168.1.100/32            md5

如果你想让任何人能连(不推荐用于生产),可以用 0.0.0.0/0,但务必设强密码。

安全提示:不要用 trust,用 md5 或 scram-sha-256。


第四步:重启服务使配置生效

sudo systemctl restart postgresql

验证是否监听 5432 端口:

sudo netstat -tlnp | grep 5432
# 或者
ss -tlnp | grep 5432

应该看到 0.0.0.0:5432 或 [::]:5432。


第五步:阿里云安全组放行

这是最容易忽略的一步!即使你配好了 PG,阿里云防火墙也会拦着。

  1. 登录阿里云控制台 → ECS 实例 → 找到你的实例 → “更多” → “网络和安全组” → “安全组配置”。
  2. 点击你绑定的安全组 ID → “配置规则” → “入方向” → “手动添加”。
  3. 协议类型选 TCP,端口范围填 5432,授权对象填你的公网 IP(如 1.2.3.4/32)或整个互联网 0.0.0.0/0(不推荐)。
  4. 保存。

第六步:测试连接

在你本地电脑终端(Windows/Mac/Linux)执行:

psql -h <你的ECS公网IP> -U postgres -W

输入密码后如果能进入 postgres=# 提示符,说明搞定。

如果连不上,查日志:sudo tail -f /var/log/postgresql/postgresql-15-main.log,常见错误是权限被拒或地址不对。


常见问题 & 避坑指南

  1. 默认用户是 postgres,不是 root
    数据库里没有 root 用户。初始密码为空,但为了安全,建议立即设置密码:

    sudo -u postgres psql
    password postgres
  2. 防火墙冲突
    Ubuntu 可能有 ufw,CentOS 有 firewalld。确保它们也放行了 5432:

    # Ubuntu
    sudo ufw allow 5432/tcp
    
    # CentOS
    sudo firewall-cmd --permanent --add-port=5432/tcp
    sudo firewall-cmd --reload
  3. 性能优化(生产环境必做)
    默认配置适合开发,不适合高并发。修改 /etc/postgresql/15/main/postgresql.conf 中的关键参数:

    shared_buffers = 256MB          # 设为内存的 25% 左右
    effective_cache_size = 1GB      # 设为内存的 50-75%
    work_mem = 4MB                  # 每个查询操作可用的内存
    maintenance_work_mem = 64MB     # VACUUM 等维护操作可用内存
    max_connections = 100           # 根据业务调整,别开太大

    改完重启服务。

  4. 备份策略
    别指望云盘快照是唯一保障。用 pg_dump 定期导出 SQL 文件,存到 OSS 或其他地方:

    pg_dump -U postgres -h localhost mydb > backup.sql

总结

  • 装:apt install postgresql
  • 配:改 postgresql.conf 监听 *,改 pg_hba.conf 加白名单
  • 开:阿里云安全组放行 5432
  • 测:本地 psql -h <公网IP>

就这么简单。别折腾源码编译,除非你有特殊需求。生产环境记得加固密码、限制 IP、定期备份。