前言

在工作和生活中经需要记录一些备忘录,桌面端和移动端都有很好的工具软件,但是都是独立的,没法做到多平台上的随心所欲的记录,同步起来总是感觉不舒服,一直没有一个很趁手的工具,直到用memos之前我还在使用微信的文件传输助手同步信息。

简单介绍一下memos

memos是一个开源自托管的备忘录中心,项目基于 Golang 和 TypeScript 语言开发。

特点(来自官网):

  • 开源且永久免费,通过我们的开源解决方案,拥抱创意无国界的未来。
  • 使用docker进行搭建托管,完全控制数据和隐私,享受 Docker 提供的灵活性、可扩展性和易于设置。
  • 文本支持markdown,告别丰富格式带来的压倒性精神负担,采用极简主义方法。
  • 轻松自定义和共享您的笔记,借助我们直观的共享功能,您可以轻松地与他人协作和分发笔记。
  • 用于第三方服务的 RESTful API,拥抱集成的力量,并通过 RESTful API 支持释放新的可能性。

PS: 另外memos的UI确实很好看。

下面是github上的star变化,2023年的新星值得一试,让它成为工作和生活流上一款非常有帮助的工具。

Snipaste_2023-08-22_15-01-50.png

官网地址:https://usememos.com/

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

image-ftfj.png 我是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 ,第一次需要注册管理员账户密码。

Snipaste_2023-08-22_13-28-05.png Snipaste_2023-08-22_13-17-37.png

给memos配置反向代理

配置域名指向服务器地址,我的域名DNS是在cloudflare中设置的如下:

Snipaste_2023-08-23_11-49-32.png

登入服务器Nginx proxy manager面板中设置域名反向代理,因为是docker安装可以直接填写本地docker路由地址,配置过程如下:

Snipaste_2023-08-22_13-41-14.png

Snipaste_2023-08-22_13-42-39.png

Snipaste_2023-08-22_13-38-19.png

Snipaste_2023-08-22_13-39-59.png

memos的使用

配置telegram机器人

@botFather /newbot 申请新的通知机器人,按要要求输入机器人名称及用户名称,获取机器人API。 @GetUserID /start 获取用户ID。

Snipaste_2023-08-22_16-12-33.png

Snipaste_2023-08-22_16-13-12.png

然后memos设置->偏好设置中 填入自己的UserID,设置->系统中填入申请机器人API。

Snipaste_2023-08-22_16-20-39.png

Snipaste_2023-08-22_16-21-44.png

然后和机器人发送任意消息都可以同步到自己的memos上。

安卓手机端的使用

IOS手机端Github项目地址:https://github.com/mudkipme/MoeMemos

安卓手机端Github项目地址:https://github.com/mudkipme/MoeMemos

可以使用open API或者域名账号密码的方式登入。目前手机端还有一些功能还希望完善,如通知功能等。

Snipaste_2023-08-22_15-47-18.png

浏览器插件

chrom插件地址:https://chrome.google.com/webstore/detail/memos-bber/cbhjebjfccgchgbmfbobjmebjjckgofe/

安装后,连接自己的open API就可以实时发送memos消息了

Snipaste_2023-08-22_15-42-30.png

Snipaste_2023-08-22_15-42-45.png

微信小程序

微信小程序Github地址:https://kgithub.com/Rabithua/memos_wmp

因为微信小程序需要备案,感兴趣可以备案后fork作者的项目上线自己的小程序。

OSS存储配置

这里我是以七牛云为例,七牛云注册后创建对象存储。我是海外服务器所以只能创建新加坡的。

Snipaste_2023-08-22_19-56-46.png 点击概览,查看S3域名

Snipaste_2023-08-22_19-59-26.png

Snipaste_2023-08-22_20-00-09.png

https://developer.qiniu.com/kodo/4088/s3-access-domainname 这里查看自己存储区域ID

Snipaste_2023-08-22_20-01-59.png

七牛云个人中心中密钥管理,复制保存自己的AccessKey和ScretKey

Snipaste_2023-08-22_20-08-02.png

Snipaste_2023-08-22_20-07-41.png

保存好信息后,在memos中设置->存储设置中填写S3存储信息,创建好后选择刚刚创建的存储就好了

注意:S3端点域名记前记得加https:// 如果绑定了自己域名,在URL前缀处填上https://自己绑定的域名

Snipaste_2023-08-22_20-54-56.png

Snipaste_2023-08-22_20-18-49.png

进阶玩法

配合MouseInc鼠标手势软件打造自己的快捷粘贴板。

比如我现在使用的功能,在windows系统中按住Ctrl再快速按两次C会弹出快捷操作菜单,可以发送复制内容到memos上。

编写MouseInc快捷菜单 添加三个快捷菜单,代表三种显示模式 Snipaste_2023-08-24_16-59-49.png

编写菜单执行动作命令 Snipaste_2023-08-24_17-02-21.png

以“发送仅自己“为例,代码如下,如果不想弹黑框如上截图在下面添加一个"hide”命令。

#更据自己脚本放的路径修改
python C:\Users\xxx\Desktop\curlPython\messagesent.py PUBLIC

快捷菜单执行作命令是调用python执行messagesent.py脚本(后面贴了该脚本代码可参考),脚本有一个输入参数,参数PUBLIC,就是发布memos显示选项,也就是visibility的键值。

如果是仅自己可见就是PRIVATE,注册用户可见就是PROTECTED,另外两个快捷菜单命令其他都相同,只是这里执行脚本的参数不同。

选择发送内容,按住Ctrl再快速按两次C弹出快捷操作菜单如下: {BD1A4867-51B7-4812-8DFC-662EB69DC316}.png.jpg 点击发送仅自己选项,biu~~~ ,发送到自己的memos上了,可选择不同显示方式。

Snipaste_2023-08-24_17-26-40.png

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是一款优秀的开源自托管知识库,它为你提供了轻松管理和分享知识的新途径。同时也可以用来打通跨平台的消息数据的同步。目前项目非常活跃有很多开发者参与进来,期待将来会有越来越多的功能实现。

文章作者: FLY.HE
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 FLY.HE的博客
docker 建站 docker
喜欢就支持一下吧
打赏
微信 微信