在轻量服务器(如 VPS、云服务器)上部署 PostgreSQL 的完整步骤如下,涵盖从系统准备到安全配置的全过程:
一、系统准备
1. 更新系统包
# Debian/Ubuntu
sudo apt update && sudo apt upgrade -y
# CentOS/RHEL
sudo yum update -y
2. 安装 PostgreSQL
- Debian/Ubuntu:
sudo apt install postgresql postgresql-contrib -y - CentOS/RHEL(使用官方仓库):
sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install postgresql15-server postgresql15-contrib -y # 替换 15 为所需版本
3. 初始化数据库集群(仅 CentOS/RHEL 需要)
sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
4. 启动并设置开机自启
# Debian/Ubuntu
sudo systemctl enable --now postgresql
# CentOS/RHEL
sudo systemctl enable --now pgsql-15
二、基础配置
1. 修改监听地址与认证方式
编辑配置文件(路径因发行版而异):
- Debian/Ubuntu:
/etc/postgresql/<version>/main/postgresql.conf - CentOS/RHEL:
/var/lib/pgsql/15/data/postgresql.conf
# 允许远程连接
listen_addresses = '*'
# 端口(默认 5432)
port = 5432
2. 配置客户端认证
编辑 pg_hba.conf(同上路径):
# 示例:允许特定 IP 通过密码登录
host all all 192.168.1.0/24 md5
# 本地 Unix Socket 保留
local all postgres peer
⚠️ 生产环境建议限制 IP 范围,避免
0.0.0.0/0。
重启服务使配置生效:
sudo systemctl restart postgresql # 或 pgsql-15
三、创建用户与数据库
1. 切换到 postgres 用户
sudo -i -u postgres
2. 进入 psql 交互界面
psql
3. 创建用户和数据库(示例)
-- 创建新用户
CREATE USER myuser WITH PASSWORD 'StrongPassword123!';
-- 创建数据库并授权
CREATE DATABASE mydb OWNER myuser;
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
-- 退出
q
4. 设置超级用户密码(可选)
sudo passwd postgres # 设置 Linux 用户密码(用于 sudo 切换)
四、防火墙与安全加固
1. 开放端口(以 UFW 为例)
sudo ufw allow 5432/tcp
sudo ufw reload
2. 启用 SSL(推荐)
生成证书并配置 postgresql.conf:
ssl = on
ssl_cert_file = '/etc/ssl/certs/server.crt'
ssl_key_file = '/etc/ssl/private/server.key'
需先生成证书(可用 OpenSSL 或 Let’s Encrypt)。
3. 限制 root 登录
确保 pg_hba.conf 中无 root 相关规则,强制使用普通用户。
五、备份与监控
1. 定期备份脚本
#!/bin/bash
BACKUP_DIR="/backup/pg"
DATE=$(date +%Y%m%d_%H%M%S)
PGPASSWORD='StrongPassword123!' pg_dump -U myuser mydb > $BACKUP_DIR/mydb_$DATE.sql
find $BACKUP_DIR -mtime +7 -delete # 保留最近 7 天
添加至 crontab 定时执行。
2. 监控关键指标
- 使用
pg_stat_activity查看活跃连接 - 安装
pg_top或 Prometheus + Postgres Exporter 进行可视化监控
六、验证部署
- 本地测试连接:
psql -h localhost -U myuser -d mydb - 远程测试(从其他机器):
psql -h <服务器IP> -U myuser -d mydb -W
常见问题排查
| 问题 | 解决方案 |
|---|---|
| 无法远程连接 | 检查 listen_addresses、防火墙规则、pg_hba.conf |
| 权限拒绝 | 确认 pg_hba.conf 中的认证类型(md5/scram-sha-256) |
| 内存不足 | 调整 shared_buffers、work_mem(根据服务器 RAM 优化) |
💡 最佳实践:
- 使用非 root 用户运行应用
- 启用自动备份 + 异地存储
- 定期更新 PostgreSQL 版本
- 禁用不必要的扩展模块
通过以上步骤,即可在轻量服务器上安全、高效地部署 PostgreSQL 数据库。
PHPWP博客