linux下编译weaviate,非docker环境
具体的操作视频见:linux下编译weaviate,非docker环境
一、前言
文章使用windows系统中的WSL2,在WSL2中安装了Arch Linux。使用以下命令进入root账号,避免后续安装权限。本文编译weaviate1.21.0版本。
sudo -i
二、下载安装GO
1.下载GO
在linux窗口中使用以下命令下载。1.24.2是go的版本号,可以在官网中查看具体的版本号。中国官网地址:https://golang.google.cn/。
wget https://golang.org/dl/go1.24.2.linux-amd64.tar.gz
# 如果上面的命令使用不了,使用以下命令
wget https://golang.google.cn/dl/go1.24.2.linux-amd64.tar.gz
如果以上命令都下载不了,建议去官网手动下载对应版本。下载地址:https://golang.google.cn/dl/。
2.安装GO
解压 Go到/usr/local目录下。
sudo tar -C /usr/local -xzf go1.24.2.linux-amd64.tar.gz
3.增加环境变量
配置/.bashrc,/.bash_profile,~/.profile文件,增加环境变量
sudo vim ~/.bashrc
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
source ~/.bashrc
sudo vim ~/.bash_profile
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
source ~/.bash_profile
sudo vim ~/.profile
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
source ~/.profile
4.验证是否安装成功
使用以下命令验证
go version
输出以下内容,表明安装成功。
go version go1.24.2 linux/amd64
三、更改GOPROXY
进入/usr/local/go目录,找到go.env 手动修改,将GOPROXY更为GOPROXY=https://goproxy.cn,direct。
cd /usr/local/go
sudo vim go.env
GOPROXY=https://goproxy.cn,direct
四、编译weaviate
1.下载weaviate
1.1直接下载zip文件
在GitHub网站下载weaviate的压缩包weaviate1.21.0。在windows系统中解压,然后复制到linux中。该版本编译时不会报以下"undefined"错误,本文测试过weaviate1.19.0~1.20.6都会报以下错误。官方在1.21.0版本更改了相关文件,具体可以在GitHub中查看更改详情。
如果GitHub网站打不开,可以登录https://gitee.com网站,搜索weaviate,下载对应版本的压缩文件。
# github.com/weaviate/weaviate/usecases/cluster
usecases/cluster/delegate.go:270:16: undefined: syscall.Statfs_t
usecases/cluster/delegate.go:271:17: undefined: syscall.Statfs
# github.com/weaviate/weaviate/adapters/repos/db/lsmkv
adapters/repos/db/lsmkv/segment.go:79:26: undefined: syscall.Mmap
adapters/repos/db/lsmkv/segment.go:79:80: undefined: syscall.PROT_READ
adapters/repos/db/lsmkv/segment.go:79:99: undefined: syscall.MAP_SHARED
adapters/repos/db/lsmkv/segment.go:148:17: undefined: syscall.Munmap
1.2使用命令下载
wget https://github.com/weaviate/weaviate/archive/refs/tags/v1.21.0.tar.gz
tar -xzf v1.21.0.tar.gz
v1.21.0是weaviate的版本号,可以根据需要更换。
2. 编译weaviate
进入weaviate解压文件所在目录,使用以下命令编译。
export GOPROXY=https://goproxy.cn,direct
go mod download -x # 下载go依赖,显示go命令实际执行的详细步骤,包括下载的URL和存储路径
go build -o weaviate ./cmd/weaviate-server # 开始编译
3.测试是否可用
可以参考以下命令进行weaviate环境变量测设置。
export PERSISTENCE_DATA_PATH=/home/dify/dify0153/data/difydata
export QUERY_DEFAULTS_LIMIT=25
export AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=false
export DEFAULT_VECTORIZER_MODULE=none
export AUTHENTICATION_APIKEY_ENABLED=true
export AUTHENTICATION_APIKEY_ALLOWED_KEYS=WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih
export AUTHENTICATION_APIKEY_USERS=hello@dify.ai
export AUTHORIZATION_ADMINLIST_ENABLED=true
export AUTHORIZATION_ADMINLIST_USERS=hello@dify.ai
weaviate解压文件所在目录,运行编译后的weaviate。
./weaviate --scheme http --host 127.0.0.1 --port 8080
如果weaviate可以正常运行,将输出以下内容。包含"Serving weaviate at http://127.0.0.1:8080",表明weaviate已经开始正常运行。
{"action":"startup","default_vectorizer_module":"none","level":"info","msg":"the default vectorizer modules is set to \"none\", as a result all new schema classes without an explicit vectorizer setting, will use this vectorizer","time":"2025-04-20T15:04:28+08:00"}
{"action":"startup","auto_schema_enabled":true,"level":"info","msg":"auto schema enabled setting is set to \"true\"","time":"2025-04-20T15:04:28+08:00"}
{"action":"grpc_startup","level":"info","msg":"grpc server listening at [::]:50051","time":"2025-04-20T15:04:28+08:00"}
{"action":"restapi_management","level":"info","msg":"Serving weaviate at http://127.0.0.1:8080","time":"2025-04-20T15:04:28+08:00"}
五、weaviate的删除
**weaviate的删除很简单,因为是手动编译的,直接进入weaviate解压文件所在目录,删除整个目录就行。**下载的压缩文件不用删除,后续可以再手动编译安装。
六、问题汇总
1.GOPROXY配置问题
如果发现安装go的依赖,速度很慢,可能是"GOPROXY=https://goproxy.cn,direct",没有配置成功。即使运行go env ,输出GOPROXY=https://goproxy.cn,direct。需要进入/usr/local/go目录,找到go.env 手动修改,将GOPROXY=xxxxxxxx更为GOPROXY=https://goproxy.cn,direct。
可以在编译时使用以下命令来实时查看go依赖具体是从那个网站下载。
sudo go build -v -x -o weaviate ./cmd/weaviate-server
2.重新下载go模块
如果需要重新下载go的模块,使用以下命令。
go clean -modcache # 清除已经下载的go模块
go mod download -x # 重新下载依赖并显示详细日志