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

一、概述
本文檔詳細(xì)介紹如何使用 Docker 部署 Datart 數(shù)據(jù)可視化平臺,并使用 PostgreSQL 作為元數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)持久化存儲。采用此方案后,即使容器被刪除重建,所有配置、用戶、報表等數(shù)據(jù)均不會丟失。
環(huán)境要求
- Docker 18.09+
- PostgreSQL 16.4+(或更高版本)
- 服務(wù)器內(nèi)存:建議 2GB 以上
- 開放端口:8080(Datart)、5432(PostgreSQL)
二、準(zhǔn)備 PostgreSQL 數(shù)據(jù)庫
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
或使用系統(tǒng)包管理器安裝(Ubuntu/Debian):
apt-get update apt-get install -y postgresql-13 systemctl start postgresql
2.2 創(chuàng)建 Datart 數(shù)據(jù)庫
連接到 PostgreSQL 并創(chuàng)建數(shù)據(jù)庫:
# 使用 Docker 部署的 PostgreSQL docker exec -it postgres psql -U postgres # 或使用系統(tǒng)安裝的 PostgreSQL sudo -u postgres psql
執(zhí)行以下 SQL 命令:
-- 創(chuàng)建數(shù)據(jù)庫(注意字符集) CREATE DATABASE datart WITH ENCODING='UTF8' LC_COLLATE='en_US.UTF-8' LC_CTYPE='en_US.UTF-8' TEMPLATE=template0; -- 可選:創(chuàng)建專用用戶 CREATE USER datart_user WITH PASSWORD 'datart_password'; -- 授予權(quán)限 GRANT ALL PRIVILEGES ON DATABASE datart TO datart_user; -- 退出 \q
三、配置 Datart
3.1 創(chuàng)建持久化目錄
# 創(chuàng)建配置、文件、日志存儲目錄 mkdir -p /data/datart/config mkdir -p /data/datart/files mkdir -p /data/datart/logs
3.2 編寫配置文件
創(chuàng)建配置文件 /data/datart/config/datart.conf:
# ============================================ # Datart 配置文件(PostgreSQL 版本) # ============================================ # ---------- PostgreSQL 數(shù)據(jù)庫連接 ---------- # 數(shù)據(jù)庫服務(wù)器地址(可以是 IP、域名或容器名) datasource.ip=127.0.0.1 datasource.port=5432 datasource.database=datart datasource.username=postgres datasource.password=your_password # JDBC 驅(qū)動配置 datasource.driver-class-name=org.postgresql.Driver datasource.url=jdbc:postgresql://127.0.0.1:5432/datart # ---------- 連接池配置 ---------- # 最大連接數(shù)(根據(jù)服務(wù)器性能調(diào)整) 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 # ---------- 服務(wù)配置 ---------- # 服務(wù)端口 server.port=8080 # 服務(wù)監(jiān)聽地址(0.0.0.0 表示所有網(wǎng)卡) server.address=0.0.0.0 # 會話超時時間(分鐘) server.servlet.session.timeout=30m # ---------- Datart 應(yīng)用配置 ---------- # 應(yīng)用訪問地址(必須修改為實際服務(wù)器地址) datart.address=http://your-server-ip:8080 # 文件存儲路徑(容器內(nèi)路徑) datart.filepath=/datart/files # 關(guān)閉郵件功能(如不需要發(fā)送郵件) datart.send-mail=false # ---------- 日志配置 ---------- # 日志級別(DEBUG/INFO/WARN/ERROR) logging.level.com.datart=INFO logging.level.org.springframework.web=INFO # 日志文件路徑 logging.file.path=/datart/logs # ---------- 其他配置 ---------- # 是否允許注冊(生產(chǎn)環(huán)境建議關(guān)閉) datart.user.registration.enabled=true # 默認(rèn)時區(qū) spring.jackson.time-zone=Asia/Shanghai
3.3 配置文件權(quán)限設(shè)置
# 確保配置文件可讀 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
參數(shù)說明:
-d:后臺運行--name datart:容器名稱--restart unless-stopped:自動重啟-p 8080:8080:端口映射-v:掛載持久化目錄
4.3 驗證啟動狀態(tài)
# 查看容器運行狀態(tài) docker ps | grep datart # 查看啟動日志 docker logs -f datart # 預(yù)期輸出(關(guān)鍵信息) # Started DatartServerApplication in X.XXX seconds # HikariPool-1 - Start completed. # Tomcat started on port(s): 8080 (http)
五、驗證持久化存儲
5.1 驗證數(shù)據(jù)庫連接
進(jìn)入 PostgreSQL 查看表結(jié)構(gòu):
# 進(jìn)入 PostgreSQL 容器 docker exec -it postgres psql -U postgres -d datart # 查看表列表(應(yīng)該看到 Datart 自動創(chuàng)建的表) \dt # 預(yù)期輸出類似: # 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://你的服務(wù)器IP:8080 - 首次訪問需要注冊管理員賬號
- 登錄后創(chuàng)建測試報表或上傳文件
5.3 驗證文件持久化
# 在 Datart 中上傳一個測試文件(如圖片) # 然后檢查宿主機(jī)目錄 ls -la /data/datart/files/ # 應(yīng)該能看到上傳的文件
5.4 驗證數(shù)據(jù)持久化
# 重啟容器 docker restart datart # 再次訪問 Web 界面,確認(rèn)以下內(nèi)容未丟失: # - 管理員賬號可以正常登錄 # - 之前創(chuàng)建的報表依然存在 # - 上傳的文件依然可用
六、高級配置
6.1 使用 Docker Compose 部署(推薦)
創(chuàng)建 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啟動服務(wù):
# 啟動所有服務(wù) docker-compose up -d # 查看日志 docker-compose logs -f datart # 停止服務(wù) docker-compose down # 停止并刪除數(shù)據(jù)(謹(jǐn)慎使用) 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 容器啟動失敗
# 查看詳細(xì)錯誤日志 docker logs datart # 常見錯誤及解決
| 錯誤信息 | 原因 | 解決方案 |
|---|---|---|
Connection refused | PostgreSQL 未啟動或端口不通 | 檢查 PostgreSQL 狀態(tài):docker ps | grep postgres |
Database "datart" does not exist | 數(shù)據(jù)庫未創(chuàng)建 | 手動創(chuàng)建數(shù)據(jù)庫:CREATE DATABASE datart; |
Password authentication failed | 密碼錯誤 | 檢查配置文件中的密碼是否正確 |
ClassNotFoundException: org.postgresql.Driver | 缺少 PostgreSQL 驅(qū)動 | 鏡像已內(nèi)置驅(qū)動,檢查鏡像是否完整 |
7.2 PostgreSQL 連接問題
# 測試從容器內(nèi)連接 PostgreSQL docker exec -it datart bash apt-get update && apt-get install -y postgresql-client psql -h 宿主機(jī)IP -p 5432 -U postgres -d datart # 如果連接失敗,檢查: # 1. PostgreSQL 是否允許遠(yuǎn)程連接 docker exec -it postgres cat /var/lib/postgresql/data/pg_hba.conf # 應(yīng)包含:host all all 0.0.0.0/0 md5 # 2. 防火墻是否開放 5432 端口 iptables -L -n | grep 5432
7.3 內(nèi)存不足問題
如果服務(wù)器內(nèi)存不足,調(diào)整 JVM 參數(shù):
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 配置文件未生效
# 檢查容器內(nèi)的配置文件內(nèi)容 docker exec datart cat /datart/config/datart.conf # 檢查環(huán)境變量 docker exec datart env | grep -E "(DATASOURCE|JDBC)" # 如果配置未生效,重啟容器 docker restart datart
八、備份與恢復(fù)
8.1 數(shù)據(jù)庫備份
# 備份 PostgreSQL 數(shù)據(jù)庫 docker exec postgres pg_dump -U postgres datart > datart_backup_$(date +%Y%m%d).sql # 恢復(fù)數(shù)據(jù)庫 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/ # 恢復(fù)文件 tar -xzf datart_files_backup_20240101.tar.gz -C /
8.3 完整備份腳本
創(chuàng)建備份腳本 /home/datart/backup.sh:
#!/bin/bash BACKUP_DIR="/data/datart/backups" DATE=$(date +%Y%m%d_%H%M%S) # 創(chuàng)建備份目錄 mkdir -p $BACKUP_DIR # 備份數(shù)據(jù)庫 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"
添加定時任務(wù):
chmod +x /data/datart/backup.sh echo "0 2 * * * /home/datart/backup.sh" | crontab -
九、監(jiān)控與維護(hù)
9.1 查看資源使用
# 查看容器資源占用 docker stats datart postgres # 查看日志大小 du -sh /data/datart/logs/
9.2 日志輪轉(zhuǎn)配置
創(chuàng)建 /etc/logrotate.d/datart:
/data/datart/logs/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
copytruncate
}
9.3 性能優(yōu)化建議
- 數(shù)據(jù)庫優(yōu)化:根據(jù)數(shù)據(jù)量調(diào)整 PostgreSQL 共享內(nèi)存
- JVM 優(yōu)化:根據(jù)服務(wù)器內(nèi)存調(diào)整
-Xmx參數(shù) - 連接池優(yōu)化:根據(jù)并發(fā)用戶數(shù)調(diào)整
maximum-pool-size
十、總結(jié)
通過以上配置,Datart 已經(jīng)成功部署在 Docker 中,并使用 PostgreSQL 作為持久化存儲。該方案具有以下優(yōu)勢:
- ? 數(shù)據(jù)持久化:所有數(shù)據(jù)存儲在外部 PostgreSQL 數(shù)據(jù)庫
- ? 文件持久化:上傳文件存儲在宿主機(jī)目錄
- ? 配置持久化:配置文件掛載到宿主機(jī)
- ? 易于遷移:容器可隨時重建而不丟失數(shù)據(jù)
- ? 便于備份:數(shù)據(jù)庫和文件可獨立備份
快速命令參考
# 啟動 docker start datart # 停止 docker stop datart # 重啟 docker restart datart # 查看日志 docker logs -f datart # 進(jìn)入容器 docker exec -it datart bash # 刪除容器(數(shù)據(jù)不會丟失) docker rm -f datart # 重新創(chuàng)建容器(使用相同掛載) 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
如有問題,請檢查日志輸出并根據(jù)錯誤信息進(jìn)行排查。
到此這篇關(guān)于Docker 部署Datart BI工具完整指南(PostgreSQL 持久化存儲)的文章就介紹到這了,更多相關(guān)Docker 部署Datart BI內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Ubuntu16.04Docker的CS模式詳細(xì)介紹
這篇文章主要介紹了Ubuntu16.04Docker的CS模式詳細(xì)介紹的相關(guān)資料,這里對Docker CS模式圖文詳細(xì)介紹,需要的朋友可以參考下2016-12-12
解決docker pull被復(fù)位出現(xiàn)的問題
這篇文章主要介紹了解決docker pull被復(fù)位出現(xiàn)的問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09
docker對網(wǎng)絡(luò)和程序速度的影響解讀
本文通過對比分析,測試了在宿主機(jī)和Docker容器中部署Spring Boot程序的性能差異,在網(wǎng)絡(luò)延遲方面,Docker容器比宿主機(jī)慢0.1~0.2毫秒,在程序運行速度方面,宿主機(jī)和Docker容器的平均運行時間相近,單次運行時間存在較大差異,無法確定Docker容器在速度上優(yōu)于宿主機(jī)2025-01-01
CentOS7.6系統(tǒng)下Docker安裝部署教程
這篇文章主要為大家介紹了CentOS7.6系統(tǒng)下Docker的安裝部署教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04
關(guān)于docker部署fastapi項目以及日志掛載方式
這篇文章主要介紹了關(guān)于docker部署fastapi項目以及日志掛載方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03

