PostgreSQL Docker开发环境配置指南
Posted on Tue 19 March 2024 in 开发工具
PostgreSQL Docker开发环境配置指南
本文档详细介绍如何使用Docker搭建PostgreSQL开发环境,包括环境配置、启动方式、维护方法等内容。
目录结构
PgSQL_Docker/
├── .env # 环境变量配置文件
├── README.md # 项目说明文档
├── config/ # 配置文件目录
│ ├── pg_hba.conf # 访问控制配置
│ └── postgresql.conf # PostgreSQL主配置文件
├── data/ # 数据存储目录
└── logs/ # 日志文件目录
配置文件说明
1. docker-compose.yml
version: '3.8'
services:
postgres:
container_name: postgres-server
image: postgres:15
environment:
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
ports:
- "${POSTGRES_PORT}:5432"
volumes:
- ./data:/var/lib/postgresql/data
- ./logs:/var/log/postgresql
- ./config/postgresql.conf:/etc/postgresql/postgresql.conf
- ./config/pg_hba.conf:/etc/postgresql/pg_hba.conf
command: postgres -c 'config_file=/etc/postgresql/postgresql.conf'
networks:
- postgres-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 5
start_period: 10s
networks:
postgres-network:
driver: bridge
2. .env 环境变量配置
# PostgreSQL 配置环境变量
POSTGRES_DB=test_db # 数据库名称
POSTGRES_USER=data # 默认超级用户
POSTGRES_PASSWORD=your_password # 用户密码
POSTGRES_PORT=5432 # 端口映射
3. postgresql.conf 主要配置
# 连接设置
listen_addresses = '*'
port = 5432
max_connections = 100
# 内存设置
shared_buffers = 128MB
work_mem = 4MB
maintenance_work_mem = 64MB
effective_cache_size = 512MB
# 写入设置
wal_level = replica
max_wal_size = 1GB
min_wal_size = 80MB
# 日志设置
log_destination = 'stderr'
logging_collector = on
log_directory = '/var/log/postgresql'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_rotation_age = 1d
log_rotation_size = 10MB
# 区域设置
datestyle = 'iso, mdy'
timezone = 'UTC'
lc_messages = 'en_US.utf8'
4. pg_hba.conf 访问控制配置
# TYPE DATABASE USER ADDRESS METHOD
local all all trust
host all all 127.0.0.1/32 scram-sha-256
host all all ::1/128 scram-sha-256
host all all 0.0.0.0/0 scram-sha-256
使用说明
1. 启动服务
# 启动服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs postgres
2. 连接数据库
# 使用超级用户连接
docker-compose exec postgres psql -U data -d test_db
# 查看用户列表和权限
\du
# 查看数据库列表
\l
# 退出psql
\q
3. 停止服务
# 停止服务
docker-compose down
用户和权限管理
PostgreSQL使用角色(Role)概念来管理用户权限。在我们的配置中:
- 通过
POSTGRES_USER环境变量创建的用户(本例中为"data")是超级用户,具有所有权限: - Superuser(超级用户权限)
- Create role(创建角色权限)
- Create DB(创建数据库权限)
- Replication(复制权限)
-
Bypass RLS(绕过行级安全性)
-
创建新用户示例:
CREATE ROLE username WITH LOGIN PASSWORD 'password';
- 授予权限示例:
GRANT ALL PRIVILEGES ON DATABASE dbname TO username;
数据备份和恢复
备份数据
# 备份整个数据库
docker-compose exec postgres pg_dump -U data test_db > backup.sql
# 备份特定表
docker-compose exec postgres pg_dump -U data -t table_name test_db > table_backup.sql
恢复数据
# 恢复数据
docker-compose exec -T postgres psql -U data test_db < backup.sql
性能优化建议
- 内存配置
shared_buffers: 建议设置为系统内存的25%effective_cache_size: 建议设置为系统内存的50%-
work_mem: 根据并发连接数调整 -
写入性能
wal_buffers: 建议设置为16MBcheckpoint_timeout: 可根据写入压力调整-
max_wal_size: 根据磁盘空间调整 -
连接池
- 建议使用pgBouncer等连接池管理工具
- 避免频繁创建新连接
常见问题处理
- 容器无法启动
- 检查端口占用:
lsof -i :5432 - 检查配置文件权限
-
查看错误日志:
docker-compose logs postgres -
连接失败
- 确认用户名和密码正确
- 检查pg_hba.conf配置
-
验证网络连接
-
性能问题
- 检查慢查询日志
- 使用EXPLAIN分析查询计划
- 优化索引和查询语句
安全建议
- 密码安全
- 使用强密码
- 定期更换密码
-
避免在命令行中明文输入密码
-
网络安全
- 限制访问IP
- 使用SSL连接
-
定期更新PostgreSQL版本
-
权限控制
- 遵循最小权限原则
- 使用角色管理权限
- 启用行级安全性(RLS)
维护建议
- 定期维护
- 执行VACUUM操作
- 更新统计信息
-
检查日志文件大小
-
监控
- 监控连接数
- 监控磁盘使用
-
监控查询性能
-
备份策略
- 定期备份
- 测试恢复流程