首先更新系统包列表并安装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"
)。