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_USERpostgres创建超级管理员账号
POSTGRES_PASSWORD是*超级管理员密码
POSTGRES_DB与POSTGRES_USER相同初始化创建的数据库
PGDATA/var/lib/postgresql/dataPostgreSQL数据目录
POSTGRES_INITDB_ARGS初始化数据库时附加参数
POSTGRES_INITDB_WALDIRWAL日志独立存储目录
POSTGRES_HOST_AUTH_METHODmd5客户端认证方式
生产环境建议始终设置 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数据库。


推荐方案

对于生产环境:

  • 单机测试:Docker部署

  • 生产环境:Docker Compose部署

  • 高可靠环境:PostgreSQL + Patroni + Keepalived

  • AI知识库场景:PostgreSQL + pgvector

对于MinDoc,推荐直接使用 PostgreSQL 16 Docker Compose 部署,维护成本最低,升级最方便。

作者:zws  创建时间:2026-06-06 21:55
最后编辑:zws  更新时间:2026-06-06 22:40
上一篇:
下一篇: