PostgreSQL 18 数据库配置
版本信息
- 镜像:
postgres:18.4-alpine - 驱动:
postgres - 默认端口: 5432
环境变量配置(推荐)
从 v2.0 开始,后端支持通过环境变量配置数据库连接,无需 TOML 文件:
| 环境变量 | 说明 | 默认值 |
|---|---|---|
DB_DRIVER | 数据库驱动 | postgres |
DB_HOST | 数据库主机 | — |
DB_PORT | 数据库端口 | 5432 |
DB_USER | 用户名 | — |
DB_PASSWORD | 密码 | — |
DB_NAME | 数据库名 | — |
DB_SSLMODE | SSL 模式 | disable |
完整服务(内置 PostgreSQL)
创建 docker-compose.yml:
yaml
# ==============================================================================
# NNIPMS - 前后端分离部署(PostgreSQL + Valkey)
# ==============================================================================
# 使用方式:
# cd docker-compose
# cp ../.env.example .env
# docker compose -f docker-compose.postgres.yml up -d
# ==============================================================================
services:
# ---- PostgreSQL 数据库(默认访问端口: 5432)----
db:
image: postgres:18.4-alpine
container_name: nnipms-seperate-postgres
restart: unless-stopped
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-Hf#XE6h2f*#HrU}
POSTGRES_USER: ${POSTGRES_USER:-nnipms_user}
POSTGRES_DB: ${POSTGRES_DATABASE:-nnipms_db}
TZ: Asia/Shanghai
ports:
- "${POSTGRES_PORT:-5432}:${POSTGRES_INTERNAL_PORT:-5432}"
volumes:
- ./data/postgres:/var/lib/postgresql
networks:
nnipms-db-net:
ipv4_address: ${DB_FIXED_IP:-172.20.0.10}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-nnipms_user} -d ${POSTGRES_DATABASE:-nnipms_db}"]
interval: 10s
timeout: 5s
retries: 5
start_period: 20s
# ---- Valkey 缓存(默认访问端口: 6379)----
valkey:
image: valkey/valkey:9-alpine
container_name: nnipms-seperate-valkey
restart: unless-stopped
command:
- valkey-server
- --maxmemory ${VALKEY_MAX_MEMORY:-1024}mb
- --maxmemory-policy ${VALKEY_MAX_MEMORY_POLICY:-allkeys-lru}
- --save ""
ports:
- "${VALKEY_PORT:-6379}:${VALKEY_INTERNAL_PORT:-6379}"
volumes:
- ./data/valkey:/data
healthcheck:
test: ["CMD", "valkey-cli", "ping"]
interval: 10s
timeout: 3s
retries: 3
# ---- Go 后端服务(默认访问端口: 12339)----
backend:
image: ${BACKEND_IMAGE:-ccr.ccs.tencentyun.com/nnipms/backend:latest}
container_name: nnipms-seperate-backend
restart: unless-stopped
network_mode: host
depends_on:
db:
condition: service_healthy
valkey:
condition: service_healthy
environment:
TZ: Asia/Shanghai
CORS_ORIGINS: ${CORS_ORIGINS:-http://localhost:12338,http://127.0.0.1:12338}
DB_DRIVER: ${DB_DRIVER:-postgres}
DB_HOST: ${DB_HOST:-127.0.0.1}
DB_PORT: "${DB_PORT:-5432}"
DB_USER: ${POSTGRES_USER:-nnipms_user}
DB_PASSWORD: ${POSTGRES_PASSWORD:-Hf#XE6h2f*#HrU}
DB_NAME: ${POSTGRES_DATABASE:-nnipms_db}
DB_SSLMODE: ${DB_SSLMODE:-disable}
VALKEY_ADDRESS: ${VALKEY_ADDRESS:-127.0.0.1}
VALKEY_PORT: "${VALKEY_PORT:-6379}"
LOG_LEVEL: ${LOG_LEVEL:-warn}
LOG_FILE_LEVEL: ${LOG_FILE_LEVEL:-debug}
volumes:
- ${CONFIG_DIR:-./config}:/app/config
- ${LOG_DIR:-./log}:/app/log
command:
- -c
- config/postgres.toml
- -p
- "${BACKEND_PORT:-12339}"
- -a
- "${BACKEND_ADDR:-0.0.0.0}"
- -log
- "${LOG_LEVEL:-warn}"
- --log-file
- "${LOG_FILE_LEVEL:-debug}"
# ---- 前端静态服务(默认访问端口: 12338)----
frontend:
image: ${FRONTEND_IMAGE:-ccr.ccs.tencentyun.com/nnipms/dashboard:latest}
container_name: nnipms-seperate-frontend
restart: unless-stopped
network_mode: host
depends_on:
backend:
condition: service_started
environment:
BACKEND_URL: http://127.0.0.1:${BACKEND_PORT:-12339}
networks:
nnipms-db-net:
driver: bridge
ipam:
config:
- subnet: ${DB_NET_SUBNET:-172.20.0.0/16}创建 .env:
bash
# =============================================================================
# NNIPMS Docker Compose 环境变量配置模板
# 拷贝此文件为 .env 并根据需要修改:
# cp .env.example .env
# =============================================================================
# ---- 数据库配置 ----
# 驱动类型: mysql | postgres
DB_DRIVER=postgres
# 外部数据库配置文件路径(external 模式)
EXTERNAL_CONFIG=./config/postgres.external.toml
# MySQL 配置
MYSQL_HOST=db
MYSQL_PORT=3306
MYSQL_INTERNAL_PORT=3306
MYSQL_USER=nnipms_user
MYSQL_PASSWORD=M8k#xR2p$9Lq@7ZnW
MYSQL_DATABASE=nnipms_db
MYSQL_CHARSET=utf8mb4
MYSQL_PARSE_TIME=true
MYSQL_LOC=Local
# PostgreSQL 配置
POSTGRES_HOST=db
POSTGRES_PORT=5432
POSTGRES_INTERNAL_PORT=5432
POSTGRES_USER=nnipms_user
POSTGRES_PASSWORD=M8k#xR2p$9Lq@7ZnW
POSTGRES_DATABASE=nnipms_db
POSTGRES_SSLMODE=disable
# ---- Valkey 缓存配置 ----
VALKEY_ADDRESS=valkey:6379
VALKEY_PORT=6379
VALKEY_INTERNAL_PORT=6379
VALKEY_PASSWORD=
VALKEY_DB=0
VALKEY_MAX_MEMORY=1024
VALKEY_MAX_MEMORY_POLICY=allkeys-lru
# ---- 后端服务配置 ----
BACKEND_PORT=12339
BACKEND_ADDR=0.0.0.0
LOG_LEVEL=warn # 终端输出级别(告警及以上)
LOG_FILE_LEVEL=debug # 日志文件级别(调试及以上)
BACKEND_IMAGE=ccr.ccs.tencentyun.com/nnipms/backend:latest
# ---- CORS 跨域配置 ----
# 允许的跨域来源,多个用逗号分隔
CORS_ORIGINS=http://localhost:12338,http://127.0.0.1:12338
# ---- 前端配置 ----
FRONTEND_PORT=12338
FRONTEND_IMAGE=ccr.ccs.tencentyun.com/nnipms/dashboard:latest
VITE_API_BASE_URL=http://localhost:12339
# ---- 数据持久化路径 ----
DATA_DIR=./data
CONFIG_DIR=./config
LOG_DIR=./log
# ---- License Server 配置 ----
LICENSE_SERVER_PORT=8080
LICENSE_SERVER_INTERNAL_PORT=8080
LICENSE_LOG_LEVEL=warn # License Server 终端级别
LICENSE_LOG_FILE_LEVEL=debug # License Server 文件级别
LICENSE_SERVER_IMAGE=ccr.ccs.tencentyun.com/nnipms/license:latest
# ---- 探针客户端配置 ----
PROBE_IMAGE=ccr.ccs.tencentyun.com/nnipms/probe:latest
PROBE_CONFIG=./probe-config.toml
PROBE_LOG_LEVEL=warn # 探针终端级别
PROBE_LOG_FILE_LEVEL=debug # 探针文件级别
# ---- 数据库容器网络(内部数据库场景) ----
DB_NET_SUBNET=172.20.0.0/16
DB_FIXED_IP=172.20.0.10
# ---- MySQL/PostgreSQL 容器 root 密码(内部数据库场景) ----
# 生产环境请务必修改为强密码!
MYSQL_ROOT_PASSWORD=R00t#9kP$mN2@vL8
POSTGRES_ROOT_PASSWORD=R00t#9kP$mN2@vL8创建 config/postgres.toml:
toml
[database]
driver = "postgres"
host = "127.0.0.1"
port = 5432
username = "nnipms_user"
password = "Hf#XE6h2f*#HrU"
database = "nnipms_db"
sslmode = "disable"
[postgres]
max_idle_conns = 10
max_open_conns = 100
conn_max_lifetime = 1启动:
bash
docker compose up -d外部 PostgreSQL
如果已有 PostgreSQL 实例,只需启动 Valkey、后端和前端。
创建 config/postgres.external.toml:
toml
[database]
driver = "postgres"
host = "你的PG主机地址"
port = 5432
username = "nnipms_user"
password = "你的数据库密码"
database = "nnipms_db"
sslmode = "disable"
[postgres]
max_idle_conns = 10
max_open_conns = 100
conn_max_lifetime = 1创建 docker-compose.yml(仅 Valkey + Backend + Frontend):
yaml
# ==============================================================================
# NNIPMS - 前后端分离部署(外部数据库 + Valkey)
# ==============================================================================
# 适用于已有数据库实例的场景,仅启动 Valkey + 后端 + 前端
# 使用方式:
# cd docker-compose
# cp ../.env.example .env
# # 编辑 .env 设置外部数据库连接信息
# docker compose -f docker-compose.external.yml up -d
# ==============================================================================
services:
# ---- Valkey 缓存(默认访问端口: 6379)----
valkey:
image: valkey/valkey:9-alpine
container_name: nnipms-seperate-valkey
restart: unless-stopped
command:
- valkey-server
- --maxmemory ${VALKEY_MAX_MEMORY:-1024}mb
- --maxmemory-policy ${VALKEY_MAX_MEMORY_POLICY:-allkeys-lru}
- --save ""
ports:
- "${VALKEY_PORT:-6379}:${VALKEY_INTERNAL_PORT:-6379}"
volumes:
- ./data/valkey:/data
healthcheck:
test: ["CMD", "valkey-cli", "ping"]
interval: 10s
timeout: 3s
retries: 3
# ---- Go 后端服务(默认访问端口: 12339)----
backend:
image: ${BACKEND_IMAGE:-ccr.ccs.tencentyun.com/nnipms/backend:latest}
container_name: nnipms-seperate-backend
restart: unless-stopped
network_mode: host
depends_on:
valkey:
condition: service_healthy
environment:
TZ: Asia/Shanghai
CORS_ORIGINS: ${CORS_ORIGINS:-http://localhost:12338,http://127.0.0.1:12338}
DB_DRIVER: ${DB_DRIVER:-postgres}
DB_HOST: ${DB_HOST:-127.0.0.1}
DB_PORT: ${DB_PORT:-5432}
DB_USER: ${DB_USER:-nnipms_user}
DB_PASSWORD: ${DB_PASSWORD:-Hf#XE6h2f*#HrU}
DB_NAME: ${DB_NAME:-nnipms_db}
DB_SSLMODE: ${DB_SSLMODE:-disable}
VALKEY_ADDRESS: ${VALKEY_ADDRESS:-127.0.0.1}
VALKEY_PORT: "${VALKEY_PORT:-6379}"
LOG_LEVEL: ${LOG_LEVEL:-warn}
LOG_FILE_LEVEL: ${LOG_FILE_LEVEL:-debug}
volumes:
- ${CONFIG_DIR:-./config}:/app/config
- ${LOG_DIR:-./log}:/app/log
- ${EXTERNAL_CONFIG:-./config/postgres.external.toml}:/app/config/database.toml
command:
- -c
- config/database.toml
- -p
- "${BACKEND_PORT:-12339}"
- -a
- "${BACKEND_ADDR:-0.0.0.0}"
- -log
- "${LOG_LEVEL:-warn}"
- --log-file
- "${LOG_FILE_LEVEL:-debug}"
# ---- 前端静态服务(默认访问端口: 12338)----
frontend:
image: ${FRONTEND_IMAGE:-ccr.ccs.tencentyun.com/nnipms/dashboard:latest}
container_name: nnipms-seperate-frontend
restart: unless-stopped
network_mode: host
depends_on:
backend:
condition: service_started
environment:
BACKEND_URL: http://127.0.0.1:${BACKEND_PORT:-12339}启动:
bash
docker compose up -d首次安装
PostgreSQL 首次启动时会自动创建用户和数据库,无需手动执行 SQL。
备份与恢复
bash
# 备份
docker exec -t nnipms-postgres pg_dump -U nnipms_user nnipms_db > backup_$(date +%Y%m%d).sql
# 恢复
cat backup.sql | docker exec -i nnipms-postgres psql -U nnipms_user nnipms_db