【Docker项目】基于memos打造自己的自托管备忘录中心,Windows、MacOS、iOS、安卓、微信等多平台信息同步中心
前言
在工作和生活中经需要记录一些备忘录,桌面端和移动端都有很好的工具软件,但是都是独立的,没法做到多平台上的随心所欲的记录,同步起来总是感觉不舒服,一直没有一个很趁手的工具,直到用memos之前我还在使用微信的文件传输助手同步信息。
简单介绍一下memos
memos是一个开源自托管的备忘录中心,项目基于 Golang 和 TypeScript 语言开发。
特点(来自官网):
- 开源且永久免费,通过我们的开源解决方案,拥抱创意无国界的未来。
- 使用docker进行搭建托管,完全控制数据和隐私,享受 Docker 提供的灵活性、可扩展性和易于设置。
- 文本支持markdown,告别丰富格式带来的压倒性精神负担,采用极简主义方法。
- 轻松自定义和共享您的笔记,借助我们直观的共享功能,您可以轻松地与他人协作和分发笔记。
- 用于第三方服务的 RESTful API,拥抱集成的力量,并通过 RESTful API 支持释放新的可能性。
PS: 另外memos的UI确实很好看。
下面是github上的star变化,2023年的新星值得一试,让它成为工作和生活流上一款非常有帮助的工具。
Github 地址:https://kgithub.com/usememos/memos
通过docker部署memos在服务器上
搭建前的环境准备
- 服务器:可以是购买的VPS也可以是家里自己的电脑,自己电脑需要有公网IP,没有公网的话要做内网穿透。我这里是用的甲骨文云的服务器,arm架构4核24g内存。
- 系统:Ubuntu或者Debian,我用的是Ubuntu22.04 arm64
- 软件:Docker,Docker-compose,Nginx(我用的Nginx Proxy Manager配置方便一点)
- 其他:最好还要有一枚域名
1.docker的安装
#使用官方安装脚本
wget -qO- get.docker.com | bash
#上面命令安装完成后查看 docker 版本确认安装成功
docker -v
# 设置docker开机自动启动
systemctl enable docker
2.Docker-compose安装
Docker-compose下载地址:https://github.com/docker/compose/releases
我是arm64架构下按如下命令下载文件重命名为docker-compose放在 /usr/local/bin/目录下,这里根据自己服务器架构选择对应版本。
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-linux-aarch64" -o /usr/local/bin/docker-compose
更改文件权限并查看版本
sudo chmod +x /usr/local/bin/docker-compose #更改文件权限
docker-compose --version #查看 docker-compose 版本
3.Nginx Proxy Manager安装
创建Nginx Proxy Manager安装目录:
sudo -i
mkdir -p /root/data/docker_data/npm
cd /root/data/docker_data/npm
创建并编写docker-compose.yaml
vim docker-compose.yaml
粘贴如下内容:
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # 冒号左边可以改成自己服务器未被占用的端口
- '81:81' # 冒号左边可以改成自己服务器未被占用的端口
- '443:443' # 冒号左边可以改成自己服务器未被占用的端口
volumes:
- ./data:/data # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 data 文件夹中
- ./letsencrypt:/etc/letsencrypt # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 letsencrypt 文件夹中
运行如下命令,开始拉取镜像,创建并运行容器
docker-compose up -d
容器正常运行后,浏览器输入http://ip地址:81 就可以访问npm面板了,这里的端口号就是上面yaml文件中对应映射的端口号按文档81端口。
npm面板默认账号密码如下
Email: admin@example.com
Password: changeme
memos的安装
创建目录:
sudo -i
mkdir -p /root/data/docker_data/memos
cd /root/data/docker_data/memos
创建并编写docker-compose.yaml
vim docker-compose.yaml
粘贴如下内容:
version: '3.3'
services:
usememos:
container_name: memos
ports:
- '5230:5230'
volumes:
- './data:/var/opt/memos' ##数据放在当前文件夹下data目录方便后期备份迁移
image: 'ghcr.io/usememos/memos:latest'
运行如下命令,开始拉取镜像,创建并运行容器
docker-compose up -d
容器运行后,浏览器输入http://ip地址:5230 ,第一次需要注册管理员账户密码。
给memos配置反向代理
配置域名指向服务器地址,我的域名DNS是在cloudflare中设置的如下:
登入服务器Nginx proxy manager面板中设置域名反向代理,因为是docker安装可以直接填写本地docker路由地址,配置过程如下:
memos的使用
配置telegram机器人
@botFather /newbot 申请新的通知机器人,按要要求输入机器人名称及用户名称,获取机器人API。 @GetUserID /start 获取用户ID。
然后memos设置->偏好设置中 填入自己的UserID,设置->系统中填入申请机器人API。
然后和机器人发送任意消息都可以同步到自己的memos上。
安卓手机端的使用
IOS手机端Github项目地址:https://github.com/mudkipme/MoeMemos
安卓手机端Github项目地址:https://github.com/mudkipme/MoeMemos
可以使用open API或者域名账号密码的方式登入。目前手机端还有一些功能还希望完善,如通知功能等。
浏览器插件
chrom插件地址:https://chrome.google.com/webstore/detail/memos-bber/cbhjebjfccgchgbmfbobjmebjjckgofe/
安装后,连接自己的open API就可以实时发送memos消息了
微信小程序
微信小程序Github地址:https://kgithub.com/Rabithua/memos_wmp
因为微信小程序需要备案,感兴趣可以备案后fork作者的项目上线自己的小程序。
OSS存储配置
这里我是以七牛云为例,七牛云注册后创建对象存储。我是海外服务器所以只能创建新加坡的。
点击概览,查看S3域名
https://developer.qiniu.com/kodo/4088/s3-access-domainname 这里查看自己存储区域ID
七牛云个人中心中密钥管理,复制保存自己的AccessKey和ScretKey
保存好信息后,在memos中设置->存储设置中填写S3存储信息,创建好后选择刚刚创建的存储就好了
注意:S3端点域名记前记得加https:// 如果绑定了自己域名,在URL前缀处填上https://自己绑定的域名
进阶玩法
配合MouseInc鼠标手势软件打造自己的快捷粘贴板。
比如我现在使用的功能,在windows系统中按住Ctrl再快速按两次C会弹出快捷操作菜单,可以发送复制内容到memos上。
编写MouseInc快捷菜单
添加三个快捷菜单,代表三种显示模式
编写菜单执行动作命令
以“发送仅自己“为例,代码如下,如果不想弹黑框如上截图在下面添加一个"hide”命令。
#更据自己脚本放的路径修改
python C:\Users\xxx\Desktop\curlPython\messagesent.py PUBLIC
快捷菜单执行作命令是调用python执行messagesent.py脚本(后面贴了该脚本代码可参考),脚本有一个输入参数,参数PUBLIC,就是发布memos显示选项,也就是visibility的键值。
如果是仅自己可见就是PRIVATE,注册用户可见就是PROTECTED,另外两个快捷菜单命令其他都相同,只是这里执行脚本的参数不同。
选择发送内容,按住Ctrl再快速按两次C弹出快捷操作菜单如下:
点击发送仅自己选项,biu~~~ ,发送到自己的memos上了,可选择不同显示方式。
messagesent.py详细代码如下:
import sys
import requests
import json
import pyperclip
def send_json_to_url(json_content):
url = "https://xxxxxxxxxxx" # https://xxxxxxxxxxx替换为自己的memos OPEN API URL
headers = {"Content-Type": "application/json"}
proxy = {
# 替换为实际的代理服务器地址和端口,如没代理可不填
"http": "http代理服务器域名:端口",
"https": "https代理服务器域名:端口"
}
response = requests.post(url, data=json.dumps(json_content), headers=headers,proxies=proxy) #不用代理注释该行
# response = requests.post(url, data=json.dumps(json_content), headers=headers) #不用代理取消注释该行
if response.status_code == 200:
return response.json()
else:
return {"error": "Request failed"}
if __name__ == "__main__":
if len(sys.argv) < 1 :
print("Usage: python send_json.py content visib")
sys.exit(1)
content = pyperclip.paste()
visib = sys.argv[1]
if visib not in ["PUBLIC", "PRIVATE", "PROTECTED"]:
print("Error: visib must be one of PUBLIC, PRIVATE, or PROTECTED")
sys.exit(1)
json_content = {
"content": content,
"visibility": visib
}
result = send_json_to_url(json_content)
print(result)
总结
Memos是一款优秀的开源自托管知识库,它为你提供了轻松管理和分享知识的新途径。同时也可以用来打通跨平台的消息数据的同步。目前项目非常活跃有很多开发者参与进来,期待将来会有越来越多的功能实现。