首先更新系统包列表并安装PostgreSQL及其附加组件(postgresql-contrib包含额外工具和模块):
sudo apt update
sudo apt install postgresql postgresql-contrib
安装完成后,PostgreSQL服务会自动启动,可通过sudo systemctl status postgresql验证状态(显示“active (running)”即为正常)。
PostgreSQL默认以postgres系统用户运行,需切换至该用户执行初始配置:
sudo -i -u postgres
进入PostgreSQL交互终端(psql),修改postgres用户的默认密码(增强安全性):
ALTER USER postgres WITH PASSWORD 'your_secure_password';
输入\q退出psql终端。
在psql中执行以下命令创建数据库(如mydb):
CREATE DATABASE mydb;
创建专用用户(如myuser)并设置密码,随后将数据库所有权授予该用户:
CREATE USER myuser WITH ENCRYPTED PASSWORD 'user_secure_password';
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
输入\q退出psql。
postgresql.conf(主配置文件)postgresql.conf位于/etc/postgresql/<version>/main/目录(<version>为PostgreSQL版本号,如14),需调整以下关键参数:
listen_addresses从localhost改为*(允许所有IP)或指定服务器IP(如192.168.1.100);port = 5432(可根据需求修改,需确保防火墙开放该端口);max_connections(默认100,根据服务器内存调整,如max_connections = 200)。修改后需重启服务使更改生效:
sudo systemctl restart postgresql
```。
### 4.2 修改`pg_hba.conf`(客户端认证配置)
`pg_hba.conf`位于同一目录,用于控制客户端访问权限。需添加或修改规则以允许特定IP或网段连接:
- **允许本地连接**(默认已存在,可保留):
`host all all 127.0.0.1/32 scram-sha-256`
- **允许远程IP段连接**(如`192.168.1.0/24`):
`host all all 192.168.1.0/24 scram-sha-256`
> 注:`scram-sha-256`为更安全的密码认证方式,推荐替代旧的`md5`。修改后需重新加载配置:
```bash
sudo systemctl reload postgresql
```。
## 5. 防火墙配置
若系统启用`ufw`防火墙,需允许PostgreSQL端口(默认5432)的流量:
```bash
sudo ufw allow 5432/tcp
验证防火墙规则:
sudo ufw status
应显示“5432/tcp ALLOW”。
使用psql命令行工具测试本地连接:
psql -U myuser -d mydb -h localhost
输入密码后,若出现mydb=>提示符则表示连接成功。
从远程机器使用相同命令测试(替换localhost为服务器IP):
psql -U myuser -d mydb -h 192.168.1.100
输入密码后成功连接则说明远程配置生效。
若需加密客户端与服务器之间的通信,可按以下步骤配置SSL:
sudo mkdir -p /etc/postgresql/<version>/main/ssl
sudo openssl req -new -x509 -days 365 -nodes -text -subj "/CN=postgres" -out /etc/postgresql/<version>/main/ssl/server.crt -keyout /etc/postgresql/<version>/main/ssl/server.key
sudo chmod 600 /etc/postgresql/<version>/main/ssl/server.key
postgresql.conf启用SSLssl = on
ssl_cert_file = '/etc/postgresql/<version>/main/ssl/server.crt'
ssl_key_file = '/etc/postgresql/<version>/main/ssl/server.key'
sudo systemctl restart postgresql
此时,客户端连接时需添加sslmode=require参数(如psql "sslmode=require host=192.168.1.100 dbname=mydb user=myuser password=user_secure_password")。