安装部署
系统要求
最低配置
- 操作系统: Linux (推荐 Ubuntu 20.04+ / Debian 11+ / CentOS 8+)
- CPU: 2 核
- 内存: 4 GB
- 磁盘: 20 GB 可用空间
- Docker Engine: 24.0+
- Docker Compose: 2.20+
推荐配置
- CPU: 4 核及以上
- 内存: 8 GB 及以上
- 磁盘: SSD 100 GB 及以上
环境准备
1. 安装 Docker Engine
bash
# Ubuntu/Debian
curl -fsSL https://get.docker.com | bash
sudo systemctl start docker
sudo systemctl enable docker
# 验证安装
docker --version
docker compose version2. 创建部署目录
bash
mkdir nnipms && cd nnipms
mkdir -p config data data/postgres data/valkey logDocker Compose 部署
按场景分为完整服务和使用外部数据库两大类。
环境变量配置(推荐)
从 v2.0 开始,支持通过 环境变量 配置数据库,无需创建 TOML 配置文件:
| 环境变量 | 说明 | 默认值 |
|---|---|---|
DB_DRIVER | 数据库驱动类型:mysql 或 postgres | postgres |
DB_HOST | 数据库主机地址 | — |
DB_PORT | 数据库端口 | 5432 |
DB_USER | 数据库用户名 | — |
DB_PASSWORD | 数据库密码 | — |
DB_NAME | 数据库名称 | — |
DB_SSLMODE | SSL 模式(PostgreSQL 专用) | — |
设置环境变量后,可省略 -c 参数和 config/ 目录挂载。配置优先级:环境变量 > TOML 配置文件。
方案一:完整服务(内置数据库)
适用于首次部署或没有现有数据库的场景,一键启动数据库 + 缓存 + 后端 + 前端全部服务。
PostgreSQL 方案
创建 docker-compose.yml:
yaml
name: nnipms-postgres
services:
db:
image: postgres:18.4-alpine
container_name: nnipms-postgres
restart: unless-stopped
environment:
POSTGRES_PASSWORD: ${POSTGRES_ROOT_PASSWORD:-root123}
POSTGRES_USER: ${POSTGRES_USER:-nnipms_user}
POSTGRES_DB: ${POSTGRES_DATABASE:-nnipms_db}
TZ: Asia/Shanghai
ports:
- "${POSTGRES_PORT:-5432}:5432"
volumes:
- ./data/postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-nnipms_user} -d ${POSTGRES_DATABASE:-nnipms_db}"]
valkey:
image: valkey/valkey:9-alpine
container_name: nnipms-valkey
restart: unless-stopped
command:
- valkey-server
- --maxmemory ${VALKEY_MAX_MEMORY:-1024}mb
- --maxmemory-policy ${VALKEY_MAX_MEMORY_POLICY:-allkeys-lru}
ports:
- "${VALKEY_PORT:-6379}:6379"
volumes:
- ./data/valkey:/data
healthcheck:
test: ["CMD", "valkey-cli", "ping"]
backend:
image: ccr.ccs.tencentyun.com/nnipms/backend:latest
container_name: nnipms-backend
restart: unless-stopped
network_mode: host
depends_on:
db:
condition: service_healthy
valkey:
condition: service_healthy
environment:
CORS_ORIGINS: ${CORS_ORIGINS:-http://localhost:8848,http://127.0.0.1:8848}
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}"
volumes:
- ./config:/app/config
- ./log:/app/log
command:
- -c
- config/postgres.toml
- -p
- "${BACKEND_PORT:-12339}"
- -a
- "${BACKEND_ADDR:-0.0.0.0}"
frontend:
image: ccr.ccs.tencentyun.com/nnipms/dashboard:latest
container_name: nnipms-frontend
restart: unless-stopped
network_mode: host
depends_on:
backend:
condition: service_started
environment:
BACKEND_URL: http://127.0.0.1:${BACKEND_PORT:-12339}创建 .env:
bash
POSTGRES_PORT=5432
POSTGRES_USER=nnipms_user
POSTGRES_PASSWORD=Hf#XE6h2f*#HrU
POSTGRES_DATABASE=nnipms_db
POSTGRES_ROOT_PASSWORD=root123
VALKEY_PORT=6379
VALKEY_MAX_MEMORY=1024
BACKEND_PORT=12339
BACKEND_ADDR=0.0.0.0
CORS_ORIGINS=http://localhost:8848,http://127.0.0.1:8848创建 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 -dMySQL 方案
创建 docker-compose.yml:
yaml
name: nnipms-mysql
services:
db:
image: mysql:9.7.0
container_name: nnipms-mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root123}
MYSQL_DATABASE: ${MYSQL_DATABASE:-nnipms_db}
MYSQL_USER: ${MYSQL_USER:-nnipms_user}
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-Hf#XE6h2f*#HrU}
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
ports:
- "${MYSQL_PORT:-3306}:3306"
volumes:
- ./data/mysql:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD:-root123}"]
valkey:
image: valkey/valkey:9-alpine
container_name: nnipms-valkey
restart: unless-stopped
command:
- valkey-server
- --maxmemory ${VALKEY_MAX_MEMORY:-1024}mb
- --maxmemory-policy ${VALKEY_MAX_MEMORY_POLICY:-allkeys-lru}
ports:
- "${VALKEY_PORT:-6379}:6379"
volumes:
- ./data/valkey:/data
healthcheck:
test: ["CMD", "valkey-cli", "ping"]
backend:
image: ccr.ccs.tencentyun.com/nnipms/backend:latest
container_name: nnipms-backend
restart: unless-stopped
network_mode: host
depends_on:
db:
condition: service_healthy
valkey:
condition: service_healthy
environment:
CORS_ORIGINS: ${CORS_ORIGINS:-http://localhost:8848,http://127.0.0.1:8848}
DB_DRIVER: ${DB_DRIVER:-mysql}
DB_HOST: ${DB_HOST:-127.0.0.1}
DB_PORT: "${DB_PORT:-3306}"
DB_USER: ${MYSQL_USER:-nnipms_user}
DB_PASSWORD: ${MYSQL_PASSWORD:-Hf#XE6h2f*#HrU}
DB_NAME: ${MYSQL_DATABASE:-nnipms_db}
DB_SSLMODE: ${DB_SSLMODE:-disable}
VALKEY_ADDRESS: ${VALKEY_ADDRESS:-127.0.0.1}
VALKEY_PORT: "${VALKEY_PORT:-6379}"
volumes:
- ./config:/app/config
- ./log:/app/log
command:
- -c
- config/mysql.toml
- -p
- "${BACKEND_PORT:-12339}"
- -a
- "${BACKEND_ADDR:-0.0.0.0}"
frontend:
image: ccr.ccs.tencentyun.com/nnipms/dashboard:latest
container_name: nnipms-frontend
restart: unless-stopped
network_mode: host
depends_on:
backend:
condition: service_started
environment:
BACKEND_URL: http://127.0.0.1:${BACKEND_PORT:-12339}创建 .env:
bash
MYSQL_PORT=3306
MYSQL_USER=nnipms_user
MYSQL_PASSWORD=Hf#XE6h2f*#HrU
MYSQL_DATABASE=nnipms_db
MYSQL_ROOT_PASSWORD=root123
VALKEY_PORT=6379
VALKEY_MAX_MEMORY=1024
BACKEND_PORT=12339
BACKEND_ADDR=0.0.0.0
CORS_ORIGINS=http://localhost:8848,http://127.0.0.1:8848创建 config/mysql.toml:
toml
[database]
driver = "mysql"
host = "127.0.0.1"
port = 3306
username = "nnipms_user"
password = "Hf#XE6h2f*#HrU"
database = "nnipms_db"
[mysql]
charset = "utf8mb4"
parse_time = true
loc = "Local"启动:
bash
docker compose up -d已知问题
MySQL 9.x 对 TEXT/BLOB 类型的索引键有前缀长度要求,部分表的 uniqueIndex 字段可能在表初始化时报错 BLOB/TEXT column used in key specification without a key length。如遇此问题,建议换用 MariaDB 12(完全兼容 MySQL 协议,使用 driver = "mysql" 连接),详见 MariaDB 部署文档。
访问系统
启动完成后,打开浏览器访问:http://localhost:12338
默认管理员账号:
- 用户名:
admin - 密码:
admin123456
安全提示
首次登录后请立即修改默认密码!
方案二:使用外部数据库
适用于已有 PostgreSQL/MySQL 实例的场景,Docker Compose 仅管理缓存、后端和前端服务。
创建 config/postgres.external.toml(PostgreSQL):
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创建 config/mysql.external.toml(MySQL):
toml
[database]
driver = "mysql"
host = "你的MySQL主机"
port = 3306
username = "nnipms_user"
password = "你的密码"
database = "nnipms_db"
[mysql]
charset = "utf8mb4"
parse_time = true
loc = "Local"创建 docker-compose.yml:
yaml
name: nnipms-external
services:
valkey:
image: valkey/valkey:9-alpine
container_name: nnipms-valkey
restart: unless-stopped
ports:
- "${VALKEY_PORT:-6379}:6379"
healthcheck:
test: ["CMD", "valkey-cli", "ping"]
backend:
image: ccr.ccs.tencentyun.com/nnipms/backend:latest
container_name: nnipms-backend
restart: unless-stopped
network_mode: host
depends_on:
valkey:
condition: service_healthy
environment:
CORS_ORIGINS: ${CORS_ORIGINS:-http://localhost:8848,http://127.0.0.1:8848}
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:-valkey}
VALKEY_PORT: "${VALKEY_PORT:-6379}"
volumes:
- ./config:/app/config
command:
- -c
- config/postgres.external.toml
- -p
- "${BACKEND_PORT:-12339}"
- -a
- "${BACKEND_ADDR:-0.0.0.0}"
frontend:
image: ccr.ccs.tencentyun.com/nnipms/dashboard:latest
container_name: nnipms-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使用 Nginx 反向代理(可选)
nginx
server {
listen 80;
server_name nnipms.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:12338;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}数据备份
数据库备份
bash
# PostgreSQL 备份
docker exec -t nnipms-postgres pg_dump -U nnipms_user nnipms_db > nnipms_backup_$(date +%Y%m%d).sql
# MySQL 备份
docker exec -t nnipms-mysql mysqldump -u nnipms_user -p nnipms_db > nnipms_backup_$(date +%Y%m%d).sql配置文件备份
bash
tar -czf nnipms_config_backup_$(date +%Y%m%d).tar.gz .env config/常见问题
无法连接数据库
- 检查数据库容器是否正常运行:
docker ps - 查看容器日志:
docker logs nnipms-postgres - 检查
.env中的连接信息 - 检查防火墙设置
端口被占用
bash
# 查看端口占用
sudo lsof -i :12339
# 修改 .env 中的端口变量后重新创建容器:
docker compose down && docker compose up -d容器无法启动
bash
# 查看容器日志
docker compose logs
# 检查数据目录权限
ls -la data/
# 重建容器
docker compose down -v && docker compose up -d获取帮助
- 技术支持: support@nnipms.liumou.site