MaxKB4j智能问答系统Docker部署指南
1. MaxKB4j 项目概述与部署价值
MaxKB4j 是一个基于知识库构建的智能问答系统,它能够将企业文档、产品手册等非结构化数据转化为可交互的知识库。采用 Docker Compose 部署方式,可以在 10 分钟内完成生产级环境搭建,特别适合需要快速构建内部知识管理系统的技术团队。
我在实际部署中发现,相比传统虚拟机部署方案,Docker Compose 方案具有三大核心优势:
- 环境隔离性 :所有服务(MySQL、Redis、MaxKB4j)运行在独立容器中,避免依赖冲突
- 一键启停 :通过 compose 文件定义的服务拓扑,可以用单条命令管理整个系统生命周期
- 版本可控 :所有镜像版本明确记录在 compose 文件中,方便后续升级和回滚
重要提示:部署前请确保 Docker 已安装且版本不低于 20.10.14,Docker Compose 版本需 v2.5.0 以上。可通过
docker --version和docker compose version命令验证。
2. 部署环境准备与配置解析
2.1 基础环境要求
以下是经过实测的推荐环境配置:
| 组件 | 最低配置 | 推荐配置 | 说明 |
|---|---|---|---|
| CPU | 2核 | 4核 | 需要支持 AVX 指令集 |
| 内存 | 4GB | 8GB | 小规模知识库可降至 4GB |
| 磁盘 | 20GB | 50GB | 建议使用 SSD 存储 |
| OS | Ubuntu 18.04 | Ubuntu 22.04 | 需内核版本 ≥ 5.4 |
对于国内用户,建议提前配置镜像加速:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
sudo systemctl restart docker
2.2 网络与端口规划
MaxKB4j 默认使用以下端口:
- 3000:前端 Web 界面
- 8080:后端 API 服务
- 3306:MySQL 数据库
- 6379:Redis 缓存
如果这些端口已被占用,需要在 compose 文件中修改端口映射。我建议采用以下两种方案之一:
- 端口映射 :保持容器内端口不变,修改主机端口(如 "3000:3000" 改为 "3001:3000")
- 自定义网络 :创建独立 Docker 网络,避免端口冲突
3. Docker Compose 文件深度解析
3.1 标准部署配置
创建
docker-compose.yml
文件,内容如下:
version: '3.8'
services:
mysql:
image: mysql:8.0.32
container_name: maxkb-mysql
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-MaxKB@123}
MYSQL_DATABASE: maxkb
MYSQL_USER: maxkb
MYSQL_PASSWORD: ${DB_PASSWORD:-MaxKB@456}
volumes:
- mysql_data:/var/lib/mysql
ports:
- "3306:3306"
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 5s
timeout: 10s
retries: 10
redis:
image: redis:7.0.11
container_name: maxkb-redis
ports:
- "6379:6379"
volumes:
- redis_data:/data
command: redis-server --requirepass ${REDIS_PASSWORD:-MaxKB@789}
app:
image: maxkb4j:latest
container_name: maxkb-app
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_started
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/maxkb?useSSL=false&serverTimezone=UTC
SPRING_DATASOURCE_USERNAME: maxkb
SPRING_DATASOURCE_PASSWORD: ${DB_PASSWORD:-MaxKB@456}
SPRING_REDIS_HOST: redis
SPRING_REDIS_PASSWORD: ${REDIS_PASSWORD:-MaxKB@789}
ports:
- "8080:8080"
- "3000:3000"
volumes:
- upload_data:/app/uploads
volumes:
mysql_data:
redis_data:
upload_data:
3.2 关键配置说明
-
数据库配置 :
- 使用环境变量注入密码,避免硬编码
- 健康检查确保服务依赖顺序
- 数据卷持久化防止重启丢失
-
Redis 配置 :
- 通过 command 参数设置访问密码
- AOF 持久化默认开启
-
应用配置 :
- depends_on 控制启动顺序
- 上传目录挂载到数据卷
- 多端口映射支持前后端分离
安全建议:生产环境务必修改默认密码,可通过创建
.env文件管理敏感信息:
DB_ROOT_PASSWORD=YourStrongPassword
DB_PASSWORD=YourDBPassword
REDIS_PASSWORD=YourRedisPass
4. 部署流程与初始化操作
4.1 启动与验证
执行以下命令启动服务:
docker compose up -d
检查服务状态:
docker compose ps
预期输出应显示所有容器状态为
running
:
NAME COMMAND SERVICE STATUS PORTS
maxkb-app "java -jar /app.jar" app running 0.0.0.0:3000->3000/tcp, 0.0.0.0:8080->8080/tcp
maxkb-mysql "docker-entrypoint.s…" mysql running 0.0.0.0:3306->3306/tcp
maxkb-redis "docker-entrypoint.s…" redis running 0.0.0.0:6379->6379/tcp
4.2 系统初始化
-
访问
http://服务器IP:3000进入安装向导 - 填写管理员账号信息
- 配置SMTP服务(可选)
- 上传知识库文档(支持PDF/DOCX/TXT)
常见初始化问题处理:
-
端口无法访问
:检查防火墙设置
sudo ufw allow 3000/tcp -
数据库连接失败
:查看MySQL日志
docker logs maxkb-mysql -
内存不足
:调整JVM参数
-Xmx2g -Xms1g
5. 生产环境优化方案
5.1 性能调优建议
修改 app 服务的部署配置:
app:
deploy:
resources:
limits:
cpus: '2'
memory: 4G
reservations:
memory: 2G
推荐JVM参数:
environment:
JAVA_OPTS: "-server -Xms2g -Xmx2g -XX:+UseG1GC"
5.2 高可用部署
对于关键业务场景,建议:
- MySQL 配置主从复制
- Redis 启用哨兵模式
- 应用服务横向扩展
示例多节点配置:
app:
image: maxkb4j:latest
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
6. 日常维护与问题排查
6.1 常用运维命令
# 查看实时日志
docker compose logs -f app
# 执行数据库备份
docker exec maxkb-mysql sh -c 'exec mysqldump -umaxkb -p"$MYSQL_PASSWORD" maxkb' > backup.sql
# 清理过期上传文件
docker exec maxkb-app find /app/uploads -type f -mtime +30 -delete
6.2 典型问题处理指南
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 502 Bad Gateway | 应用服务崩溃 | 检查JVM内存设置 |
| 数据库连接超时 | MySQL未启动 | 查看容器日志 |
| 上传失败 | 磁盘空间不足 |
执行
docker system prune
|
| 搜索无结果 | 索引未构建 | 重新导入知识库 |
我在实际运维中总结的经验:
- 每周检查一次磁盘使用情况
- 每月执行一次数据库优化
- 重大更新前务必备份数据卷
更多推荐
所有评论(0)