作为自托管服务的统一数据库核心,适合 NodeGet、Sub2API、各类需要 PostgreSQL 的 Docker 项目共用
PostgreSQL Docker 内部连接地址
postgres-core:5432部署前准备
mkdir -p /srv/docker-data/postgres/data
mkdir -p /srv/docker-data/postgres/backups
mkdir -p /srv/docker-data/sqlite
PostgreSQL Compose
version: "3.8"
services:
postgres:
image: postgres:17-alpine
container_name: postgres-core
restart: always
networks:
- db_net
# ports:
# - "127.0.0.1:5432:5432"
volumes:
- /srv/docker-data/postgres/data:/var/lib/postgresql/data
environment:
TZ: Asia/Shanghai
POSTGRES_USER: postgres
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: postgres
PGDATA: /var/lib/postgresql/data/pgdata
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres -d postgres"]
interval: 30s
timeout: 10s
retries: 5
postgres-backup:
image: prodrigestivill/postgres-backup-local:17-alpine
container_name: postgres-backup
restart: always
networks:
- db_net
volumes:
- /srv/docker-data/postgres/backups:/backups
environment:
TZ: Asia/Shanghai
POSTGRES_HOST: postgres-core
POSTGRES_DB: postgres
POSTGRES_USER: postgres
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_EXTRA_OPTS: "-Z 9"
SCHEDULE: "@daily"
BACKUP_KEEP_DAYS: 7
BACKUP_KEEP_WEEKS: 4
BACKUP_KEEP_MONTHS: 3
HEALTHCHECK_PORT: 8080
depends_on:
postgres:
condition: service_healthy
networks:
db_net:
name: db_net
internal: true
🟢Portainer 环境变量
在 Portainer 的 Stack 页面底部
Environment variables 区域添加:POSTGRES_PASSWORD = 强密码
🟢随机密钥生成
openssl rand -base64 32
🟢应用接入示例
需要连接 PostgreSQL 的应用,不是让数据库加入 proxy,而是让应用加入 db_net
networks:
- default
- proxy
- db_net
networks:
default: {}
proxy:
external: true
db_net:
external: true
🟢应用数据库配置
DB_HOST = postgres-core
DB_PORT = 5432
DB_USER = postgres
DB_PASSWORD = 你设置的 POSTGRES_PASSWORD
DB_NAME = 对应数据库名
注意:
PostgreSQL 不是 Web 面板服务,不需要 NPM 反代,也不建议加入 proxy 网络
正确做法是:PostgreSQL 留在 db_net,需要数据库的应用加入 db_net
😂 Docker
#Docker #PostgreSQL