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 界面
- 打开浏览器访问:
http://你的服务器IP:8080 - 首次访问需要注册管理员账号
- 登录后创建测试报表或上传文件
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 性能优化建议
- 数据库优化:根据数据量调整 PostgreSQL 共享内存
- JVM 优化 :根据服务器内存调整
-Xmx参数 - 连接池优化 :根据并发用户数调整
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
如有问题,请检查日志输出并根据错误信息进行排查。