今天,继续来分享一款优秀的开源应用 memos

一、概述

memos 是一个以隐私为先、可自托管的知识库,适用于个人笔记、团队维基和知识管理。它使用 Go 和 React 构建,提供闪电般的性能,同时不牺牲功能或可用性。

  • 支持自托管,永久免费,MIT 许可证
  • 极简设计并支持深色模式,移动设备响应式布局
  • 支持 REST + gRPC API
  • 支持 Docker 安装,支持 SQLite、MySQL 和 PostgreSQL
  • 支持 Markdown 及文本存储 —— 随时随地携带你的数据

给自己的云服务器又增加了一点负担:https://memos.hollowman.cn

memos.webp

二、docker 搭建

1. 创建 docker-compose.yml文件

services:
  memos:
    image: neosmemo/memos:stable 
    container_name: memos  
    restart: unless-stopped 
    ports:
      - "5230:5230"  # 端口映射(主机:容器)
    volumes:
      - ./memos:/var/opt/memos  # 挂载数据卷(主机:容器)

配置说明:

镜像选择: image: neosmemo/memos:stable

容器名称: container_name: memos

重启策略: restart: unless-stopped

端口映射:

    ports:
      - "5230:5230"  # 端口映射(主机:容器)

前面为主机端口,可自定义,访问时使用:http://localhost:5230

数据挂载: - ./memos:/var/opt/memos # 挂载数据卷(主机:容器)

  • ./memos 为主机目录,这里使用了相对路径,表示的是 docker-compose.yml 所在目录下的 memos 文件夹
  • /var/opt/memos 为容器内的目录

2. 运行容器

在 docker-compose.yml 所在目录,运行命令:

sudo docker compose up -d

3. 访问 memos 系统

在浏览器中输入 http://localhost:5230 即可创建用户及管理知识系统

三、API 访问

作为个人私有的知识库,memos 可堪大任。可有时候,我们希望共享知识库,而又缺少忠实的用户,只能寄希望于知识库之外的大众了,memos 懂,因此也提供了 API 访问的接口。

参考文档掌握Memos API:从接口解析到实战调用指南

1. 本文章用到的 API 接口

接口功能方法路径
查询第1页的备忘录列表,默认每页10条GET/api/v1/memos
查询第1页的备忘录列表,指定每页条数GET/api/v1/memos?page_size=n
查询第n页备忘列表,指定每页条数GET/api/v1/memos?page_size=n&page_token=XXX
查询某个creator(如users/1)对应用户名GET/api/v1/{creator}
查询某个笔记的评论GETapi/v1/memos.name/comments
评论某个笔记POSTapi/v1/memos.name/comments
Memos API 使用 Bearer Token 认证机制,所有需要认证的接口必须在请求头中包含 Authorization: Bearer <token>
page_size 变量名也可以使用 pageSize 替代;同理 page_token 也可以使用 pageToken 替代
注意:发布备忘录时,可以选择私有、工作区和公开,如果保存为公开,则查询时可以不需要认证(此时,即使是随便输入 token 也不会报错)

3.通过 tocken 访问 memos(在 AI 肩膀上看得全)

这是代码演示页面:readmemos demo,主要功能有:

  • 默认会获取 guest 用户的 token 进行操作
  • 分页显示(可选择每页数量)
  • markdown 渲染
  • 显示笔记用户及笔记权限(显示私有笔记需要正确的 token)
  • 简单的笔记添加(可选择公开或私有,默认公开)
  • 评论显示(正确的 token 可访问该用户的所有评论以及其他用户的公开评论)
  • 评论回复(强制公开评论)

fetchmemos.webp

代码太长,不贴出来了,可以在演示页面,直接按 F12 或者查看源代码来获取源代码。其中用到的传递 guest token 的 gettoken.php 文件代码为:

<?php
header('Content-Type: application/json');

$token = '输入默认用户的token'; 

// 如果你没有 token,可以返回错误
if (!$token) {
    echo json_encode(['error' => '未找到访问令牌']);
    exit;
}

// 成功返回 token
echo json_encode(['token' => $token]);
?>

目前发现的似乎是有点逻辑方面的问题,不知道 memos 后期会不会修正:

公开笔记,可以在不登陆的情况下访问;但公开评论,却只有登陆用户(可以是其他用户)才能访问。
也就是说,输入错误的token能查询出公开笔记,但公开评论却无法查看;而输入了正确的token,则在查询出公开笔记的基础上,还可以查看其他成员的公开评论。

diffmemos.webp