奋斗
努力

在云服务器上如何手动安装PostgreSQL数据库?

云计算

在云服务器上手动安装 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

🔒 安全建议

  1. 禁用默认管理员远程登录:仅允许本地或特定 IP 访问。
  2. 使用强密码。
  3. 定期更新 PostgreSQL。
  4. 启用日志记录:配置 log_statement、log_connections 等。
  5. 限制文件系统权限:确保 /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。

未经允许不得转载:云服务器 » 在云服务器上如何手动安装PostgreSQL数据库?