Nebula-Studio ARM架构编译文档

Nebula-Studio ARM架构编译手册
本操作手册主要用于 Nebula-Studio 在 Linux/CentOS 系统/ARM 架构下的编译步骤及相关问题解决。

一、编译准备
1.1 编译工具
编译工具 版本 说明
NodeJs 18.20.0 (ARM64) 必须 >= 18
Npm 10.x 随 Node 18 自带
Golang 1.20.6 linux/arm64 用于编译 server
Cmake 3.x 打包工具
GCC-C++ 7.x+ C++ 编译器
rpm-build - RPM 打包工具
:warning: 注意:Node.js 版本必须 >= 18,否则 pdfjs-dist 依赖会报错

1.2 Nebula-Studio 源码
源码版本:nebula-studio-3.10.0
下载地址:https://github.com/vesoft-inc/nebula-studio.git
二、ARM 编译步骤
2.1 安装 Node.js 18 (ARM64)

下载 Node.js 18 ARM 版本

cd /opt
wget https://nodejs.org/dist/v18.20.0/node-v18.20.0-linux-arm64.tar.xz

解压

tar -xvf node-v18.20.0-linux-arm64.tar.xz

临时生效(只在当前终端有效,不影响系统原有 Node 版本)

export PATH=/opt/node-v18.20.0-linux-arm64/bin:$PATH

验证版本

node -v # 应显示 v18.20.0
npm -v
2.2 安装 Golang 1.20.6 (ARM64)

下载 Golang ARM 版本

cd /opt
wget https://go.dev/dl/go1.20.6.linux-arm64.tar.gz

解压到 /usr/local

tar -C /usr/local -xzf go1.20.6.linux-arm64.tar.gz

临时生效(只在当前终端有效)

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

验证版本

go version # 应显示 go version go1.20.6 linux/arm64

设置国内 Go 代理(解决依赖下载超时问题)

go env -w GOPROXY=https://goproxy.cn,direct
:warning: 重要:国内网络必须设置 Go 代理,否则 go build 会因访问 proxy.golang.org 超时而失败

2.3 安装 Cmake、GCC-C++ 和 rpm-build

CentOS/RHEL

yum install -y cmake gcc-c++ rpm-build

验证

cmake --version
g++ --version
rpmbuild --version
2.4 下载源码到编译机(ARM架构)
以 /opt/nebula/studio/git/ 目录为例:

将压缩包放到编译机目录下,然后解压

unzip nebula-studio-3.10.0.zip -d /opt/nebula/studio/git/

解压后文件夹名为:nebula-studio-3.10.0

2.5 修改 CMakeLists.txt 文件
将文件 scripts/rpm/CMakeLists.txt 中的 x86_64 改为 aarch64

2.6 修复 TypeScript 编译错误
:warning: 必须修复:否则 npm run build 会报错

进入项目目录

cd /opt/nebula/studio/git/nebula-studio-3.10.0

执行 sed 替换

sed -i ‘s/matrix.join/Array.from(matrix).join/g’ app/pages/SketchModeling/Plugins/SketchShapes/Path.tsx
原因:gl-matrix 库的 mat2d 类型在新版本中不再直接支持 .join() 方法,需要先转换为数组

2.7 执行编译构建

进入项目目录

cd /opt/nebula/studio/git/nebula-studio-3.10.0

安装依赖

npm install

设置内存限制并执行构建

export NODE_OPTIONS=“–max-old-space-size=4096”
npm run build
:key: 关键:4096 表示分配 4GB 内存,如果报内存溢出,可改小一点

2.8 复制构建产物并编译 Server

复制前端构建产物

cp -r ./dist/. ./server/api/studio/assets

修改端口配置(9000 改为 7001)

sed -i “s/9000/7001/g” ./server/api/studio/etc/studio-api.yaml

编译 Go Server

cd ./server/api/studio
go build -o server
:white_check_mark: 执行完毕后,会生成 server 可执行文件

2.9 准备打包目录

创建文件夹

mkdir -p /opt/nebula/studio/git/arm-nebula-studio-3.10.0/source

移动并重命名待编译文件夹

mv /opt/nebula/studio/git/nebula-studio-3.10.0 /opt/nebula/studio/git/arm-nebula-studio-3.10.0/source/nebula-graph-studio

复制打包脚本

cp /opt/nebula/studio/git/arm-nebula-studio-3.10.0/source/nebula-graph-studio/scripts/pack_CentOS_aarch64.sh /opt/nebula/studio/git/arm-nebula-studio-3.10.0/
最终目录结构:

arm-nebula-studio-3.10.0/
├── source/
│ └── nebula-graph-studio/
└── pack_CentOS_aarch64.sh
2.10 执行打包脚本
cd /opt/nebula/studio/git/arm-nebula-studio-3.10.0
sh pack_CentOS_aarch64.sh
打包成功后生成:

nebula-graph-studio-3.10.0.arrch64.tar.gz - 部署包
package/tmp/nebula-graph-studio-3.10.0.aarch64.rpm - RPM 安装包
三、部署验证
将 nebula-graph-studio-3.10.0.arrch64.tar.gz 拷贝到目标服务器:

解压

tar -xzf nebula-graph-studio-3.10.0.arrch64.tar.gz

启动服务

cd nebula-graph-studio
./server
浏览器访问:http://服务器IP:7001

登录信息:

账号:root
密码:nebula
四、目录结构参考
/opt/
├── node-v18.20.0-linux-arm64/ # Node.js 18 ARM版本
├── go1.20.6.linux-arm64.tar.gz # Golang 安装包
└── nebula/studio/git/
└── arm-nebula-studio-3.10.0/
├── source/
│ └── nebula-graph-studio/
├── nebula-graph-studio/ # 部署目录
├── package/ # 打包临时目录
├── pack_CentOS_aarch64.sh
├── nebula-graph-studio-3.10.0.arrch64.tar.gz # 部署包
└── nebula-graph-studio-3.10.0.tar.gz
五、编译完成后切回原 Node 版本
方法一:关闭当前终端,重新开一个终端即可恢复原 Node 版本

方法二:手动切换

export PATH=/usr/local/node16/bin:$PATH # 改成你原 Node 的实际路径
node -v # 验证版本
六、常见问题
问题 解决方案
Q1: 端口冲突 默认端口已从 9000 改为 7001,如需修改请编辑 studio-api.yaml
Q2: npm run build 报错 “JavaScript heap out of memory” 设置内存限制:export NODE_OPTIONS=“–max-old-space-size=4096”,不够则改成 8192 或 16384
Q3: pdfjs-dist 报错 “Unsupported engine, required node >= 18” 必须使用 Node.js 18 或更高版本,按照 2.1 步骤安装
Q4: husky install 报错 “不是一个 git 仓库” 忽略此警告,不影响编译
Q5: TypeScript 编译报错 “Property ‘join’ does not exist on type ‘mat2d’” 按照 2.6 步骤修复,执行 sed 命令替换
Q6: go build 报错 “go: command not found” 按照 2.2 步骤安装 Golang 1.20.6 ARM 版本
Q7: go build 报错 “dial tcp … i/o timeout” 设置国内 Go 代理:go env -w GOPROXY=https://goproxy.cn,direct
Q8: cmake 报错 “No CMAKE_CXX_COMPILER could be found” 安装 C++ 编译器:yum install -y gcc-c++
Q9: cpack 报错 “RPM package requires rpmbuild executable” 安装 rpm-build:yum install -y rpm-build

2 个赞

老师真优秀,感谢分享