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

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

相关推荐
功德+n6 小时前
Linux下安装与配置Docker完整详细步骤
linux·运维·服务器·开发语言·docker·centos
阿里小阿希6 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
小敬爱吃饭6 小时前
Ragflow Docker部署及问题解决方案(界面为Welcome to nginx,ragflow上传文件失败,Docker中的ragflow-cpu-1一直重启)
人工智能·python·nginx·docker·语言模型·容器·数据挖掘
木子欢儿7 小时前
Docker Hub 镜像发布指南
java·spring cloud·docker·容器·eureka
WangJunXiang67 小时前
第09章:PostgreSQL日常维护
数据库·postgresql
coppher8 小时前
Ubuntu 22.04 amd64 离线安装 Docker 完整教程
linux·docker
dyyshb9 小时前
PostgreSQL 终极兜底方案
数据库·postgresql
虚伪的空想家10 小时前
k8s集群configmap和secrets备份脚本
linux·容器·kubernetes
SXJR10 小时前
k8s中的Pod
云原生·容器·kubernetes
文静小土豆10 小时前
K8s 滚动更新在 Java 应用中的实践与优化
java·容器·kubernetes