[{"data":1,"prerenderedAt":593},["ShallowReactive",2],{"page-/post/memos/memos-self-build-quick-start":3,"surrounding-page":584},{"id":4,"title":5,"author":6,"body":7,"date":570,"description":571,"extension":572,"group":6,"lastmod":573,"meta":574,"navigation":577,"path":578,"rawbody":579,"seo":580,"showTitle":5,"stem":581,"tags":582,"versions":6,"__hash__":583},"content/post/Memos/Memos-self-build-quick-start.md","Memos自建服务入门指南",null,{"type":8,"value":9,"toc":551},"minimark",[10,19,22,25,40,46,50,60,67,77,80,87,94,100,103,121,127,130,143,152,163,169,172,175,181,187,193,207,217,220,223,229,235,241,248,252,255,261,264,271,274,280,290,296,299,305,308,311,317,323,330,333,339,343,349,358,360,374,380,384,390,396,399,405,411,414,417,420,426,429,440,446,461,467,470,473,483,489,495,501,504,510,513,516,523,530,533,545,548],[11,12,13,14,18],"p",{},"Memos是一个",[15,16,17],"strong",{},"开源免费的私人版/家庭版推特","。适合可以在私人服务器、家庭Nas上自建服务，适合喜欢折腾的小伙伴。",[11,20,21],{},"本文内容主要有三部分：",[11,23,24],{},"1、从原作者仓库拉取Memos代码，并本地运行项目",[11,26,27,28,32,33,36,37],{},"2、通过",[29,30,31],"code",{},"docker","发布自己的版本到",[29,34,35],{},"docker hub"," 和 ",[29,38,39],{},"云服务器容器服务",[11,41,42,43],{},"3、在自己的服务器上",[15,44,45],{},"运行和更新Memos",[47,48,49],"h2",{"id":49},"选择合适版本",[11,51,52,55,56,59],{},[15,53,54],{},"首先选择一个版本","，克隆到自己本地，或者直接",[15,57,58],{},"fork到自己的github仓库","再拉下来。",[11,61,62,63,66],{},"因为每个版本的功能不太一致，可以先用 ",[29,64,65],{},"docker desktop"," 跑一下各个版本，本地看看效果，了解一下哪个版本比较好用。",[11,68,69,70,73,74,76],{},"也可以在本地用 ",[29,71,72],{},"docker build","命令运行当前拉下来的版本，再去",[29,75,65],{},"跑起来",[11,78,79],{},"注意有几个参数，我在图里做了标识。",[11,81,82],{},[83,84],"img",{"alt":85,"src":86},"","https://img.zzstudio.cn/1-img-20240725180755.png",[11,88,89,90,93],{},"我这里使用的是",[29,91,92],{},"0.22.3","版本，早期版本我没接触过，所以直接用的最新版，看了下界面和功能完全够我使用了。",[95,96,97],"tip",{},[11,98,99],{},"注意选择后，咱们的版本就固定了，大概率不再跟随原作者更新，除非有非常好用的功能，再进行手动合并",[11,101,102],{},"代码到本地后，首先要保证自己有运行环境。",[11,104,105,106,109,110,113,114,117,118,120],{},"不懂",[29,107,108],{},"Node","或",[29,111,112],{},"Go","如何安装，直接问",[29,115,116],{},"AI","就可以了，现在",[29,119,116],{},"的辅助能力其实要比大部分半吊子开发者要强得多。",[11,122,123,126],{},[15,124,125],{},"AI 我用的豆包","。",[47,128,129],{"id":129},"安装依赖和运行项目",[11,131,132,133,135,136,139,140],{},"首先是",[29,134,112],{},"，根目录下就有",[29,137,138],{},"go.mod","，里面是项目的依赖。",[15,141,142],{},"不懂就直接问AI，可以解决80%的问题",[144,145,150],"pre",{"className":146,"code":148,"language":149},[147],"language-text","go mod tidy\n","text",[29,151,148],{"__ignoreMap":85},[11,153,154,155,158,159,162],{},"然后是web，注意要 ",[29,156,157],{},"cd ./web","，他这里用的",[29,160,161],{},"react","，不过框架对于老前端来说影响不大，基本都能很快上手",[144,164,167],{"className":165,"code":166,"language":149},[147],"pnpm i \n",[29,168,166],{"__ignoreMap":85},[11,170,171],{},"如果只是想看一下界面，可以先用docker跑起来",[11,173,174],{},"打包",[144,176,179],{"className":177,"code":178,"language":149},[147],"docker build ./ -t memoz --load  \n",[29,180,178],{"__ignoreMap":85},[11,182,183,184,186],{},"打包后就可以在你的 ",[29,185,65],{}," 里看到镜像了，直接点击运行即可，也可以用命令运行",[144,188,191],{"className":189,"code":190,"language":149},[147],"docker run -d --name memoz -p 5230:5230 -v /memos/:/var/opt/memos memoz\n",[29,192,190],{"__ignoreMap":85},[11,194,195,196,199,200,203,204,206],{},"注意 ",[29,197,198],{},"memoz","是我起的名字， ",[29,201,202],{},"/memos"," 是我的挂载目录，最后的",[29,205,198],{},"是我刚才打包好的镜像。这些要视情况更改。",[11,208,209,210,216],{},"运行成功就可以打开 ",[211,212,213],"a",{"href":213,"rel":214},"http://localhost:5230",[215],"nofollow"," 看到界面了。",[11,218,219],{},"如果想要本地边开发边调试，可以分别运行go和web",[11,221,222],{},"停掉docker运行的容器后，在项目根目录下先运行go服务",[144,224,227],{"className":225,"code":226,"language":149},[147],"go run bin/memos/main.go       \n",[29,228,226],{"__ignoreMap":85},[11,230,231,232,234],{},"然后 ",[29,233,157],{}," 到前端目录下",[144,236,239],{"className":237,"code":238,"language":149},[147],"pnpm dev\n",[29,240,238],{"__ignoreMap":85},[11,242,243,244,247],{},"然后前端项目就会运行在 ",[29,245,246],{},"http://localhost:3001"," ，此时再从浏览器访问就可以了。",[47,249,251],{"id":250},"发布到docker-hub","发布到docker hub",[11,253,254],{},"memos推荐我们直接用作者发布好的包进行部署，像是这样：",[144,256,259],{"className":257,"code":258,"language":149},[147],"docker run -d --name memoz -p 5230:5230 -v ~/memos/:/var/opt/memos usememos/memos:latest\n",[29,260,258],{"__ignoreMap":85},[11,262,263],{},"那如果我们想拉取自己的版本，就要像作者一样把自己的版本发布上去",[11,265,266,267,270],{},"首先你要",[15,268,269],{},"注册","好自己的账号（docker hub）",[11,272,273],{},"然后要在本地登录",[144,275,278],{"className":276,"code":277,"language":149},[147],"docker login\n",[29,279,277],{"__ignoreMap":85},[11,281,282,283,286,287],{},"然后给刚才",[29,284,285],{},"build的镜像","打上标签，不写具体tag，默认就是",[29,288,289],{},"latest",[144,291,294],{"className":292,"code":293,"language":149},[147],"docker tag \u003Cimage_name> \u003Cdockerhub_username>/\u003Crepository_name>:\u003Ctag>\n",[29,295,293],{"__ignoreMap":85},[11,297,298],{},"然后给打好标签的镜像推送上去",[144,300,303],{"className":301,"code":302,"language":149},[147],"docker push \u003Cdockerhub_username>/\u003Crepository_name>:\u003Ctag>\n",[29,304,302],{"__ignoreMap":85},[11,306,307],{},"登录到docker hub网站上，就可以看到自己发布的镜像了。",[11,309,310],{},"然后在服务器上把自己发布的包跑起来就行了",[144,312,315],{"className":313,"code":314,"language":149},[147],"docker run -d --name memoz -p 5230:5230 -v ~/memos/:/var/opt/memos \u003Cdockerhub_username>/\u003Crepository_name>:\u003Ctag>\n",[29,316,314],{"__ignoreMap":85},[11,318,319,322],{},[15,320,321],{},"然后你就会发现，根本拉不下来","，哪怕是配置了代理，也没法顺利拉取",[11,324,325,326,329],{},"所以我们还是要把自己的镜像发布到对应的云服务器厂商自己的容器服务上，由于我的服务器是",[29,327,328],{},"阿里云","，所以此处我用阿里云演示",[47,331,332],{"id":332},"发布到阿里云容器服务",[11,334,335,336,338],{},"发布过程和",[29,337,35],{},"是一样的 ，只不过登录的是阿里云容器服务的账号密码，推送的目标也是阿里云的容器服务",[340,341,342],"h3",{"id":342},"登录",[144,344,347],{"className":345,"code":346,"language":149},[147],"sudo docker login --username=\u003Cyour username> registry.cn-beijing.aliyuncs.com\n",[29,348,346],{"__ignoreMap":85},[95,350,351],{},[11,352,353,354,357],{},"注意：后面的地址",[29,355,356],{},"registry.cn-beijing.aliyuncs.com","，可以在你的阿里云后台找到",[340,359,174],{"id":174},[11,361,362,363,366,367,370,371,373],{},"打包的时候也有一个坑，就是要注意服务器的",[29,364,365],{},"platform","，在本地打包和push前就要加上参数。 比如我这里是",[29,368,369],{},"linux/amd64","，你可以先不管，等在服务器上运行时，会提示你报错信息，然后再根据提示加上",[29,372,365],{},"参数重新打包发布也可以。",[144,375,378],{"className":376,"code":377,"language":149},[147],"docker buildx build ./ -t memoz --load --platform linux/amd64 (对应阿里云ubuntu服务器)\n",[29,379,377],{"__ignoreMap":85},[340,381,383],{"id":382},"打tag","打Tag",[11,385,386,387],{},"打标签前，需要在阿里云控制台里，先创建好自己的命名空间，我这里是",[29,388,389],{},"zzstudio0",[144,391,394],{"className":392,"code":393,"language":149},[147],"docker tag memoz registry.cn-beijing.aliyuncs.com/zzstudi0/memoz:latest\n",[29,395,393],{"__ignoreMap":85},[340,397,398],{"id":398},"发布",[144,400,403],{"className":401,"code":402,"language":149},[147],"docker push --platform linux/amd64 registry.cn-beijing.aliyuncs.com/zzstudi0/memoz:latest\n",[29,404,402],{"__ignoreMap":85},[406,407,408],"blockquote",{},[11,409,410],{},"此时本地操作已经完成，登录到云服务器再去拉取和运行发布好的镜像",[47,412,413],{"id":413},"运行和更新",[340,415,416],{"id":416},"拉取",[11,418,419],{},"拉取前也是得登录，参考上边",[144,421,424],{"className":422,"code":423,"language":149},[147],"docker pull --platform linux/amd64 registry.cn-beijing.aliyuncs.com/zzstudi0/memoz:latest\n",[29,425,423],{"__ignoreMap":85},[340,427,428],{"id":428},"运行",[11,430,431,432,435,436,439],{},"运行的镜像名称可以通过  ",[29,433,434],{},"docker images"," 查看，也就是 ",[29,437,438],{},"registry.cn-beijing.aliyuncs.com/zzstudi0/memoz"," 部分换成你自己的",[144,441,444],{"className":442,"code":443,"language":149},[147],"docker run -d --name memoz -p 5230:5230 -v /home/memoz/:/var/opt/memos registry.cn-beijing.aliyuncs.com/zzstudi0/memoz\n",[29,445,443],{"__ignoreMap":85},[11,447,448,449,452,453,456,457,460],{},"运行后通过 ",[29,450,451],{}," docker ps","，可以看到正在运行在",[29,454,455],{},"5230","端口下，如果想直接通过5230端口访问，只要在阿里云",[29,458,459],{},"控制台-云服务器-安全组","中打开端口即可",[11,462,463,464],{},"当自己在本地新增或者修改了某些功能后，",[15,465,466],{},"再按照上述的步骤，重新发布一个新版本的镜像",[11,468,469],{},"然后在更新和重新运行镜像",[340,471,472],{"id":472},"更新",[11,474,475,478,479,482],{},[29,476,477],{},"container_id"," 可以通过 ",[29,480,481],{},"docker ps"," 查看到",[144,484,487],{"className":485,"code":486,"language":149},[147],"停止目前运行的容器\ndocker stop container_id\n删除容器（为了避免名称冲突）\ndocker rm container_id\n",[29,488,486],{"__ignoreMap":85},[11,490,491,492],{},"然后拉取新推送的版本， 比如",[29,493,494],{},"1.1.0",[144,496,499],{"className":497,"code":498,"language":149},[147],"docker pull --platform linux/amd64 registry.cn-beijing.aliyuncs.com/zzstudi0/memoz:1.1.0\n",[29,500,498],{"__ignoreMap":85},[11,502,503],{},"然后再重新运行新版本",[144,505,508],{"className":506,"code":507,"language":149},[147],"docker run -d --name memoz -p 5230:5230 -v /home/memoz/:/var/opt/memos registry.cn-beijing.aliyuncs.com/zzstudi0/memoz:1.1.0\n",[29,509,507],{"__ignoreMap":85},[11,511,512],{},"再从外网访问，检查页面是否有所变化",[47,514,515],{"id":515},"总结",[11,517,518,519,522],{},"本文介绍了如何本地运行",[29,520,521],{},"Memos","，以及如何发布和部署在自己的云服务器上。",[11,524,525,526,529],{},"因为Web部分只是普通的",[29,527,528],{},"React+Vite","，对大部分人没什么难度，所以后面修改细节就不水文了，功能方面的改造会水一水。",[11,531,532],{},"说到底，这只是一个普通的内容工具，关键还是真的有内容要发布才行。",[95,534,535],{},[11,536,537,538,541,542,544],{},"文章发布时，作者已经更新了",[29,539,540],{},"0.22.4","版本，修改了标签和分类的筛选机制（",[29,543,92],{},"版本比较难用），把热力图也挪到了首页，所以推荐新入坑的小伙伴直接上最新的版本。",[11,546,547],{},"以上就是全部内容啦👏",[11,549,550],{},"对Memos感兴趣的话欢迎私聊讨论~",{"title":85,"searchDepth":552,"depth":552,"links":553},2,[554,555,556,557,564,569],{"id":49,"depth":552,"text":49},{"id":129,"depth":552,"text":129},{"id":250,"depth":552,"text":251},{"id":332,"depth":552,"text":332,"children":558},[559,561,562,563],{"id":342,"depth":560,"text":342},3,{"id":174,"depth":560,"text":174},{"id":382,"depth":560,"text":383},{"id":398,"depth":560,"text":398},{"id":413,"depth":552,"text":413,"children":565},[566,567,568],{"id":416,"depth":560,"text":416},{"id":428,"depth":560,"text":428},{"id":472,"depth":560,"text":472},{"id":515,"depth":552,"text":515},"2024-07-25T00:00:00.000Z","基于某个版本魔改自己的Memos","md","2025-02-12T00:00:00.000Z",{"published":575,"category":576},"2024-07-30 14:14:16","技术",true,"/post/memos/memos-self-build-quick-start","---\ntitle: Memos自建服务入门指南\ndescription: 基于某个版本魔改自己的Memos\npublished: 2024-07-30 14:14:16\ntags: [\"技术\", \"Memos\"]\ncategory: 技术\ndate: 2024-07-25\nlastmod: 2025-02-12\nshowTitle: Memos自建服务入门指南\n---\nMemos是一个**开源免费的私人版/家庭版推特**。适合可以在私人服务器、家庭Nas上自建服务，适合喜欢折腾的小伙伴。\n\n本文内容主要有三部分：\n\n1、从原作者仓库拉取Memos代码，并本地运行项目\n\n2、通过`docker`发布自己的版本到`docker hub` 和 `云服务器容器服务`\n\n3、在自己的服务器上**运行和更新Memos**\n\n## 选择合适版本\n\n**首先选择一个版本**，克隆到自己本地，或者直接**fork到自己的github仓库**再拉下来。\n\n因为每个版本的功能不太一致，可以先用 `docker desktop` 跑一下各个版本，本地看看效果，了解一下哪个版本比较好用。\n\n也可以在本地用 `docker build`命令运行当前拉下来的版本，再去`docker desktop`跑起来\n\n注意有几个参数，我在图里做了标识。\n\n![](https://img.zzstudio.cn/1-img-20240725180755.png)\n\n我这里使用的是`0.22.3`版本，早期版本我没接触过，所以直接用的最新版，看了下界面和功能完全够我使用了。\n\n:::tip\n注意选择后，咱们的版本就固定了，大概率不再跟随原作者更新，除非有非常好用的功能，再进行手动合并\n:::\n\n代码到本地后，首先要保证自己有运行环境。\n\n不懂`Node`或`Go`如何安装，直接问`AI`就可以了，现在`AI`的辅助能力其实要比大部分半吊子开发者要强得多。\n\n**AI 我用的豆包**。\n\n## 安装依赖和运行项目\n\n首先是`Go`，根目录下就有`go.mod`，里面是项目的依赖。**不懂就直接问AI，可以解决80%的问题**\n\n```\ngo mod tidy\n```\n\n然后是web，注意要 `cd ./web`，他这里用的`react`，不过框架对于老前端来说影响不大，基本都能很快上手\n\n```\npnpm i \n```\n\n如果只是想看一下界面，可以先用docker跑起来\n\n打包\n\n```\ndocker build ./ -t memoz --load  \n```\n\n打包后就可以在你的 ` docker desktop ` 里看到镜像了，直接点击运行即可，也可以用命令运行\n\n```\ndocker run -d --name memoz -p 5230:5230 -v /memos/:/var/opt/memos memoz\n```\n\n注意 `memoz`是我起的名字， `/memos` 是我的挂载目录，最后的`memoz`是我刚才打包好的镜像。这些要视情况更改。\n\n运行成功就可以打开 http://localhost:5230 看到界面了。\n\n如果想要本地边开发边调试，可以分别运行go和web\n\n停掉docker运行的容器后，在项目根目录下先运行go服务\n\n```\ngo run bin/memos/main.go       \n```\n\n然后 `cd ./web` 到前端目录下\n\n```\npnpm dev\n```\n\n然后前端项目就会运行在 `http://localhost:3001` ，此时再从浏览器访问就可以了。\n\n## 发布到docker hub\n\nmemos推荐我们直接用作者发布好的包进行部署，像是这样：\n\n```\ndocker run -d --name memoz -p 5230:5230 -v ~/memos/:/var/opt/memos usememos/memos:latest\n```\n\n那如果我们想拉取自己的版本，就要像作者一样把自己的版本发布上去\n\n首先你要**注册**好自己的账号（docker hub）\n\n然后要在本地登录\n\n```\ndocker login\n```\n\n然后给刚才`build的镜像`打上标签，不写具体tag，默认就是`latest`\n\n```\ndocker tag \u003Cimage_name> \u003Cdockerhub_username>/\u003Crepository_name>:\u003Ctag>\n```\n\n然后给打好标签的镜像推送上去\n\n```\ndocker push \u003Cdockerhub_username>/\u003Crepository_name>:\u003Ctag>\n```\n\n登录到docker hub网站上，就可以看到自己发布的镜像了。\n\n然后在服务器上把自己发布的包跑起来就行了\n\n```\ndocker run -d --name memoz -p 5230:5230 -v ~/memos/:/var/opt/memos \u003Cdockerhub_username>/\u003Crepository_name>:\u003Ctag>\n```\n\n**然后你就会发现，根本拉不下来**，哪怕是配置了代理，也没法顺利拉取\n\n所以我们还是要把自己的镜像发布到对应的云服务器厂商自己的容器服务上，由于我的服务器是`阿里云`，所以此处我用阿里云演示\n\n## 发布到阿里云容器服务\n\n发布过程和`docker hub`是一样的 ，只不过登录的是阿里云容器服务的账号密码，推送的目标也是阿里云的容器服务\n\n### 登录\n\n```\nsudo docker login --username=\u003Cyour username> registry.cn-beijing.aliyuncs.com\n```\n:::tip\n注意：后面的地址`registry.cn-beijing.aliyuncs.com`，可以在你的阿里云后台找到\n:::\n\n### 打包\n\n打包的时候也有一个坑，就是要注意服务器的`platform`，在本地打包和push前就要加上参数。 比如我这里是`linux/amd64`，你可以先不管，等在服务器上运行时，会提示你报错信息，然后再根据提示加上`platform`参数重新打包发布也可以。\n\n```\ndocker buildx build ./ -t memoz --load --platform linux/amd64 (对应阿里云ubuntu服务器)\n```\n\n### 打Tag\n\n打标签前，需要在阿里云控制台里，先创建好自己的命名空间，我这里是`zzstudio0`\n\n```\ndocker tag memoz registry.cn-beijing.aliyuncs.com/zzstudi0/memoz:latest\n```\n\n### 发布\n\n```\ndocker push --platform linux/amd64 registry.cn-beijing.aliyuncs.com/zzstudi0/memoz:latest\n```\n\n> 此时本地操作已经完成，登录到云服务器再去拉取和运行发布好的镜像\n\n## 运行和更新\n### 拉取\n\n拉取前也是得登录，参考上边\n\n```\ndocker pull --platform linux/amd64 registry.cn-beijing.aliyuncs.com/zzstudi0/memoz:latest\n```\n\n### 运行\n\n运行的镜像名称可以通过  `docker images` 查看，也就是 `registry.cn-beijing.aliyuncs.com/zzstudi0/memoz` 部分换成你自己的\n\n```\ndocker run -d --name memoz -p 5230:5230 -v /home/memoz/:/var/opt/memos registry.cn-beijing.aliyuncs.com/zzstudi0/memoz\n```\n\n运行后通过 ` docker ps`，可以看到正在运行在`5230`端口下，如果想直接通过5230端口访问，只要在阿里云`控制台-云服务器-安全组`中打开端口即可\n\n当自己在本地新增或者修改了某些功能后，**再按照上述的步骤，重新发布一个新版本的镜像**\n\n然后在更新和重新运行镜像\n\n### 更新\n\n`container_id` 可以通过 `docker ps` 查看到\n\n```\n停止目前运行的容器\ndocker stop container_id\n删除容器（为了避免名称冲突）\ndocker rm container_id\n```\n\n然后拉取新推送的版本， 比如`1.1.0`\n\n```\ndocker pull --platform linux/amd64 registry.cn-beijing.aliyuncs.com/zzstudi0/memoz:1.1.0\n```\n\n然后再重新运行新版本\n\n```\ndocker run -d --name memoz -p 5230:5230 -v /home/memoz/:/var/opt/memos registry.cn-beijing.aliyuncs.com/zzstudi0/memoz:1.1.0\n```\n\n再从外网访问，检查页面是否有所变化\n\n## 总结\n\n本文介绍了如何本地运行`Memos`，以及如何发布和部署在自己的云服务器上。\n\n因为Web部分只是普通的`React+Vite`，对大部分人没什么难度，所以后面修改细节就不水文了，功能方面的改造会水一水。\n\n说到底，这只是一个普通的内容工具，关键还是真的有内容要发布才行。\n\n:::tip\n文章发布时，作者已经更新了`0.22.4`版本，修改了标签和分类的筛选机制（`0.22.3`版本比较难用），把热力图也挪到了首页，所以推荐新入坑的小伙伴直接上最新的版本。\n:::\n\n以上就是全部内容啦👏\n\n对Memos感兴趣的话欢迎私聊讨论~\n\n",{"title":5,"description":571},"post/Memos/Memos-self-build-quick-start",[576,521],"aHoZsa1Su33sen9iMRq18G9R-bpbIW2xWjr1_GS50uE",[585,589],{"title":586,"path":587,"stem":588},"OpenClaw 安装入门（Windows）","/post/zzao/openclaw/openclaw-install-windows","post/zzao/openclaw/openclaw-install-windows",{"title":590,"path":591,"stem":592},"假设你是AI，你的Skill应该是什么样的","/post/zzao/ai-skill-structure","post/zzao/ai-skill-structure",1779005086784]