搞一个属于自己的”微博” --- Memos
一、Memos 介绍
Memos 是一款轻量级的开源自托管备忘录平台,设计简单,专注于记录想法和便签。它适合个人使用或团队协作,是一款简洁却功能强大的工具,它主要有以下几个特点
- 简单的笔记记录
- 支持 Markdown 语法,可以方便地编写格式化文本。
- 支持代码块、高亮等功能,适合开发者或技术人员。
- 标签与组织
- 通过标签(Tags)对备忘录进行分类和整理,便于检索。
- 可用过滤器快速定位特定内容。
- 跨平台支持
- Memos 支持浏览器直接访问,也可以通过 Progressive Web App (PWA) 安装为桌面应用
- 可通过 API 集成到其他工具或服务中
- 实时同步
- 提供实时保存和同步功能,确保内容不会丢失
- 支持多设备访问,便于随时随地查看备忘录
- 搜索功能
- 内置强大的全文搜索,快速找到所需的备忘录
- 开源与自托管
- 代码开源,用户可以自行托管,掌控自己的数据
- 支持 Docker 快速部署
- 轻量且快速
- Memos 体积小,资源占用少,响应速度快,适合对性能有要求的用户
二、部署 Memos
0. 环境配置
主机 | IP | 系统 |
---|---|---|
Ubuntu | 192.168.100.130 | Ubuntu |
0.1 更新 apt 源
更新升级一下系统内的软件,让他们是最新版的
sudo apt update -y && sudo apt upgrade -y
0.2 配置 SSH 连接
这里可以有两种方式
- 一种是可以直接使用你注册时创建的 user 登录(我这里创建的 user 是
moka
),然后修改 root 密码并切换回 root 用户 - 另一种是可以直接在 SSH 配置文件上修改允许 root 用户登录 SSH,然后修改 root 用户密码
这两种我都介绍一下,首先是第一种
0.2.1 使用非 root 用户登录 SSH(推荐)
首先安装 SSH
sudo apt install -y ssh
然后修改 root 用户密码
sudo passwd root
然后设置密码,之后进入 终端 创建连接的时候,用户名注意要写成你创建的 user 的名字,而不是 root
然后可以使用命令切换到 root 用户
su -
这里输入 root 用户的密码之后即可切换到 root 用户
0.2.2 使用 root 用户登录 SSH
首先安装 SSH
sudo apt install -y ssh
然后编辑 SSH 配置文件
sudo vim /etc/ssh/sshd_config
找到以下内容并修改
# 允许 root 用户通过 SSH 登录
PermitRootLogin yes
# 允许使用密码登录
PasswordAuthentication yes
然后重启 SSH 服务
sudo systemctl restart ssh
然后修改 root 用户密码
sudo passwd root
好了,基础配置完成了,下面来让我们正式部署 Memos 了
同样,这里也有两种方式部署:
- Docker 部署(推荐,适合新手)
- 二进制文件部署(main)
这里我们两种方法都讲一下
1. Docker 部署
1.1 安装 Docker
Ubuntu 安装 Docker 比较简单,因为 apt 源里面都有
sudo apt install docker.io
然后添加上 Docker 的”加速器”(国内用户专属)
sudo mkdir -p /etc/docker
sudo vim /etc/docker/daemon.json
然后在里面添加上以下内容
{
"registry-mirrors": [
"https://dockerhub.icu",
"https://docker.chenby.cn",
"https://docker.1panel.live",
"https://docker.awsl9527.cn",
"https://docker.anyhub.us.kg",
"https://dhub.kubesre.xyz",
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.c"
]
}
然后保存后应用
sudo systemctl daemon-reload
sudo systemctl restart docker
1.2 安装 Memos
根据官方文档里给出来的步骤
此命令将在后台启动 Memos,并将其暴露在端口 5230 上。数据将存储在 ~/.memos/ 中,这是用户主目录中的隐藏目录
sudo docker run -d \
--init \
--name memos \
--publish 5230:5230 \
--volume ~/.memos/:/var/opt/memos \
neosmemo/memos:stable
然后在防火墙上开放端口 5230
sudo ufw allow 5230
此时进入 http://192.168.100.130:5230
即可进入 Memos
PS:有关 Docker 的使用的详情可以参考这篇文章:Docker 的安装与使用↗
2. 二进制文件部署
2.1 安装数据库
Memos 官方推荐的数据库是 SQLite,我们这里也安装这个
如果非要使用其他数据库的话,可以参考一下官方文档↗
sudo apt install -y sqlite3
安装好即可
2.2 安装 Memos
首先,下载 wget 或者 curl 等工具,方便后续下载内容
这里我两个都下,实际上二选一即可
sudo apt install -y curl wget
然后创建文件夹,用来放置 Memos 的数据库以及二进制文件
mkdir -p ~/memos/data
然后进入这个文件夹
cd ~/memos
然后进入到 Memos Github 的 Latest 页面↗,下载最新的二进制文件
可以使用 wget 进行下载
wget https://github.com/usememos/memos/releases/download/v0.23.0/memos_v0.23.0_linux_amd64.tar.gz
也可以使用 curl 进行下载
curl -O https://github.com/usememos/memos/releases/download/v0.23.0/memos_v0.23.0_linux_amd64.tar.gz
然后解压压缩包并删除这个压缩包
tar -zxf memos_v0.23.0_linux_amd64.tar.gz && rm -f memos_v0.23.0_linux_amd64.tar.gz
给 memos
这个二进制程序添加使用权(执行权限)
chmod +x memos
然后就可以运行这个程序了
./memos --data ./data --port 5230
可以看到以下内容即为成功
moka@moka-Ubuntu:~/memos$ ./memos --data ./data --port 5230
---
Server profile
version: 0.23.0
data: /home/moka/memos/data
dsn: /home/moka/memos/data/memos_dev.db
addr:
port: 5230
mode: dev
driver: sqlite
---
███╗ ███╗███████╗███╗ ███╗ ██████╗ ███████╗
████╗ ████║██╔════╝████╗ ████║██╔═══██╗██╔════╝
██╔████╔██║█████╗ ██╔████╔██║██║ ██║███████╗
██║╚██╔╝██║██╔══╝ ██║╚██╔╝██║██║ ██║╚════██║
██║ ╚═╝ ██║███████╗██║ ╚═╝ ██║╚██████╔╝███████║
╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝
Version 0.23.0 has been started on port 5230
---
See more in:
👉Website: https://usememos.com
👉GitHub: https://github.com/usememos/memos
---
然后就可以到 http://192.168.100.130:5230
进入 Memos
但是我们这里先不进,因为这样不关的话我们就用不了机器了,而且关闭这个终端的话这个程序也会停止
我们这里先使用 Ctrl+C 先退出这个 memos,我们这里先为 Memos 配置后台服务(systemd)
首先创建 Systemd 服务文件
sudo touch /etc/systemd/system/memos.service
然后添加以下内容
sudo vim /etc/systemd/system/memos.service
[Unit]
Description=Memos Service
After=network.target
[Service]
ExecStart=/home/moka/memos/memos --data /home/moka/memos/data --port 5230
Restart=always
User=moka
WorkingDirectory=/home/moka/memos
[Install]
WantedBy=multi-user.target
- 这里面涉及到
moka
的位置都换成你们自己创建 user 的用户名 - 如果你用的是 root 用户下载/执行的,就把这里的
/home/moka
全都替换成/root
并且下面的User
后面的内容也要换成root
而不是moka
然后启动并应用服务
sudo systemctl daemon-reload
sudo systemctl enable memos
sudo systemctl start memos
此时进入 http://192.168.100.130:5230
即可进入 Memos
三、配置 nginx(可选)
安装完 Memos 之后,然后如果想要在公网上使用的话,就需要配置 HTTPS 使用
这里就需要域名和SSL证书什么的就不多说了
- 我们这里假设你已经整完了
- 域名是
testmemos.com
- 域名对应的SSL证书也存放在了
/etc/nginx/ssl/
目录下
- 域名是
这里提供一个 nginx 配置文件,作为参考
server {
listen 80;
server_name testmemos.com;
# 将 HTTP 请求重定向到 HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name testmemos.com;
# SSL 证书配置
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# 设置上传文件大小限制
client_max_body_size 10M;
# 反向代理配置
location / {
proxy_pass http://127.0.0.1:5230;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# 静态资源缓存配置
location ~* \.(ico|css|js|gif|jpe?g|png|woff2?|eot|ttf|svg|otf)$ {
expires 6M;
access_log off;
add_header Cache-Control "public";
proxy_pass http://127.0.0.1:5230;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
四、第三方客户端
memos 有着不少第三方客户端:
- Moe Memos↗ – 第三方客户端 iOS and Android
- lmm214/memos-bber↗ – Chrome 扩展
- Rabithua/memos_wmp↗ – 可以自己搭建的微信小程序
- qazxcdswe123/telegramMemoBot↗ – Telegram Bot
- eallion/memos.top↗ – 通过 Memos API 渲染的静态网页.
- eindex/logseq-memos-sync↗ – Logseq 插件
- JakeLaoyu/memos-import-from-flomo↗ – 从 flomo、微信读书导入数据 wechat reading.
- Send to memos↗ – 快捷指令 for iOS.
- Memos Raycast Extension↗ – Raycast extension, source code↗
- Obsidian Memos↗ – 用一个全新的方式来在 Obsidian 中记录日程
五、API
这里列举四个比较常用的 API,其他 API 可以查看 官方 API 文档↗
1. 查询 memos
curl -s https://{YOUR_SITE}/api/v1/memos \
-H "Accept: application/json" \
-H "Authorization: Bearer {YOUR_API_TOKEN}"
2. 查询资源(resouces)
curl -s https://{YOUR_SITE}/api/v1/resources \
-H "Accept: application/json" \
-H "Authorization: Bearer {YOUR_API_TOKEN}"
3. 查询反应(reaction)
curl -s -X GET https://{YOUR_SITE}/api/v1/{memos_id}/reactions \
-H "Accept: application/json" \
-H "Authorization: Bearer {YOUR_API_TOKEN}"
4. 添加反应(reaction)
curl -s -X POST https://{YOUR_SITE}/api/v1/{memos_id}/reactions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {YOUR_API_TOKEN}" \
-d '{
"reaction": {
"contentId": "{memos_id}",
"reactionType": "😄"
}
}'