编译安装 MEMOS 作者: Hogwarts 发布于: 2023-10-08 更新于: 2023-11-10 分类: 默认分类 不想用Docker就要编译安装,然鹅,Memos的文档这样写道:本文档尚未完成,欢迎贡献。这好像是个悖论吧。在群内潜伏学习了两天,看有教程,还有blog。[二进制编译Memos开源笔记应用](https://ttt.td/2023/02/18/build-memos.html "二进制编译Memos开源笔记应用") 教程写于20230218,测试了一下,对于0.10.2版本的Memos能够编译成功,但对于0.16.0就不能适用了。经过群内大佬的指导,终于编译成功,尚未进行后续编译。将步骤写下,以免进坑。 #一、环境准备 需安装依赖:go、node、pnpm、buf,咱一个一个来。 ##1.1 go 的安装 参考:`https://winamp.top/91.html` ##1.2 node 的安装 参考:`https://winamp.top/377.html` ##1.3 pnpm 的安装 npm install -g pnpm ln -sf /root/nodejs/bin/pnpm /usr/local/bin/pnpm #软连接 安装的前提是npm正常安装成功 ##1.4 buf 的安装 Buf的[文档](https://buf.build/docs/installation "文档")提供了安装命令,按常规会npm安装,运行 `npm install @bufbuild/buf` ,执行 `npx buf –version` 后,npx报错,搞定后正常显示版本,但buf还是无法使用。故尝试 go 安装。 # Substitute GOBIN for your bin directory # Leave unset to default to $GOPATH/bin GO111MODULE=on GOBIN=/usr/local/bin go install \ github.com/bufbuild/buf/cmd/buf@v1.27.0 #二、web编译过程 ##2.1 下载源码 git clone -b v0.16.0 https://github.com/usememos/memos.git # v0.16.0为要编译的版本号 ##2.2 协议代码生成 cd /root/memos/proto/ && buf generate 老版本不用执行此步骤,新版本需要从gRPC的proto文件中生成前端的API协议封装,否则编译失败。 ##2.3 编译前端文件 cd /root/memos/web/ pnpm i && pnpm build 编译前可更换Logo文件。 可用`yarn && yarn build`编译,前提是先用npm安装yarn,并软链接。 ##2.4 前端编译结果目录copy到server目录 rm -rf /root/memos/server/dist/ cp -r dist /root/memos/server/ ##2.5 编译运行文件 cd /root/memos go build -o /usr/local/bin/memos -trimpath -ldflags "-s -w -buildid=" ./main.go Go编译注意编译的架构,可以交叉编译,并缩小体积。 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o memos-amd64-v1.6.1 -trimpath -ldflags "-s -w -buildid=" ##2.6 本人自行编译文件存放目录 `https://dl.winamp.top/memos/` #三、运行测试 ##3.1 sqlite运行命令 memos -h #查看使用方法 memos -p yourport #for default demo memos -m 'prod' -p yourport -d sqlite.db-Path #注册用户运行 注意备份数据库文件及本地存储数据(memos_prod.db等) ##3.2 MySQL支持 自v0.16.1能够支持MySQL数据库了,参考:[使用 MySQL 作为数据库驱动程序](https://www.usememos.com/docs/get-started/mysql)。 ###3.2.1 新建数据库 CREATE DATABASE memos_prod; CREATE USER 'memos'@'localhost' IDENTIFIED BY 'UsermemosPasswd'; GRANT ALL PRIVILEGES ON memos* TO 'memos'@'localhost' WITH GRANT OPTION; ###3.2.2 运行命令 /usr/local/bin/memos --mode "prod" --port yourport --driver mysql --dsn 'memos:memospassword@tcp(localhost)/memos_prod' 本例中:运行端口为`yourport`;用户名为`memos`;数据库密码为`memospassword`;数据库名称为`memos_prod`。 ###3.2.3 注意问题 ~~运行文件路径`/var/opt/memos`是写死的。~~ 不在/var/opt/下运行memos会报错路径错误,将memos拷贝到此目录顺利运行。 尝试将memos放入/usr/local/bin/下,运行成功。 ###3.2.4 将数据从 SQLite 迁移到 MySQL /usr/local/bin/memos --driver mysql --dsn 'dbuser:dbpass@tcp(dbhost)/dbname' copydb --from sqlite://path_to_your_memos_prod.db 示例如下,虽然三个斜杠看着别扭,但能成功copy。 /usr/local/bin/memos --mode "prod" --port yourwebport --driver mysql --dsn 'memosuser:UsermemosPassWd@tcp(localhost)/memos_prod' copydb --from sqlite:///var/opt/memos_prod.db #四、开机启动 待完成 #五、自定义样式 ##5.1 隐藏编号等信息 “设置”-“系统”-“自定义样式” .mt-4.w-full.flex.flex-row.justify-between.items-center.gap-2 { display: none; }  其实仅隐藏编号就够了,等有空研究一下。 #六、参考 [二进制编译Memos开源笔记应用](https://ttt.td/2023/11/04/build-memos/ "二进制编译Memos开源笔记应用") [Meoms文档](https://www.usememos.com/docs "Meoms文档") 感谢Memos群内大佬的悉心指导。 安装过程还未充分测试。 标签: memos