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(推荐):
dockerrun-d\--namepostgres\--restartalways\-ePOSTGRES_PASSWORD='your_password'\-ePOSTGRES_DB=postgres\-p5432: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-getupdateapt-getinstall-ypostgresql-13 systemctl start postgresql2.2 创建 Datart 数据库
连接到 PostgreSQL 并创建数据库:
# 使用 Docker 部署的 PostgreSQLdockerexec-itpostgres psql-Upostgres# 或使用系统安装的 PostgreSQLsudo-upostgres psql执行以下 SQL 命令:
-- 创建数据库(注意字符集)CREATEDATABASEdatartWITHENCODING='UTF8'LC_COLLATE='en_US.UTF-8'LC_CTYPE='en_US.UTF-8'TEMPLATE=template0;-- 可选:创建专用用户CREATEUSERdatart_userWITHPASSWORD'datart_password';-- 授予权限GRANTALLPRIVILEGESONDATABASEdatartTOdatart_user;-- 退出\q三、配置 Datart
3.1 创建持久化目录
# 创建配置、文件、日志存储目录mkdir-p/data/datart/configmkdir-p/data/datart/filesmkdir-p/data/datart/logs3.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/Shanghai3.3 配置文件权限设置
# 确保配置文件可读chmod644/data/datart/config/datart.conf四、部署 Datart
4.1 拉取镜像
# x86镜像dockerpull registry.cn-hangzhou.aliyuncs.com/qiluo-images/linux_arm64_datart:latest# arrch64镜像dockerpull registry.cn-hangzhou.aliyuncs.com/qiluo-images/datart:latest4.2 启动容器
dockerrun-d\--namedatart\--restartunless-stopped\-p8080: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 验证启动状态
# 查看容器运行状态dockerps|grepdatart# 查看启动日志dockerlogs-fdatart# 预期输出(关键信息)# Started DatartServerApplication in X.XXX seconds# HikariPool-1 - Start completed.# Tomcat started on port(s): 8080 (http)五、验证持久化存储
5.1 验证数据库连接
进入 PostgreSQL 查看表结构:
# 进入 PostgreSQL 容器dockerexec-itpostgres psql-Upostgres-ddatart# 查看表列表(应该看到 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 界面
- 打开浏览器访问:
http://你的服务器IP:8080 - 首次访问需要注册管理员账号
- 登录后创建测试报表或上传文件
5.3 验证文件持久化
# 在 Datart 中上传一个测试文件(如图片)# 然后检查宿主机目录ls-la/data/datart/files/# 应该能看到上传的文件5.4 验证数据持久化
# 重启容器dockerrestart datart# 再次访问 Web 界面,确认以下内容未丢失:# - 管理员账号可以正常登录# - 之前创建的报表依然存在# - 上传的文件依然可用六、高级配置
6.1 使用 Docker Compose 部署(推荐)
创建docker-compose.yml文件:
version:'3.8'services:postgres:image:postgres:13container_name:datart-postgresrestart:unless-stoppedenvironment:POSTGRES_DB:datartPOSTGRES_USER:postgresPOSTGRES_PASSWORD:your_passwordvolumes:-./postgres/data:/var/lib/postgresql/dataports:-"5432:5432"networks:-datart-networkdatart:image:registry.cn-hangzhou.aliyuncs.com/qiluo-images/datart:latestcontainer_name:datartrestart:unless-stoppeddepends_on:-postgresports:-"8080:8080"volumes:-./datart/config/datart.conf:/datart/config/datart.conf-./datart/files:/datart/files-./datart/logs:/datart/logsnetworks:-datart-networknetworks:datart-network:driver:bridge启动服务:
# 启动所有服务docker-composeup-d# 查看日志docker-composelogs-fdatart# 停止服务docker-composedown# 停止并删除数据(谨慎使用)docker-composedown-v6.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 容器启动失败
# 查看详细错误日志dockerlogs datart# 常见错误及解决| 错误信息 | 原因 | 解决方案 |
|---|---|---|
Connection refused | PostgreSQL 未启动或端口不通 | 检查 PostgreSQL 状态:docker ps | grep postgres |
Database "datart" does not exist | 数据库未创建 | 手动创建数据库:CREATE DATABASE datart; |
Password authentication failed | 密码错误 | 检查配置文件中的密码是否正确 |
ClassNotFoundException: org.postgresql.Driver | 缺少 PostgreSQL 驱动 | 镜像已内置驱动,检查镜像是否完整 |
7.2 PostgreSQL 连接问题
# 测试从容器内连接 PostgreSQLdockerexec-itdatartbashapt-getupdate&&apt-getinstall-ypostgresql-client psql-h宿主机IP-p5432-Upostgres-ddatart# 如果连接失败,检查:# 1. PostgreSQL 是否允许远程连接dockerexec-itpostgrescat/var/lib/postgresql/data/pg_hba.conf# 应包含:host all all 0.0.0.0/0 md5# 2. 防火墙是否开放 5432 端口iptables-L-n|grep54327.3 内存不足问题
如果服务器内存不足,调整 JVM 参数:
dockerrun-d\--namedatart\--restartunless-stopped\-p8080:8080\-eJAVA_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:latest7.4 配置文件未生效
# 检查容器内的配置文件内容dockerexecdatartcat/datart/config/datart.conf# 检查环境变量dockerexecdatartenv|grep-E"(DATASOURCE|JDBC)"# 如果配置未生效,重启容器dockerrestart datart八、备份与恢复
8.1 数据库备份
# 备份 PostgreSQL 数据库dockerexecpostgres pg_dump-Upostgres datart>datart_backup_$(date+%Y%m%d).sql# 恢复数据库catdatart_backup_20240101.sql|dockerexec-ipostgres psql-Upostgres-ddatart8.2 文件备份
# 备份上传的文件tar-czfdatart_files_backup_$(date+%Y%m%d).tar.gz /data/datart/files/# 恢复文件tar-xzfdatart_files_backup_20240101.tar.gz-C/8.3 完整备份脚本
创建备份脚本/home/datart/backup.sh:
#!/bin/bashBACKUP_DIR="/data/datart/backups"DATE=$(date+%Y%m%d_%H%M%S)# 创建备份目录mkdir-p$BACKUP_DIR# 备份数据库dockerexecpostgres pg_dump-Upostgres 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-deleteecho"Backup completed:$DATE"添加定时任务:
chmod+x /data/datart/backup.shecho"0 2 * * * /home/datart/backup.sh"|crontab-九、监控与维护
9.1 查看资源使用
# 查看容器资源占用dockerstats 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 性能优化建议
- 数据库优化:根据数据量调整 PostgreSQL 共享内存
- JVM 优化:根据服务器内存调整
-Xmx参数 - 连接池优化:根据并发用户数调整
maximum-pool-size
十、总结
通过以上配置,Datart 已经成功部署在 Docker 中,并使用 PostgreSQL 作为持久化存储。该方案具有以下优势:
- ✅数据持久化:所有数据存储在外部 PostgreSQL 数据库
- ✅文件持久化:上传文件存储在宿主机目录
- ✅配置持久化:配置文件挂载到宿主机
- ✅易于迁移:容器可随时重建而不丢失数据
- ✅便于备份:数据库和文件可独立备份
快速命令参考
# 启动dockerstart datart# 停止dockerstop datart# 重启dockerrestart datart# 查看日志dockerlogs-fdatart# 进入容器dockerexec-itdatartbash# 删除容器(数据不会丢失)dockerrm-fdatart# 重新创建容器(使用相同挂载)dockerrun-d--namedatart\-p8080: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如有问题,请检查日志输出并根据错误信息进行排查。
