Linux 下 部署es+nebula(附带内网部署方式)

前言

仅记录学习过程,有问题欢迎讨论

接上文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包

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.0

    linux启动 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、验证启动

相关推荐
JY.yuyu2 小时前
Linux计划任务进程
linux·运维·服务器
last demo2 小时前
docker镜像
运维·docker·容器
ICT董老师2 小时前
kubernetes中operator与helm有什么区别?部署mysql集群是选择operator部署还是helm chart部署?
linux·运维·mysql·云原生·容器·kubernetes
wjhx2 小时前
对ubuntu22.04版本日志的处理
linux·ubuntu
缘来是黎2 小时前
运维面试场景题——故障排查与解决
运维·面试·职场和发展
乾元2 小时前
构建你的个人「网络 AI 实验室」——硬件、模拟器与数据集清单
运维·网络·人工智能·网络协议·架构
情缘晓梦.2 小时前
Linux指令和权限
linux·运维·服务器
ybdesire2 小时前
Joern服务器启动后cpgqls-client结合python编程进行扫描
运维·服务器·python
autho2 小时前
conda
linux·python·conda