# 创建数据存储目录
mkdir -p /opt/know-engine/data/{mysql,redis,elasticsearch,neo4j,minio,xxl-job}
# 进入项目目录
cd /opt/know-enginedocker run -d \
--name know-engine-mysql \
--restart unless-stopped \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=know_engine \
-e MYSQL_USER=know_engine \
-e MYSQL_PASSWORD=know_engine \
-e TZ=Asia/Shanghai \
-v /opt/know-engine/data/mysql:/var/lib/mysql \
-v $(pwd)/src/main/resources/sql:/docker-entrypoint-initdb.d \
mysql:8.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci等待启动:
# 等待 10 秒
sleep 10
# 检查是否启动成功
docker ps | grep mysql
# 测试连接
docker exec know-engine-mysql mysql -u know_engine -pknow_engine -e "SELECT 1"账号信息:
- 用户名:
know_engine - 密码:
know_engine - 端口:
3306
docker run -d \
--name know-engine-redis \
--restart unless-stopped \
-p 6379:6379 \
-e TZ=Asia/Shanghai \
-v /opt/know-engine/data/redis:/data \
redis:7-alpine \
redis-server --requirepass knowengine等待启动:
# 等待 3 秒
sleep 3
# 检查是否启动成功
docker ps | grep redis
# 测试连接
docker exec know-engine-redis redis-cli -a knowengine ping账号信息:
- 密码:
knowengine - 端口:
6379
docker run -d
--name know-engine-elasticsearch
--restart unless-stopped
-p 9200:9200
-p 9300:9300
-e discovery.type=single-node
-e xpack.security.enabled=false
-e xpack.security.http.ssl.enabled=false
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"
-e TZ=Asia/Shanghai
-v /opt/know-engine/data/elasticsearch:/usr/share/elasticsearch/data
elasticsearch:8.11.0
等待启动:
# 等待 15 秒(ES 启动较慢)
sleep 15
# 检查是否启动成功
docker ps | grep elasticsearch
# 测试连接
curl http://localhost:9200访问地址:
- API:
http://你的服务器IP:9200 - 无需账号密码(已关闭安全认证)
docker run -d \
--name know-engine-neo4j \
--restart unless-stopped \
-p 7474:7474 \
-p 7687:7687 \
-e NEO4J_AUTH=neo4j/neo4j666 \
-e NEO4J_PLUGINS='["apoc"]' \
-e NEO4J_dbms_security_procedures_unrestricted="apoc.*" \
-e NEO4J_server_memory_heap_initial__size=512m \
-e NEO4J_server_memory_heap_max__size=512m \
-e TZ=Asia/Shanghai \
-v /opt/know-engine/data/neo4j/data:/data \
-v /opt/know-engine/data/neo4j/logs:/logs \
neo4j:5-community等待启动:
# 等待 15 秒
sleep 15
# 检查是否启动成功
docker ps | grep neo4j
# 测试连接
curl http://localhost:7474账号信息:
- 用户名:
neo4j - 密码:
neo4j666 - Web UI:
http://你的服务器IP:7474 - Bolt 端口:
7687
docker run -d \
--name know-engine-minio \
--restart unless-stopped \
-p 9002:9000 \
-p 9001:9001 \
-e MINIO_ROOT_USER=minioadmin \
-e MINIO_ROOT_PASSWORD=minioadmin \
-e TZ=Asia/Shanghai \
-v /opt/know-engine/data/minio:/data \
minio/minio:RELEASE.2025-04-22T22-12-26Z \
server /data --console-address ":9001"等待启动:
# 等待 5 秒
sleep 5
# 检查是否启动成功
docker ps | grep minio
# 测试连接
curl http://localhost:9000/minio/health/live账号信息:
- 用户名:
minioadmin - 密码:
minioadmin - API 端口:
9000 - Web UI:
http://你的服务器IP:9001
初始化 Bucket:
- 打开浏览器访问
http://你的服务器IP:9001 - 登录:
minioadmin/minioadmin - 点击 "Create Bucket"
- 输入名称:
know-engine - 点击 "Create Bucket" 完成
# 注意:需要先创建 xxl_job 数据库
# 进入 MySQL 创建数据库
docker exec know-engine-mysql mysql -u root -p123456 -e "CREATE DATABASE IF NOT EXISTS xxl_job DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# 启动 XXL-Job
docker run -d \
--name know-engine-xxl-job-admin \
--restart unless-stopped \
-p 8080:8080 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://know-engine-mysql:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai" \
-e SPRING_DATASOURCE_USERNAME=know_engine \
-e SPRING_DATASOURCE_PASSWORD=know_engine \
-e TZ=Asia/Shanghai \
-v /opt/know-engine/data/xxl-job:/data/applogs \
--link know-engine-mysql:mysql \
xuxueli/xxl-job-admin:2.4.0等待启动:
# 等待 10 秒
sleep 10
# 检查是否启动成功
docker ps | grep xxl-job
# 测试连接
curl http://localhost:8080/xxl-job-admin访问地址:
- Web UI:
http://你的服务器IP:8080/xxl-job-admin - 默认账号:
admin - 默认密码:
123456
# 查看所有运行中的容器
docker ps
# 查看所有容器(包括已停止的)
docker ps -a
# 查看某个服务的日志
docker logs know-engine-mysql
docker logs know-engine-redis
docker logs know-engine-elasticsearch
docker logs know-engine-neo4j
docker logs know-engine-minio
docker logs know-engine-xxl-job-admin# 停止单个服务
docker stop know-engine-mysql
docker stop know-engine-redis
docker stop know-engine-elasticsearch
docker stop know-engine-neo4j
docker stop know-engine-minio
docker stop know-engine-xxl-job-admin
# 删除单个容器(停止后才能删除)
docker rm know-engine-mysql
docker rm know-engine-redis
docker rm know-engine-elasticsearch
docker rm know-engine-neo4j
docker rm know-engine-minio
docker rm know-engine-xxl-job-admin# 重启单个服务
docker restart know-engine-mysql
docker restart know-engine-redis
docker restart know-engine-elasticsearch
docker restart know-engine-neo4j
docker restart know-engine-minio
docker restart know-engine-xxl-job-admin# 查看哪个进程占用了端口
lsof -i :3306
netstat -tlnp | grep 3306
# 修改端口映射,比如把 MySQL 改为 13306
docker run -d \
--name know-engine-mysql \
-p 13306:3306 \
... 其他参数不变 ...# 查看容器日志
docker logs know-engine-mysql
# 查看容器详细信息
docker inspect know-engine-mysql
# 进入容器排查问题
docker exec -it know-engine-mysql /bin/bash# 拉取最新镜像
docker pull mysql:8.0
# 停止并删除旧容器
docker stop know-engine-mysql
docker rm know-engine-mysql
# 用新镜像重新创建容器(数据不会丢失,因为有 volume)
docker run -d \
--name know-engine-mysql \
... 其他参数不变 ...# 备份 MySQL
docker exec know-engine-mysql mysqldump -u root -proot123456 know_engine > backup.sql
# 备份所有数据目录
tar -czf know-engine-data-backup.tar.gz /opt/know-engine/data/在本地电脑的 application-dev.yml 中,将所有 你的服务器IP 替换为实际的服务器 IP 地址。
例如,如果服务器 IP 是 47.104.64.223:
spring:
datasource:
url: jdbc:mysql://47.104.64.223:3306/know_engine
data:
redis:
host: 47.104.64.223
elasticsearch:
host: http://47.104.64.223:9200
neo4j:
uri: bolt://47.104.64.223:7687
minio:
url: http://47.104.64.223:9000
xxl:
job:
admin:
addresses: http://47.104.64.223:8080/xxl-job-admin