使用 macOS + Docker 搭建 Nebula Graph 2.0 开发环境

在本文中,我们将会介绍如何在 macOS 上用 Docker 搭建开发环境,进行编译、运行 Nebula Graph 2.0。

概述

在 Docker 镜像:vesoft/nebula-dev 中,我们提供了 Nebula Graph 的整个编译环境,支持你在本地更改源码,构建代码并在容器中进行调试。

执行以下步骤以开始快速开发:

硬件要求

具体 Nebula Graph 的运行配置要求可参考官网文档:运行配置要求

编译 Nebula Graph 2.0

在下面内容,你可以了解到使用 Nebula Graph 服务的所有操作步骤,包括了不限于如何启动 Nebula Graph 服务。

下载源码到本地

  1. 打开 Terminal,将所在目录切换到你想要安装到的路径下
  2. 执行下面命令 clone 源码:
bash> git clone https://github.com/vesoft-inc/nebula-graph.git

从 Docker Hub 获取镜像

可执行下面命令

bash> docker pull vesoft/nebula-dev

运行 Docker 容器

执行下面命令运行 Docker 容器并将本地源码目录挂载到容器工作目录 /home/nebula 中:

bash> docker run --rm -ti \
  --security-opt seccomp=unconfined \
  -v /path/to/nebula/directory:/home/nebula \
  -w /home/nebula \
  vesoft/nebula-dev \

将上面命令中的 /path/to/nebula/directory 替换为个人源码路径

如果你想每次关闭 Docker 后自动释放资源,加入 --fm 参数:

bash> docker run --rm -ti \
--security-opt seccomp=unconfined \  
-v /path/to/nebula/directory:/home/nebula \
-w /home/nebula \  
vesoft/nebula-dev \  

提示:Docker 中的路径如果没有映射到本地,在 Docker 关闭后路径内的修改将会丢失

在 Docker 容器内编译

按照下面的步骤执行:

  1. docker> mkdir build && cd build
  2. docker> cmake -DENABLE_BUILD_STORAGE=on -DCMAKE_EXPORT_COMPILE_COMMANDS=on ..

2.1 默认设置中 storage build 为 off 状态,从而缩短单元测试编译时间。
2.2 默认 Nebula Graph 安装路径为 /user/local/nebula,如果该路径的访问权,将出现以下错误信

image

2.3 如果你要更改安装路径,可在 Docker 输入以下命令:
docker> cmake -DCMAKE_INSTALL_PREFIX=user_install_path -DENABLE_BUILD_STORAGE=on -DCMAKE_EXPORT_COMPILE_COMMANDS=on ..user_install_path 替换为想要安装的路径。

  1. docker> make -jN#

3.1 将 N 替换成用来编译的硬件核数
3.2 如果 Docker 运行资源不足,会出现以下错误:

进入 Docker >> 偏好 >> 资源 可设置 Docker 的 CPU 数和内存配置

  1. docker> make install-all

启动 Nebula Graph 服务

  1. 上述步骤完成后即可在容器内启动 Nebula Graph 服务,Nebula Graph 的默认安装目录为 /usr/local/nebula/

docker> cd /usr/local/nebula

  1. 拷贝之前的 Nebula Graph 服务的配置文件
docker> cp etc/nebula-graphd.conf.default etc/nebula-graphd.conf
docker> cp etc/nebula-metad.conf.default etc/nebula-metad.conf 
docker> cp etc/nebula-storaged.conf.default etc/nebula-storaged.conf
  1. 启动服务

docker> ./scripts/nebula.service start all
若启动成功以下信息将会出现:

运行 Nebula Graph 2.0

在下面内容,我们会介绍如何安装 Nebula Console 并且通过它连接 Nebula Graph 服务。

注意:如果要连接 Nebula Graph 服务,请先确保 Nebula Graph 服务已启动。

在 Docker 内安装 Go

  1. 使用 cd 命令切换到 Docker 中 Go 的安装路径

docker> cd

  1. 前往 Go 官网的文档:https://golang.org/doc/install,右键点击 Download Go for Linux ,复制链接地址。

  1. 在 Docker Console 中输入命令:

docker> wget LINK_ADDRESS
将 LINK_ADDRESS 替换成第二步中的链接地址

  1. 将文件解压到 into /usr/local :

tar -C /usr/local -xzf go1.15.2.linux-amd64.tar.gz

  1. /usr/local/go/bin 加入到 PATH 环境变量中

export PATH=$PATH:/usr/local/go/bin

  1. 注意:profile 文件的该病可能并不会立马生效,若想立刻生效,输入:

source $HOME/.profile

  1. 验证 Go 是否安装成功,输入:

$ go version

  1. 确认该命令输出的 Go 版本

安装 Nebula Console

详细的 Console 介绍可参考文档:https://github.com/vesoft-inc/nebula-console

  1. 按照步骤安装 Golang:https://github.com/vesoft-inc/nebula-console

  2. https://github.com/vesoft-inc/nebula-console clone 到 Docker 中并输入以下命令:

docker> cd nebula-console
docker> make
  1. 启动 Console:
docker> ./nebula-console [-address ip] [-port port] [-u user] [-p password] [-e "nGQL query statement" |  -f file.nGQL]

# default setting
# user and password are optional
docker> ./nebula-console -u root -p nebula --port 3699 --addr="127.0.0.1"

你将看到欢迎信息,如下所示:

Welcome to Nebula Graph v2.0.0-alpha!

使用 VSCode 远程 Docker 容器

下面来介绍下如何用 VSCode 远程 Docker 容器,并在容器内浏览、编辑源码文件。

  1. 在 VSCode 中安装 Docker 插件
    1. 在 Linux 环境下,非 root 用户需要激活 Docker CLI 以运行 VSCode,详见 enable Docker CLI for the non-root user account
    2. 打开插件窗 (⇧⌘X), 搜索 docker 并选择 Microsoft 开发的 Docker extension。

  1. 在 VSCode 中关联 Docker

2.1 打开 VSCode,点击侧边栏的 Docker,右键点击正在运行的容器,选择“Attach Visual Studio Code”

2.2 VSCode 文件浏览器将自动载入容器内的 Nebula Graph 路径


来开心地使用 VSCode Coding 吧~~

更多细节详见: https://code.visualstudio.com/docs/containers/overview.

Ref

5 个赞

:clap::clap:

1 个赞

:clap::clap:

1 个赞

:clap: :clap:

:clap:
如果是使用最新苹果的M1处理器,有什么办法搭建吗?

你好,目前docker还没有对M1正式的支持,详见 Apple M1 Tech Preview | Docker Documentation
另外Nebula也没有正式的arm包放出,不过以后是打算支持的,到时候会提供arm的docker镜像

2 个赞

docker中资源我设置了8个cpu ,10G内存

编译参数

cmake -DENABLE_BUILD_STORAGE=off  -DCMAKE_EXPORT_COMPILE_COMMANDS=on ..
make -j4

花了两小时才编译好,请问一下怎么在目前的配置下提升编译速度?

# 假设 cores 为核数,mem_gb 为内存大小(单位为 GB),N 取值建议为 cores 和 mem_gb/2 中的较小值
# Build type 建议选择 release 以加快编译速度
$ make -jN

可以使用更多核来编译,同时改build type

update in 2021-4-12,M1 Mac 下运行 nebula-graph 2.0GA的例子(在aarch64 docker image发布之前只运行不编译的方法,编译还没试过要多久,tbd):
如 Aiee 提供的 Preview 链接,作如下操作

请注意这个就是尝鲜用用,等 aarch64 的 image有了之后就不需要设定 platform 为 linux/amd64 ,从而有 native 的性能了 :-p

❯ uname -a
Darwin Weyl-M1.local 20.3.0 Darwin Kernel Version 20.3.0: Thu Jan 21 00:06:51 PST 2021; root:xnu-7195.81.3~1/RELEASE_ARM64_T8101 arm64

❯ softwareupdate --install-rosetta
Type A and press return to agree: A
Install of Rosetta 2 finished successfully

❯ git clone --branch v2.0.0 https://github.com/vesoft-inc/nebula-docker-compose.git
Cloning into 'nebula-docker-compose'...
...
Resolving deltas: 100% (188/188), done.

❯ cd nebula-docker-compose
❯ export DOCKER_DEFAULT_PLATFORM=linux/amd64
❯ docker-compose up -d
Docker Compose is now in the Docker CLI, try `docker compose up`

Creating network "nebula-docker-compose_nebula-net" with the default driver
Pulling metad0 (vesoft/nebula-metad:v2.0.0)...
v2.0.0: Pulling from vesoft/nebula-metad
2d473b07cdd5: Pull complete
18b911743d01: Pull complete
7feb5a2056b0: Pull complete
76689905f720: Pull complete
Digest: sha256:7dd4e4a5b6637732190d711c12b8bb0b301fc19d3126a31d828aac8f55b669d1
Status: Downloaded newer image for vesoft/nebula-metad:v2.0.0
Pulling storaged0 (vesoft/nebula-storaged:v2.0.0)...
v2.0.0: Pulling from vesoft/nebula-storaged
2d473b07cdd5: Already exists
440512e126d2: Pull complete
18eb76b36623: Pull complete
c658fb373cdd: Pull complete
Digest: sha256:36c5a2695541c4573cfa1e6637e33848b68487736ce8cabac8e1f14969e9a385
Status: Downloaded newer image for vesoft/nebula-storaged:v2.0.0
Pulling graphd (vesoft/nebula-graphd:v2.0.0)...
v2.0.0: Pulling from vesoft/nebula-graphd
2d473b07cdd5: Already exists
ca421d6ad8e2: Pull complete
9454d5d87884: Pull complete
6c3f82d24206: Pull complete
Digest: sha256:9033aa72f0ec1d8c0a7aaf3dc3db6b9089dcfde7257487f2ba9f4dacda135f52
Status: Downloaded newer image for vesoft/nebula-graphd:v2.0.0
Creating nebula-docker-compose_metad0_1 ... done
Creating nebula-docker-compose_metad2_1 ... done
Creating nebula-docker-compose_metad1_1 ... done
Creating nebula-docker-compose_graphd2_1   ... done
Creating nebula-docker-compose_storaged2_1 ... done
Creating nebula-docker-compose_graphd1_1   ... done
Creating nebula-docker-compose_storaged0_1 ... done
Creating nebula-docker-compose_graphd_1    ... done
Creating nebula-docker-compose_storaged1_1 ... done

updated 2021-04-13, 测试了 Macbook Pro M1, Docker Desktop分配 4 Core CPU, 4GiB RAM 编译,用时4小时20分钟。

[root@e09b6146cd3d nebula]# cmake -DENABLE_BUILD_STORAGE=off \
>     -DCMAKE_EXPORT_COMPILE_COMMANDS=on \
>     -DCMAKE_BUILD_TYPE=Release
...
[root@e09b6146cd3d nebula]# date
Tue Apr 13 10:06:15 CST 2021

[root@e09b6146cd3d nebula]# make -j2
Scanning dependencies of target common_project
Scanning dependencies of target parser_target
[  1%] [FLEX][Scanner] Building scanner with flex 2.6.4
[  1%] [BISON][Parser] Building parser with bison 3.0.5
Scanning dependencies of target graph_thrift_generator
[  0%] Generating thrift files for graph

...
[ 99%] Building CXX object src/executor/test/CMakeFiles/executor_test.dir/CartesianProductTest.cpp.o
[ 99%] Building CXX object src/executor/test/CMakeFiles/executor_test.dir/AssignTest.cpp.o
[100%] Linking CXX executable ../../../bin/test/executor_test
[100%] Built target executor_test

[root@e09b6146cd3d nebula]# date
Tue Apr 13 14:26:22 CST 2021

7 个赞

您好,我使用您的方法为M1芯片的MacBook部署开发环境,遇到了下面的问题,请问如何解决。

zhouyankang@zhouyanangdeair ~ % cd nebula-docker-compose
zhouyankang@zhouyanangdeair nebula-docker-compose % export DOCKER_DEFAULT_PLATFORM=linux/amd64
zhouyankang@zhouyanangdeair nebula-docker-compose % docker-compose up -d
nebula-docker-compose_metad1_1 is up-to-date
nebula-docker-compose_metad0_1 is up-to-date
nebula-docker-compose_metad2_1 is up-to-date
nebula-docker-compose_storaged1_1 is up-to-date
nebula-docker-compose_graphd2_1 is up-to-date
nebula-docker-compose_graphd_1 is up-to-date
nebula-docker-compose_graphd1_1 is up-to-date
nebula-docker-compose_storaged2_1 is up-to-date
nebula-docker-compose_storaged0_1 is up-to-date
zhouyankang@zhouyanangdeair nebula-docker-compose % docker run --rm -ti --network nebula-docker-compose_nebula-net --entrypoint=/bin/sh vesoft/nebula-console:v2.0.0-ga
/ # docker> nebula-console -u user -p password --address=graphd --port=9669
/bin/sh: docker: not found
/ # exit
zhouyankang@zhouyanangdeair nebula-docker-compose % docker> nebula-console -u user -p password --address=graphd --port=9669
unknown shorthand flag: 'u' in -u
See 'docker --help'.


docker run... 之后已经进到了console 的container 里,提示符为 / #
之后请运行 nebula-console -u user -p password --address=graphd --port=9669 不要带上前边的 docker >

另外,我在m1上发现 compose起来 有服务不是healthy的,感觉是 docker desktop 在这里的一些问题(不是原生的,是虚拟的,还有一层 arm → x86)。不知道你遇到没?

2 个赞

非常感谢您的解答,但由于我是初学者,还没有遇到您说的问题。目前我在docker中运行的arm版本的clickhouse倒是没有问题。我解决了上述问题,又遇到了如下问题,烦请您进一步解答

/ # nebula-console -u user -p password --address=graphd --port=9669
2021/07/15 01:52:45 [INFO] connection pool is initialized successfully
2021/07/15 01:52:45 Fail to create a new session from connection pool, Failed to open transport, error: dial tcp 172.18.0.3:9669: connect: connection refused
panic: Fail to create a new session from connection pool, Failed to open transport, error: dial tcp 172.18.0.3:9669: connect: connection refused

goroutine 1 [running]:
log.Panicf(0x7aed57, 0x35, 0xc0000bbe98, 0x1, 0x1)
	/usr/local/go/src/log/log.go:345 +0xc0
main.main()
	/usr/src/main.go:357 +0x8c7
/ # nebula> SHOW HOSTS;
/bin/sh: nebula: not found
/ # SHOW HOSTS;
/bin/sh: SHOW: not found

把你的配置文件贴一下呢

2021/07/15 01:52:45 Fail to create a new session from connection pool, Failed to open transport, error: dial tcp 172.18.0.3:9669: connect: connection refused

您这个报错其实就是要么 graphd 起来了,console 的容器里网络不可达,要么是 graphd 没有正确启动,我怀疑是后者,因为我在自己的 M1 上也有一样的问题:sob:

如果想用m1 的话,您可以试着不用 docker desktop,用比如 virtual box 跑一个 x86 Linux,分配4GiB Ram,在里边用 docker compose 拉看看。

不知道在哪里。但我的步骤结合了wey的回复,并按照链接 Docker Compose部署Nebula Graph - Nebula Graph Database 手册 一步一步来的,并不知道哪里出现了问题。

:joy: 我的理解是配置出了问题,所以需要你来贴下配置信息,排除配置出问题这个原因之后我们再看看是不是其他发生问题了。

不是您的问题,我在我的 M1 macbook pro docker compose 环境里拉起来 有几个 服务 也是不好的,之前花时间研究了一次,没能找到根因,怀疑是 Mac Docker Desktop 对于网络的一些处理造成了问题。

建议在一个单独的虚拟机内部通过 docker compose 拉起来哈!

好的好的,感谢

请问贵公司最近有计划支持吗?

我认为如果有了 arm 的 docker image 之后可能问题就没有了。
这个 x86 下的问题等我再花时间看看哈,有更新在这里 ping 您。
在那之前,建议在 VM 里跑哈 :slight_smile: 或者不愿意起VM,试着用docker desktop 在一个x86 linux 容器里里手动安装 RPM/DEB 包,启动三种进程,这样也许可以,不过我还没试过。