Docker 部署Datart BI工具完整指南(PostgreSQL 持久化存储)

Datart Docker 部署完整指南(PostgreSQL 持久化存储)

一、概述

本文档详细介绍如何使用 Docker 部署 Datart 数据可视化平台,并使用 PostgreSQL 作为元数据库实现数据持久化存储。采用此方案后,即使容器被删除重建,所有配置、用户、报表等数据均不会丢失。

环境要求

  • Docker 18.09+
  • PostgreSQL 16.4+(或更高版本)
  • 服务器内存:建议 2GB 以上
  • 开放端口:8080(Datart)、5432(PostgreSQL)

二、准备 PostgreSQL 数据库

2.1 安装 PostgreSQL(如未安装)

使用 Docker 部署 PostgreSQL(推荐):

bash 复制代码
docker run -d \
  --name postgres \
  --restart always \
  -e POSTGRES_PASSWORD='your_password' \
  -e POSTGRES_DB=postgres \
  -p 5432:5432 \
  -v /data/postgres:/var/lib/postgresql \
  -v /data/postgres/config:/etc/postgresql \
  registry.cn-hangzhou.aliyuncs.com/qiluo-images/postgres:latest

或使用系统包管理器安装(Ubuntu/Debian):

bash 复制代码
apt-get update
apt-get install -y postgresql-13
systemctl start postgresql

2.2 创建 Datart 数据库

连接到 PostgreSQL 并创建数据库:

bash 复制代码
# 使用 Docker 部署的 PostgreSQL
docker exec -it postgres psql -U postgres

# 或使用系统安装的 PostgreSQL
sudo -u postgres psql

执行以下 SQL 命令:

sql 复制代码
-- 创建数据库(注意字符集)
CREATE DATABASE datart 
  WITH ENCODING='UTF8' 
  LC_COLLATE='en_US.UTF-8' 
  LC_CTYPE='en_US.UTF-8' 
  TEMPLATE=template0;

-- 可选:创建专用用户
CREATE USER datart_user WITH PASSWORD 'datart_password';

-- 授予权限
GRANT ALL PRIVILEGES ON DATABASE datart TO datart_user;

-- 退出
\q

三、配置 Datart

3.1 创建持久化目录

bash 复制代码
# 创建配置、文件、日志存储目录
mkdir -p /data/datart/config
mkdir -p /data/datart/files
mkdir -p /data/datart/logs

3.2 编写配置文件

创建配置文件 /data/datart/config/datart.conf

properties 复制代码
# ============================================
# Datart 配置文件(PostgreSQL 版本)
# ============================================

# ---------- PostgreSQL 数据库连接 ----------
# 数据库服务器地址(可以是 IP、域名或容器名)
datasource.ip=127.0.0.1
datasource.port=5432
datasource.database=datart
datasource.username=postgres
datasource.password=your_password

# JDBC 驱动配置
datasource.driver-class-name=org.postgresql.Driver
datasource.url=jdbc:postgresql://127.0.0.1:5432/datart

# ---------- 连接池配置 ----------
# 最大连接数(根据服务器性能调整)
spring.datasource.hikari.maximum-pool-size=20
# 最小空闲连接
spring.datasource.hikari.minimum-idle=5
# 连接超时时间(毫秒)
spring.datasource.hikari.connection-timeout=30000
# 空闲连接存活时间(毫秒)
spring.datasource.hikari.idle-timeout=600000
# 连接最大生命周期(毫秒)
spring.datasource.hikari.max-lifetime=1800000

# ---------- 服务配置 ----------
# 服务端口
server.port=8080
# 服务监听地址(0.0.0.0 表示所有网卡)
server.address=0.0.0.0
# 会话超时时间(分钟)
server.servlet.session.timeout=30m

# ---------- Datart 应用配置 ----------
# 应用访问地址(必须修改为实际服务器地址)
datart.address=http://your-server-ip:8080
# 文件存储路径(容器内路径)
datart.filepath=/datart/files
# 关闭邮件功能(如不需要发送邮件)
datart.send-mail=false

# ---------- 日志配置 ----------
# 日志级别(DEBUG/INFO/WARN/ERROR)
logging.level.com.datart=INFO
logging.level.org.springframework.web=INFO
# 日志文件路径
logging.file.path=/datart/logs

# ---------- 其他配置 ----------
# 是否允许注册(生产环境建议关闭)
datart.user.registration.enabled=true
# 默认时区
spring.jackson.time-zone=Asia/Shanghai

3.3 配置文件权限设置

bash 复制代码
# 确保配置文件可读
chmod 644 /data/datart/config/datart.conf

四、部署 Datart

4.1 拉取镜像

bash 复制代码
# x86镜像
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/linux_arm64_datart:latest
# arrch64镜像
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/datart:latest

4.2 启动容器

bash 复制代码
docker run -d \
  --name datart \
  --restart unless-stopped \
  -p 8080:8080 \
  -v /data/datart/config/datart.conf:/datart/config/datart.conf \
  -v /data/datart/files:/datart/files \
  -v /data/datart/logs:/datart/logs \
  registry.cn-hangzhou.aliyuncs.com/qiluo-images/datart:latest

参数说明:

  • -d:后台运行
  • --name datart:容器名称
  • --restart unless-stopped:自动重启
  • -p 8080:8080:端口映射
  • -v:挂载持久化目录

4.3 验证启动状态

bash 复制代码
# 查看容器运行状态
docker ps | grep datart

# 查看启动日志
docker logs -f datart

# 预期输出(关键信息)
# Started DatartServerApplication in X.XXX seconds
# HikariPool-1 - Start completed.
# Tomcat started on port(s): 8080 (http)

五、验证持久化存储

5.1 验证数据库连接

进入 PostgreSQL 查看表结构:

bash 复制代码
# 进入 PostgreSQL 容器
docker exec -it postgres psql -U postgres -d datart

# 查看表列表(应该看到 Datart 自动创建的表)
\dt

# 预期输出类似:
# user              | datart_user      | table | datart_user
# organization      | datart_user      | table | datart_user
# source            | datart_user      | table | datart_user
# view              | datart_user      | table | datart_user
# ...

5.2 访问 Web 界面

  1. 打开浏览器访问:http://你的服务器IP:8080
  2. 首次访问需要注册管理员账号
  3. 登录后创建测试报表或上传文件

5.3 验证文件持久化

bash 复制代码
# 在 Datart 中上传一个测试文件(如图片)
# 然后检查宿主机目录
ls -la /data/datart/files/
# 应该能看到上传的文件

5.4 验证数据持久化

bash 复制代码
# 重启容器
docker restart datart

# 再次访问 Web 界面,确认以下内容未丢失:
# - 管理员账号可以正常登录
# - 之前创建的报表依然存在
# - 上传的文件依然可用

六、高级配置

6.1 使用 Docker Compose 部署(推荐)

创建 docker-compose.yml 文件:

yaml 复制代码
version: '3.8'

services:
  postgres:
    image: postgres:13
    container_name: datart-postgres
    restart: unless-stopped
    environment:
      POSTGRES_DB: datart
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: your_password
    volumes:
      - ./postgres/data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    networks:
      - datart-network

  datart:
    image: registry.cn-hangzhou.aliyuncs.com/qiluo-images/datart:latest
    container_name: datart
    restart: unless-stopped
    depends_on:
      - postgres
    ports:
      - "8080:8080"
    volumes:
      - ./datart/config/datart.conf:/datart/config/datart.conf
      - ./datart/files:/datart/files
      - ./datart/logs:/datart/logs
    networks:
      - datart-network

networks:
  datart-network:
    driver: bridge

启动服务:

bash 复制代码
# 启动所有服务
docker-compose up -d

# 查看日志
docker-compose logs -f datart

# 停止服务
docker-compose down

# 停止并删除数据(谨慎使用)
docker-compose down -v

6.2 SSL/HTTPS 配置(可选)

如需启用 HTTPS,建议使用 Nginx 反向代理:

nginx 复制代码
server {
    listen 443 ssl http2;
    server_name datart.yourdomain.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

七、常见问题排查

7.1 容器启动失败

bash 复制代码
# 查看详细错误日志
docker logs datart

# 常见错误及解决
错误信息 原因 解决方案
Connection refused PostgreSQL 未启动或端口不通 检查 PostgreSQL 状态:`docker ps
Database "datart" does not exist 数据库未创建 手动创建数据库:CREATE DATABASE datart;
Password authentication failed 密码错误 检查配置文件中的密码是否正确
ClassNotFoundException: org.postgresql.Driver 缺少 PostgreSQL 驱动 镜像已内置驱动,检查镜像是否完整

7.2 PostgreSQL 连接问题

bash 复制代码
# 测试从容器内连接 PostgreSQL
docker exec -it datart bash
apt-get update && apt-get install -y postgresql-client
psql -h 宿主机IP -p 5432 -U postgres -d datart

# 如果连接失败,检查:
# 1. PostgreSQL 是否允许远程连接
docker exec -it postgres cat /var/lib/postgresql/data/pg_hba.conf
# 应包含:host all all 0.0.0.0/0 md5

# 2. 防火墙是否开放 5432 端口
iptables -L -n | grep 5432

7.3 内存不足问题

如果服务器内存不足,调整 JVM 参数:

bash 复制代码
docker run -d \
  --name datart \
  --restart unless-stopped \
  -p 8080:8080 \
  -e JAVA_OPTS="-Xms512m -Xmx1024m" \
  -v /data/datart/config/datart.conf:/datart/config/datart.conf \
  -v /data/datart/files:/datart/files \
  -v /data/datart/logs:/datart/logs \
  registry.cn-hangzhou.aliyuncs.com/qiluo-images/datart:latest

7.4 配置文件未生效

bash 复制代码
# 检查容器内的配置文件内容
docker exec datart cat /datart/config/datart.conf

# 检查环境变量
docker exec datart env | grep -E "(DATASOURCE|JDBC)"

# 如果配置未生效,重启容器
docker restart datart

八、备份与恢复

8.1 数据库备份

bash 复制代码
# 备份 PostgreSQL 数据库
docker exec postgres pg_dump -U postgres datart > datart_backup_$(date +%Y%m%d).sql

# 恢复数据库
cat datart_backup_20240101.sql | docker exec -i postgres psql -U postgres -d datart

8.2 文件备份

bash 复制代码
# 备份上传的文件
tar -czf datart_files_backup_$(date +%Y%m%d).tar.gz /data/datart/files/

# 恢复文件
tar -xzf datart_files_backup_20240101.tar.gz -C /

8.3 完整备份脚本

创建备份脚本 /home/datart/backup.sh

bash 复制代码
#!/bin/bash
BACKUP_DIR="/data/datart/backups"
DATE=$(date +%Y%m%d_%H%M%S)

# 创建备份目录
mkdir -p $BACKUP_DIR

# 备份数据库
docker exec postgres pg_dump -U postgres datart > $BACKUP_DIR/datart_db_$DATE.sql

# 备份文件
tar -czf $BACKUP_DIR/datart_files_$DATE.tar.gz /data/datart/files/

# 备份配置文件
cp /data/datart/config/datart.conf $BACKUP_DIR/datart_conf_$DATE.conf

# 删除 30 天前的备份
find $BACKUP_DIR -name "datart_*" -mtime +30 -delete

echo "Backup completed: $DATE"

添加定时任务:

bash 复制代码
chmod +x /data/datart/backup.sh
echo "0 2 * * * /home/datart/backup.sh" | crontab -

九、监控与维护

9.1 查看资源使用

bash 复制代码
# 查看容器资源占用
docker stats datart postgres

# 查看日志大小
du -sh /data/datart/logs/

9.2 日志轮转配置

创建 /etc/logrotate.d/datart

复制代码
/data/datart/logs/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    copytruncate
}

9.3 性能优化建议

  1. 数据库优化:根据数据量调整 PostgreSQL 共享内存
  2. JVM 优化 :根据服务器内存调整 -Xmx 参数
  3. 连接池优化 :根据并发用户数调整 maximum-pool-size

十、总结

通过以上配置,Datart 已经成功部署在 Docker 中,并使用 PostgreSQL 作为持久化存储。该方案具有以下优势:

  • 数据持久化:所有数据存储在外部 PostgreSQL 数据库
  • 文件持久化:上传文件存储在宿主机目录
  • 配置持久化:配置文件挂载到宿主机
  • 易于迁移:容器可随时重建而不丢失数据
  • 便于备份:数据库和文件可独立备份

快速命令参考

bash 复制代码
# 启动
docker start datart

# 停止
docker stop datart

# 重启
docker restart datart

# 查看日志
docker logs -f datart

# 进入容器
docker exec -it datart bash

# 删除容器(数据不会丢失)
docker rm -f datart

# 重新创建容器(使用相同挂载)
docker run -d --name datart \
  -p 8080:8080 \
  -v /data/datart/config/datart.conf:/datart/config/datart.conf \
  -v /data/datart/files:/datart/files \
  -v /data/datart/logs:/datart/logs \
  registry.cn-hangzhou.aliyuncs.com/qiluo-images/datart:latest

如有问题,请检查日志输出并根据错误信息进行排查。

相关推荐
l1t2 小时前
解决用docker安装umbra数据库遇到的FATAL:Operation not permitted错误
数据库·docker·容器
last demo2 小时前
docker存储
运维·docker·容器
无名-CODING3 小时前
从零开始!Vue3+SpringBoot前后端分离项目Docker部署实战(上):环境搭建与数据库容器化
数据库·spring boot·docker
向往着的青绿色3 小时前
雷池(SafeLine)社区版免费部署教程|从环境检查到防护实操全流程
网络·计算机网络·nginx·网络安全·容器·网络攻击模型·信息与通信
Sst的头号粉丝3 小时前
Kubernetes——介绍
云原生·容器·kubernetes
木二_3 小时前
057.Kubernetes cert-manager ACME方案介绍
云原生·容器·kubernetes·证书·cert-manager·证书管理
SEO-狼术5 小时前
Detect Aurora PostgreSQL Issues Faster
数据库·postgresql
危笑ioi5 小时前
基于Kubeconfig实现K8s节点免密登录
云原生·容器·kubernetes
木二_5 小时前
058.Kubernetes cert-manager 申请证书及ingress注解介绍
云原生·容器·kubernetes·cert-manager·证书管理