Memos 碎片笔记工具
很久开始就自建了Memos,没有很好地结合习惯使用起来。
最近打算重新拾起,先写一篇文章怀念一下配置流程
胜利的样子✌🏻
memos 是一个开源的自托管 笔记系统。支持 Markdown 语法、公开分享、iframe 嵌入、标签管理、日历视图、简单的数据迁移与备份功能。
对标产品:Flomo
docker配置
Docker Run
docker run -d \
--init \
--name memos \
--publish 5230:5230 \
--volume ~/.memos/:/var/opt/memos \
ghcr.io/usememos/memos:latest
启动后数据存储在`~/.memos`下,默认使用SQLite存储。
默认端口为5230.
升级
停止容器并移除
docker stop memos && docker rm memos
备份数据 - 可选项
cp -r ~/.memos/memos_prod.db ~/.memos/memos_prod.db.bak
拉取新镜像
docker pull ghcr.io/usememos/memos:latest
重新启动容器
见 Docker Run
代理配置
memos.conf
upstream memos {
server 127.0.0.1:5230;
}
server {
listen 80;
listen [::]:80;
listen 443 ssl;
ssl_certificate /etc/nginx/cert_file/fullchain.pem;
ssl_certificate_key /etc/nginx/cert_file/key.pem;
server_name {xxxxxxxxxx.com};
client_max_body_size 1024m;
location / {
proxy_pass http://memos;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
普通使用的话,Http即可,因为我使用了客户端Moe Memos,苹果APP中发送请求需要加密,所以配置的Https。
参考
Github: https://github.com/usememos/memos
Docs: https://www.usememos.com/docs/install/self-hosting
客户端
我使用了Moe Memos
胜利的样子✌🏻
下载后直接使用
我直接使用账号和密码登录。
除此之外,还支持通过`Access Token`和`OpenID`,我均未使用。
可以查看文档 Access Tokens 。
使用Telegram Bot
有时会在TG中看到不错的内容,通过TG的Bot直接保存内容是一个快捷的方式。
创建TG Bot
在TG中搜索 `BotFater` ,然后输入`/newbot`
依次输入bot的名称、bot的username(需要用`_bot`结尾)
完成后会告知创建完成,核心关注:
t.me/xxxxx 格式的bot链接
`4839574812:AAFD39kkdpWt3ywyRZergyOLMaJhac60qc` 格式的bot的token
关联Memos和TG Bot
进入`Settings - System`页面,找到`Telegram Bot Token`的输入框,并输入提取的 bot token,点击保存。
理论上,Memos和TG Bot关联已经产生,但是会有一个问题,国内的服务器无法正常访问到TG。
配置 CloudFlare Worker 代理
我使用了CloudFlare的Worker作为中转服务器。
需要在CloudFlare中创建一个Worker应用,并在编辑器中输入如下代码
const tg_host = "api.telegram.org";
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
var u = new URL(request.url);
u.host = tg_host;
var req = new Request(u, {method: request.method,headers: request.headers,body: request.body});
const result = await fetch(req);
return result;
}
上面的代码对所有请求都会转发,可以通过添加白名单的方式处理非自己的bot,细节见参考
给Worker配置域名
给部署的 Worker 设置自定义域名,防止被国内网络屏蔽。
在Memos的设置中输入Bot token
需要调整`Telegram Bot Token`中的内容,修改成`PROXY_URL/bot<token>`。
https://bot.xxxxxxx.com/bot4839574812:AAFD39kkdpWt3ywyRZergyOLMaJhac60qc
绑定与Bot绑定Memos的用户
在创建的bot的聊天页面,输入`/start`,核心关注:
userid xxxxxxxx
将这个userid添加到 `Settings - Preferences - Telegram UserID`中,点击保存
PS:输入`/start`长时间无反应,请确认代理是否正常。
测试
在bot聊天页面,发送测试内容,刷新Memos网页,观察是否添加成功。
参考
Memos - Integration - Telegram Bot
A reverse proxy for Telegram Bot API on Aliyun Function Compute / Cloudflare Workers
接入CloudFlare R2
如果图片等附件保存在本地,会有后续的迁移、流量的成本。以现在个人使用的情况,打算把对象都存储到免费的R2上。
创建存储空间 Bucket
给Bucket创建访问的凭证
需要在R2页面的右上角进入
允许Bucket外部访问权限
在Butcket的设置中,找到`R2.dev.subdomain`,点击`Allow Access`,并确认
配置域名
除了使用R2的子域名外,还可以使用自定义域名
在Memos中配置
字段均可映射,需要注意的是:
Endpoint
需要添加`https://`的前缀Region
需要填入`auto``Storage Path` 填入存入R2的文件前缀
`URL prefix` 填入外部访问的域名
配置完成后,需要选择为`当前对象存储`。
测试
通过TG bot发送图片进行测试
在Resource的页面中,查看图片是否正常
参考
Memos - Advanced Settings - CloudfalreR2
遗留问题
通过TG Bot发送图片只存入Resource,没有关联Memo
看到有提ISSUE,代码已经fix,等下版本更新
在TG Bot中转发+评论的方式添加内容,会保存两条Memos
手动提交ISSUE