前言

我在我的安卓手机上搭建了完整的linux工具链,所以这篇博客将完全在手机上创作,如有不足之处,欢迎评论留言。

btw, 本篇博客的编译环境为wsl里面的ubuntu 22.04,proxy地址统一用127代替,由于每个人的网络环境不同,你根据实际情况自己替换一下。

p.s. 由于国内的特殊网络环境,部分内容本人额外做了一些小小的优化。

特殊说明:由于你懂的,如何那啥我就不能那啥了。

FYI,

本篇博客主要参考了这个 github issue。

安装nodejs

为了避免奇怪的问题,可以直接 sudo su进入root用户来进行安装。下面是安装命令:

1
2
3
4
5
$ export https_proxy=http://127.0.0.1:7890
$ wget https://nodejs.org/download/release/v18.18.2/node-v18.18.2-linux-x64.tar.gz
$ mkdir -p /usr/local/lib/nodejs
$ tar xzvf node-v18.18.2-linux-x64.tar.gz -C /usr/local/lib/nodejs
$ npm config set registry https://registry.npm.taobao.org

然后我们打开 /root/.profile文件写入如下内容:

1
export PATH=/usr/local/lib/nodejs/node-18.18.2-linux/bin:$PATH

然后运行一下 source /root/.profile命令,最后执行一下 node -v,如果输出了 v18.18.2就代表安装成功了。

小声说一下,上述的安装命令贴心的为大家设置了npm的淘宝镜像。🤣

安装golang

安装步骤如下:

1
2
3
$ export https_proxy=http://127.0.0.1:7890
$ wget https://go.dev/dl/go1.21.3.linux-amd64.tar.gz
$ rm -rf /usr/local/go && tar -C /usr/local -xzvf go1.21.3.linux-amd64.tar.gz

打开你的 /root/.profile,写入如下内容:

1
2
export PATH=$PATH:/usr/local/go/bin
export GOPROXY=https://proxy.golang.com.cn,direct

然后执行 source /root/.profile,最后运行一下 go version命令,如果返回了 go version go1.21.3 linux/amd64就代表安装成功了。

小声说一下,上述配置额外加了个proxy,适配一下国内的环境,dddd。🤣

正式编译

安装buf工具链,命令如下:

1
2
3
4
5
6
$ BIN="/usr/local/bin" && \
VERSION="1.26.1" && \
curl -sSL -x http:127.0.0.1:7890 \
"https://github.com/bufbuild/buf/releases/download/v${VERSION}/buf-$(uname -s)-$(uname -m)" \
-o "${BIN}/buf" && \
$ chmod +x "${BIN}/buf"

克隆memos项目,然后进入到memos项目根目录下面的proto目录执行buf命令,

1
2
$ git clone https://github.com/usememos/memos.git
$ cd memos/proto && buf generate

开始编译前端:

1
2
3
4
5
$ cd ../web
$ npm install -g pnpm
$ pnpm config set registry https://registry.npmmirror.com/
$ pnpm install --frozen-lockfile
$ pnpm build

上面的命令中,我又贴心的为大家设置了pnpm的淘宝镜像。

编译最后的golang二进制包,

1
2
3
$ cd ..
$ cp -rp ./web/dist/* ./server/dist/
$ CGO_ENABLED=0 go build -x -o memos ./main.go

至此,我们就成功的把memos编译出来了,最终的编译产物就是一个叫 memos的二进制文件,快部署到服务器上看看吧。