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

 更新时间:2026年03月21日 15:07:46   作者:❀͜͡傀儡师  
本文档详细介绍如何使用Docker部署Datart数据可视化平台,并使用PostgreSQL作为元数据库实现数据持久化存储,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

一、概述

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

环境要求

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

二、准备 PostgreSQL 数据库

2.1 安装 PostgreSQL(如未安装)

使用 Docker 部署 PostgreSQL(推荐):

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):

apt-get update
apt-get install -y postgresql-13
systemctl start postgresql

2.2 创建 Datart 数据库

连接到 PostgreSQL 并创建数据库:

# 使用 Docker 部署的 PostgreSQL
docker exec -it postgres psql -U postgres
# 或使用系统安装的 PostgreSQL
sudo -u postgres psql

执行以下 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 创建持久化目录

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

3.2 编写配置文件

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

# ============================================
# 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 配置文件权限设置

# 确保配置文件可读
chmod 644 /data/datart/config/datart.conf

四、部署 Datart

4.1 拉取镜像

# 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 启动容器

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 验证启动状态

# 查看容器运行状态
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 查看表结构:

# 进入 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 验证文件持久化

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

5.4 验证数据持久化

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

六、高级配置

6.1 使用 Docker Compose 部署(推荐)

创建 docker-compose.yml 文件:

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

启动服务:

# 启动所有服务
docker-compose up -d
# 查看日志
docker-compose logs -f datart
# 停止服务
docker-compose down
# 停止并删除数据(谨慎使用)
docker-compose down -v

6.2 SSL/HTTPS 配置(可选)

如需启用 HTTPS,建议使用 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 容器启动失败

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

7.2 PostgreSQL 连接问题

# 测试从容器内连接 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 参数:

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 配置文件未生效

# 检查容器内的配置文件内容
docker exec datart cat /datart/config/datart.conf
# 检查环境变量
docker exec datart env | grep -E "(DATASOURCE|JDBC)"
# 如果配置未生效,重启容器
docker restart datart

八、备份与恢复

8.1 数据库备份

# 备份 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 文件备份

# 备份上传的文件
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

#!/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"

添加定时任务:

chmod +x /data/datart/backup.sh
echo "0 2 * * * /home/datart/backup.sh" | crontab -

九、监控与维护

9.1 查看资源使用

# 查看容器资源占用
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 数据库
  • 文件持久化:上传文件存储在宿主机目录
  • 配置持久化:配置文件挂载到宿主机
  • 易于迁移:容器可随时重建而不丢失数据
  • 便于备份:数据库和文件可独立备份

快速命令参考

# 启动
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

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

到此这篇关于Docker 部署Datart BI工具完整指南(PostgreSQL 持久化存储)的文章就介绍到这了,更多相关Docker 部署Datart BI内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决docker数据文件过大导致根磁盘满的问题

    解决docker数据文件过大导致根磁盘满的问题

    本篇文章主要介绍了解决docker数据文件过大导致根磁盘满的问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-04-04
  • Dockerfile制作镜像的常用指令详解

    Dockerfile制作镜像的常用指令详解

    这篇文章主要介绍了Dockerfile制作镜像的常用指令,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-02-02
  • docker容器访问宿主机host设置的域名方式

    docker容器访问宿主机host设置的域名方式

    文章讨论了在Docker容器中访问宿主机的网络设置,特别是当容器内的服务需要请求一个在宿主机hosts文件中定义的域名时,通过使用`--network=host`模式,容器可以直接使用宿主机的网络,从而无需通过Docker网关,这样可以避免端口冲突
    2025-12-12
  • Docker 解决获取容器获取的时间不是本地时间的问题

    Docker 解决获取容器获取的时间不是本地时间的问题

    这篇文章主要介绍了Docker 解决获取容器获取的时间不是本地时间的问题的相关资料,需要的朋友可以参考下
    2016-11-11
  • 使用Maven打包构建Docker镜像并推送到仓库

    使用Maven打包构建Docker镜像并推送到仓库

    这篇文章主要介绍了使用Maven打包构建Docker镜像并推送到仓库问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 使用docker快速搭建Spark集群的方法教程

    使用docker快速搭建Spark集群的方法教程

    通过使用 Docker,可以快速的在本地搭建一套 Spark 环境,方便大家开发 Spark 应用,或者扩展到生产环境。下面这篇文章主要给大家介绍了使用docker快速搭建Spark集群的方法教程,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-06-06
  • Docker搭建私有仓库之Harbor的步骤

    Docker搭建私有仓库之Harbor的步骤

    这篇文章主要介绍了Docker搭建私有仓库之Harbor的步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • 从入门到实战全面解析Docker镜像常用命令

    从入门到实战全面解析Docker镜像常用命令

    Docker 作为容器化技术的标杆工具,其镜像管理能力是实现高效 CI/CD 流程的核心,本文将为大家带来Docker 镜像常用命令的全方位解析,希望对大家有所帮助
    2025-11-11
  • docker安装nginx实现对springboot项目的负载均衡的操作方法

    docker安装nginx实现对springboot项目的负载均衡的操作方法

    这篇文章主要介绍了docker安装nginx实现对springboot项目的负载均衡的操作方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • Docker使用Git实现Jenkins发布、测试项目的详细流程

    Docker使用Git实现Jenkins发布、测试项目的详细流程

    这篇文章主要介绍了Docker使用Git实现Jenkins发布、测试项目的详细流程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04

最新评论