在云服务器上手动安装 PostgreSQL 数据库,通常指的是从源代码编译安装(即“源码安装”),而非使用包管理器(如 apt、yum)安装。这种方式适用于需要自定义配置、特定版本或无法使用预编译包的场景。
以下是 Ubuntu/Debian 和 CentOS/RHEL 系统上的完整手动安装步骤:
📌 前提条件
- 拥有服务器 root 权限或 sudo 权限
- 已安装基本开发工具链(GCC、make 等)
- 网络连接正常(用于下载源码)
✅ 第一步:安装依赖包
Ubuntu/Debian:
sudo apt update
sudo apt install -y build-essential libreadline-dev zlib1g-dev libssl-dev libxml2-dev libxslt1-dev libperl-dev python3 libpam0g-dev pkg-config
CentOS/RHEL:
sudo yum groupinstall "Development Tools"
sudo yum install -y readline-devel zlib-devel openssl-devel libxml2-devel libxslt-devel perl-devel pam-devel pkgconfig
注:不同 PostgreSQL 版本对依赖略有差异,可参考官方文档 PostgreSQL Source Code Dependencies
✅ 第二步:下载 PostgreSQL 源码
以 PostgreSQL 16.4 为例(请根据需求替换版本号):
cd /usr/local/src
wget https://ftp.postgresql.org/pub/source/v16.4/postgresql-16.4.tar.gz
tar -xzf postgresql-16.4.tar.gz
cd postgresql-16.4
✅ 第三步:配置、编译与安装
1. 创建专用用户(推荐)
出于安全考虑,不建议用 root 运行数据库:
sudo useradd -r -m -d /var/lib/pgsql -s /bin/bash postgres
sudo passwd postgres # 设置密码(可选)
2. 配置编译选项
./configure
--prefix=/usr/local/pgsql
--with-openssl
--with-pam
--with-libxml
--with-libxslt
--enable-thread-safety
--with-perl
--with-python
--with-tcl
--with-uuid=e2fs
--prefix指定安装路径,可根据需要修改。
3. 编译并安装
make -j$(nproc) # 使用多核提速编译
sudo make install
4. 设置环境变量
编辑 /etc/profile.d/pg.sh 或当前用户的 .bashrc:
export PATH=/usr/local/pgsql/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/pgsql/lib:$LD_LIBRARY_PATH
export PGDATA=/var/lib/pgsql/data
使生效:
source /etc/profile.d/pg.sh
# 或 source ~/.bashrc
✅ 第四步:初始化数据库集群
切换到 postgres 用户并初始化数据目录:
sudo su - postgres
initdb -D /var/lib/pgsql/data
如果目录不存在,需先创建:
sudo mkdir -p /var/lib/pgsql/data && sudo chown postgres:postgres /var/lib/pgsql/data
✅ 第五步:启动 PostgreSQL
方式一:直接启动(测试用)
pg_ctl -D /var/lib/pgsql/data -l logfile start
方式二:创建 systemd 服务(推荐生产环境)
创建服务文件 /etc/systemd/system/postgresql.service:
[Unit]
Description=PostgreSQL Database Server
After=network.target
[Service]
Type=forking
User=postgres
Group=postgres
ExecStart=/usr/local/pgsql/bin/pg_ctl -D /var/lib/pgsql/data -l /var/log/postgresql.log start
ExecStop=/usr/local/pgsql/bin/pg_ctl -D /var/lib/pgsql/data stop
Restart=on-failure
[Install]
WantedBy=multi-user.target
启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable postgresql
sudo systemctl start postgresql
检查状态:
sudo systemctl status postgresql
✅ 第六步:配置远程访问与安全
1. 修改 postgresql.conf
sudo nano /var/lib/pgsql/data/postgresql.conf
取消注释并修改:
listen_addresses = '*'
port = 5432
2. 修改 pg_hba.conf 允许远程连接
sudo nano /var/lib/pgsql/data/pg_hba.conf
添加以下行(示例:允许所有 IP 通过密码认证):
host all all 0.0.0.0/0 md5
⚠️ 生产环境建议限制 IP 范围,如
192.168.1.0/24
3. 重启服务
sudo systemctl restart postgresql
4. 设置 postgres 用户密码
sudo su - postgres
psql
ALTER USER postgres WITH PASSWORD 'your_strong_password';
q
exit
✅ 第七步:防火墙开放端口(如适用)
Ubuntu (UFW):
sudo ufw allow 5432/tcp
sudo ufw reload
CentOS (firewalld):
sudo firewall-cmd --permanent --add-port=5432/tcp
sudo firewall-cmd --reload
✅ 第八步:验证安装
psql -U postgres -h localhost -p 5432
输入密码后进入交互界面,执行:
SELECT version();
应输出类似:
PostgreSQL 16.4 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.4.0, 64-bit
🔒 安全建议
- 禁用默认管理员远程登录:仅允许本地或特定 IP 访问。
- 使用强密码。
- 定期更新 PostgreSQL。
- 启用日志记录:配置
log_statement、log_connections等。 - 限制文件系统权限:确保
/var/lib/pgsql/data仅 postgres 用户可访问。
📎 附录:常用命令速查
| 操作 | 命令 |
|---|---|
| 启动 | pg_ctl -D /var/lib/pgsql/data start |
| 停止 | pg_ctl -D /var/lib/pgsql/data stop |
| 重启 | pg_ctl -D /var/lib/pgsql/data restart |
| 查看状态 | pg_ctl -D /var/lib/pgsql/data status |
| 连接数据库 | psql -U postgres -h <IP> -p 5432 |
| 备份数据库 | pg_dump -U postgres dbname > backup.sql |
| 恢复数据库 | psql -U postgres dbname < backup.sql |
如需自动化部署,也可编写 Shell 脚本或使用 Ansible/Puppet 等配置管理工具。
如有特定需求(如集群、高可用、主从复制),可进一步配置 Patroni、Patroni + Etcd、或 Streaming Replication。
云服务器