PostgreSQL 部署指南(Binary 二进制部署 + Docker 部署)
一、环境说明
| 项目 | 说明 |
|---|
| PostgreSQL版本 | PostgreSQL 16.x |
| 操作系统 | CentOS 7/8、RockyLinux、AlmaLinux、Ubuntu |
| 部署方式 | 二进制部署、Docker部署 |
| 默认端口 | 5432 |
| 数据目录 | /data/postgresql |
| 安装目录 | /usr/local/postgresql |
二、二进制部署
1. 创建用户
PostgreSQL不建议使用root运行。
groupadd postgres
useradd -g postgres postgres
查看:
id postgres
2. 下载PostgreSQL
官方下载:
www.postgresql.org/d...
例如:
wget https://ftp.postgresql.org/pub/source/v16.4/postgresql-16.4.tar.gz
解压:
tar -zxvf postgresql-16.4.tar.gz
cd postgresql-16.4
3. 安装依赖
CentOS
yum install -y \
gcc \
gcc-c++ \
make \
readline-devel \
zlib-devel \
openssl-devel
Ubuntu
apt update
apt install -y \
build-essential \
libreadline-dev \
zlib1g-dev \
libssl-dev
4. 编译安装
创建安装目录:
mkdir -p /usr/local/postgresql
编译:
./configure --prefix=/usr/local/postgresql
安装:
make -j4
make install
5. 配置环境变量
编辑:
vim /etc/profile
添加:
export PG_HOME=/usr/local/postgresql
export PATH=$PG_HOME/bin:$PATH
生效:
source /etc/profile
验证:
psql --version
输出示例:
psql (PostgreSQL) 16.4
6. 创建数据目录
mkdir -p /data/postgresql/data
chown -R postgres:postgres /data/postgresql
7. 初始化数据库
切换用户:
su - postgres
初始化:
/usr/local/postgresql/bin/initdb \
-D /data/postgresql/data \
-E UTF8 \
--locale=C
成功示例:
Success. You can now start the database server.
8. 启动数据库
pg_ctl \
-D /data/postgresql/data \
-l /data/postgresql/postgresql.log \
start
查看状态:
pg_ctl -D /data/postgresql/data status
停止:
pg_ctl -D /data/postgresql/data stop
重启:
pg_ctl -D /data/postgresql/data restart
9. 开启远程访问
编辑:
vim /data/postgresql/data/postgresql.conf
修改:
listen_addresses='*'
port=5432
编辑:
vim /data/postgresql/data/pg_hba.conf
增加:
host all all 0.0.0.0/0 md5
重启:
pg_ctl -D /data/postgresql/data restart
10. 创建数据库用户
登录:
psql
创建用户:
CREATE USER mindoc WITH PASSWORD 'Mindoc@123';
创建数据库:
CREATE DATABASE mindoc OWNER mindoc;
授权:
GRANT ALL PRIVILEGES ON DATABASE mindoc TO mindoc;
查看:
\l
退出:
\q
三、Systemd服务配置
创建:
vim /etc/systemd/system/postgresql.service
内容:
[Unit]
Description=PostgreSQL Database
After=network.target
[Service]
Type=forking
User=postgres
Group=postgres
ExecStart=/usr/local/postgresql/bin/pg_ctl \
-D /data/postgresql/data \
-l /data/postgresql/postgresql.log start
ExecStop=/usr/local/postgresql/bin/pg_ctl \
-D /data/postgresql/data stop
ExecReload=/usr/local/postgresql/bin/pg_ctl \
-D /data/postgresql/data reload
PIDFile=/data/postgresql/data/postmaster.pid
[Install]
WantedBy=multi-user.target
刷新:
systemctl daemon-reload
启动:
systemctl start postgresql
设置开机启动:
systemctl enable postgresql
查看状态:
systemctl status postgresql
四、Docker部署
1. 拉取镜像
推荐:
docker pull postgres:16
查看:
docker images | grep postgres
2. 创建数据目录
mkdir -p /data/postgres/data
mkdir -p /data/postgres/conf
3. Docker运行
docker run -d \
--name postgres \
--restart=always \
-p 5432:5432 \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=Postgres@123 \
-e POSTGRES_DB=postgres \
-v /data/postgres/data:/var/lib/postgresql/data \
postgres:16
常用环境变量如下:
| 环境变量 | 是否必填 | 默认值 | 说明 |
|---|
| POSTGRES_USER | 否 | postgres | 创建超级管理员账号 |
| POSTGRES_PASSWORD | 是* | 无 | 超级管理员密码 |
| POSTGRES_DB | 否 | 与POSTGRES_USER相同 | 初始化创建的数据库 |
| PGDATA | 否 | /var/lib/postgresql/data | PostgreSQL数据目录 |
| POSTGRES_INITDB_ARGS | 否 | 空 | 初始化数据库时附加参数 |
| POSTGRES_INITDB_WALDIR | 否 | 空 | WAL日志独立存储目录 |
| POSTGRES_HOST_AUTH_METHOD | 否 | md5 | 客户端认证方式 |
生产环境建议始终设置 POSTGRES_PASSWORD。
查看:
docker ps
4. 测试连接
进入容器:
docker exec -it postgres bash
登录:
psql -U postgres
查看数据库:
\l
退出:
\q
五、Docker Compose部署
docker-compose.yml
version: '3.8'
services:
postgres:
image: postgres:16
container_name: postgres
restart: always
ports:
- "5432:5432"
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: Postgres@123
POSTGRES_DB: postgres
volumes:
- /data/postgres/data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
启动:
docker compose up -d
查看:
docker compose ps
停止:
docker compose down
六、创建MinDoc数据库
连接:
psql -U postgres
执行:
CREATE USER mindoc WITH PASSWORD 'Mindoc@123';
CREATE DATABASE mindoc OWNER mindoc;
GRANT ALL PRIVILEGES ON DATABASE mindoc TO mindoc;
验证:
\l
结果:
mindoc
postgres
template0
template1
七、防火墙配置
firewalld
开放端口:
firewall-cmd --permanent --add-port=5432/tcp
重载:
firewall-cmd --reload
查看:
firewall-cmd --list-ports
八、备份与恢复
备份
pg_dump -U postgres mindoc > mindoc.sql
压缩备份:
pg_dump -U postgres mindoc | gzip > mindoc.sql.gz
恢复
创建数据库:
CREATE DATABASE mindoc;
导入:
psql -U postgres -d mindoc < mindoc.sql
九、性能参数建议(4C8G服务器)
编辑:
vim postgresql.conf
推荐:
shared_buffers = 2GB
effective_cache_size = 6GB
maintenance_work_mem = 512MB
work_mem = 16MB
max_connections = 200
wal_buffers = 16MB
checkpoint_completion_target = 0.9
重启:
systemctl restart postgresql
十、MinDoc连接配置示例
DB_ADAPTER=postgres
DB_HOST=10.168.95.104
DB_PORT=5432
DB_DATABASE=mindoc
DB_USERNAME=mindoc
DB_PASSWORD=Mindoc@123
测试连接:
psql \
-h 10.168.95.104 \
-p 5432 \
-U mindoc \
-d mindoc
连接成功即表示MinDoc可正常使用PostgreSQL数据库。
推荐方案
对于生产环境:
对于MinDoc,推荐直接使用 PostgreSQL 16 Docker Compose 部署,维护成本最低,升级最方便。