前言
仅记录学习过程,有问题欢迎讨论
接上文windows下,贴一个实测可用的在linux下部署nebula+es的流程。由于可能要去客户内部部署(无外网),所以包都得自己提前准备好。
一、部署Nebula
- 在服务器上准备好mkdir nebula-image && cd nebula-image
1、自己手动拉取image:
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vesoft/nebula-metad:v3.8.0
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vesoft/nebula-storaged:v3.8.0
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-ks/docker.io/vesoft/nebula-console:v3.8.0
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vesoft/nebula-graph-studio:v3.10.0
2. 导出所有Nebula镜像为tar包
-
注意是在当前目录下执行,这样会直接保存在当前目录下一起save nebula相关
docker save -o nebula-full-v3.8.0.tar \
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vesoft/nebula-console:v3.8.0
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vesoft/nebula-metad:v3.8.0
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vesoft/nebula-storaged:v3.8.0
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vesoft/nebula-graphd:v3.8.0
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vesoft/nebula-graph-studio:v3.10.0 -
后续在内网使用就不用pull了
-
直接 docker load -i nebula-full-v3.8.0.tar
3. 把你的nebula-docker-compose tar包(如数据/配置包)复制到服务器
- 可用用scp方式或者自己连接上传文件的软件,然后解压
- 然后将logs 和data文件给上文件权限
- chomd -r 777 logs
- chomd -r 777 datas

4.设置Linux内核参数(Nebula必需)
sysctl -w vm.max_map_count=262144
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
5、启动(注意docker-compose.yaml和windows下不一致,我放在后面了,先更新配置)
-
cd到docker-compose.yaml位置,启动Nebula集群
-
docker compose up -d
-
若是不支持该命令改为 docker-compose up -d
-
后面同理注册storaged 的服务到meta中,docker ps -a查询服务若是 up状态则执行以下命令
3.4. 等待 60 秒(让 healthcheck 确保 metad 完全就绪)
sleep 60
3.5. 添加 storage 节点
IP=(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' nebula-storaged) docker-compose exec -it console /usr/local/bin/nebula-console -addr graphd -port 9669 -u root -p nebula -e "ADD HOSTS {IP}:9779;"
3.6. 等待 10 秒后验证
sleep 10
docker-compose exec -it console /usr/local/bin/nebula-console -addr graphd -port 9669 -u root -p nebula -e "SHOW HOSTS;"
docker-compose ps
6、nebula-studio 验证启动
- 服务器ip改为部署服务器ip (ip addr show 查看)
- 进入 http://192.168.1.xx:7001/
输入:graphd,root,nebula,测试登录
docker-compose.yml
注意我这里网段换了(和windows不一致),如果启动失败,可能失败原因时docker-net使用的网段被占用了。
查询脚本如下:
# 列出所有Docker网络的详细信息,并过滤出子网(subnet)相关内容(已经被使用的子网)
docker network inspect $(docker network ls -q) | grep -E "Subnet|Name"
# 检查以下是否被占用
docker network inspect $(docker network ls -q) | grep "172.20.0.0/24"
# 去docker-composee中改
- subnet: 172.20.0.0/24 # 新子网
gateway: 172.20.0.1 # 网关对应子网的第一个IP
yaml
volumes:
metad-data: # metad 数据卷
metad-logs: # metad 日志卷
storaged-data: # storaged 数据卷
storaged-logs: # storaged 日志卷
graphd-data: # graphd 数据卷
graphd-logs: # graphd 日志卷
services:
metad:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vesoft/nebula-metad:v3.8.0
container_name: nebula-metad
restart: always
volumes:
- metad-data:/usr/local/nebula/data
- metad-logs:/usr/local/nebula/logs
command:
- /usr/local/nebula/bin/nebula-metad
- --meta_server_addrs=172.20.0.10:9559
- --local_ip=172.20.0.10 # 关键:改为容器名,允许外部连接
- --ws_ip=0.0.0.0
- --port=9559
- --ws_http_port=19559
- --log_dir=/usr/local/nebula/logs
- --v=1
# 关键:添加 healthcheck,确保完全就绪后再接受依赖
healthcheck:
test: ["CMD", "bash", "-c", "timeout 2 bash -c 'cat < /dev/null > /dev/tcp/localhost/9559'"]
interval: 10s
timeout: 5s
retries: 6
start_period: 30s # 给 metad 30 秒初始化时间
networks:
nebula-net:
ipv4_address: 172.20.0.10
storaged:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vesoft/nebula-storaged:v3.8.0
container_name: nebula-storaged
restart: always
volumes:
- storaged-data:/usr/local/nebula/data
- storaged-logs:/usr/local/nebula/logs
command:
- /usr/local/nebula/bin/nebula-storaged
- --meta_server_addrs=172.20.0.10:9559
- --local_ip=172.20.0.11
- --ws_ip=0.0.0.0
- --port=9779
- --ws_http_port=19779
- --log_dir=/usr/local/nebula/logs
- --v=1
depends_on:
metad:
condition: service_healthy
networks:
nebula-net:
ipv4_address: 172.20.0.11
graphd:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vesoft/nebula-graphd:v3.8.0
container_name: nebula-graphd
restart: on-failure:3 # 修正:失败后重启3次,避免无限循环
ports:
- "9669:9669"
volumes:
- graphd-data:/usr/local/nebula/data
- graphd-logs:/usr/local/nebula/logs
command:
- /usr/local/nebula/bin/nebula-graphd
- --meta_server_addrs=metad:9559 # 指向metad服务
- --local_ip=172.20.0.12 # 节点通信地址为服务名
- --port=9669 # graph客户端查询端口
- --log_dir=/usr/local/nebula/logs
- --stderrthreshold=0
- --v=1
- --minloglevel=0
depends_on:
metad:
condition: service_healthy # 新增
storaged:
condition: service_started # 可以等待storaged启动
networks:
nebula-net:
ipv4_address: 172.20.0.12
studio:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vesoft/nebula-graph-studio:v3.10.0
container_name: nebula-studio
restart: always
ports:
- "7001:7001"
environment:
- NEBULA_SERVER_ADDRESS=172.20.0.12:9669
depends_on:
- graphd
networks:
- nebula-net
console:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vesoft/nebula-console:v3.8.0
container_name: nebula-console
entrypoint: sleep
command: infinity # 保持容器一直运行
depends_on:
metad:
condition: service_healthy # 仅在 metad 健康检查通过后启动
networks:
- nebula-net
networks:
nebula-net:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/24
gateway: 172.20.0.1
二、部署Es+elasticvue
1、下载
##
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.15.0
# 可视化工具
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/cars10/elasticvue:latest
#重命名为官方镜像名(确保后续启动命令仍可用cars10/elasticvue,无需改配置)
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/cars10/elasticvue:latest cars10/elasticvue:latest
2、保存为tar包方便迁移无网环境
-
注意这里是提供了两种方式,自己选用
-
迁移后同理使用:docker load -i /home/es-8.15.0-vector.tar
Linux/macOS(保存到/home/work/package/nebul目录 或者cd到当前目录执行)
docker save -o /home/work/package/nebula/nebula-image/es-8.15.0-vector.tar docker.elastic.co/elasticsearch/elasticsearch:8.15.0
保存elasticvue
docker save -o elasticvue-latest.tar cars10/elasticvue:latest
3、提前配置es-vue和es的配置
-
mkdir config
-
cd config
-
vim elasticsearch.yml
-
在elasticsearch.yml 文件中添加以下内容 保存
discovery.type: single-node
xpack.security.enabled: false
cluster.name: "docker-cluster" # ES默认就是这个值,可保留
network.host: 0.0.0.0 # 关键!允许所有IP访问ES,Elasticvue远程连接必需
http.cors.enabled: true # 开启CORS,Elasticvue跨域访问必需
http.cors.allow-origin: "http://192.168.1.63:9201" # 你的Elasticvue访问地址
http.cors.allow-headers: X-Requested-With,Content-Type,Content-Length,Authorization # 允许的跨域请求头
4、启动
-
在当前目录执行部署命令:
-
es-vue映射外部端口为9201
Linux下启动ES容器(适配Bash语法,保留所有核心配置)
docker run -d --name es-vector-db
-p 9200:9200
-p 9300:9300
-e "ES_JAVA_OPTS=-Xms2g -Xmx2g"
--memory=4GB
-v es-vector-data:/usr/share/elasticsearch/data
-v $(pwd)/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
docker.elastic.co/elasticsearch/elasticsearch:8.15.0linux启动 elasticvue 这里外部端口为9201 映射内部es的8080 记得改服务器ip
docker run -d --name elasticvue -p 9201:8080
-e "ELASTICSEARCH_URL=http://192.168.1.63:9200"
cars10/elasticvue:latest
5、验证启动
- es(elasticsearch)启动:9200端口
- curl http://localhost:9200/ 输出信息为成功
- es-vue验证:浏览器输入:http://192.168.1.63:9201/
进入配置地址成功进入
