Memos:一条 Docker 命令,构建你的私有知识库

41 阅读5分钟

Memos:一条 Docker 命令,构建你的私有知识库

你的笔记数据,真的属于你吗?

当你在某云笔记上写下第三千条日记,当你把项目文档托付给某企业服务平台,你有没有想过——这些数据真正的所有权在谁手里?

Memos 是一个开源的自托管笔记服务,GitHub 上已经获得 46,000+ star,Docker 镜像下载量超过 710 万次。这不是又一个"我也能做笔记"的轮子,而是从架构层面重新定义了笔记服务应该有的样子。

项目地址

在线演示


Memos 技术细节

技术架构:Go + React 的高性能组合

后端:Go 语言的性能优势

Memos 使用 Go 和 React 构建,提供闪电般的性能。Go 语言在后端的选择并非偶然:

  • 内存占用:Docker 镜像小于 40MB,内存使用约 30MB
  • 并发处理:Go 的 goroutine 机制让服务器可以轻松处理数千个并发请求
  • 编译部署:单一二进制文件,无需运行时环境

Go 的 net/http 标准库提供了高效的 HTTP 服务能力,配合 gRPC 支持,Memos 可以同时服务 Web 界面和 API 调用。相比 Node.js 或 Python 框架,Go 编译后的二进制文件启动时间在毫秒级,内存占用仅为它们的 1/5 到 1/10。

前端:React 的组件化设计

React 前端采用函数式组件和 Hooks,配合 Markdown 编辑器实现流畅的写作体验。代码层面,React 的虚拟 DOM diff 算法确保了只有实际变化的部分才会重新渲染:

const MemoEditor = () => {
  const [content, setContent] = useState('');
  
  const handleSave = async () => {
    await fetch('/api/v1/memos', {
      method: 'POST',
      body: JSON.stringify({ content })
    });
  };

  return (
    <div>
      <textarea 
        value={content}
        onChange={(e) => setContent(e.target.value)}
      />
      <button onClick={handleSave}>Save</button>
    </div>
  );
};

数据存储:灵活的数据库支持

Memos 支持三种数据库后端:

  • SQLite: 默认选项,单文件数据库,适合个人使用
  • MySQL: 适合团队协作,数据量大于 10GB
  • PostgreSQL: 企业级特性,支持全文搜索和 JSON 查询

SQLite 的优势在于零配置。当你运行 docker run 命令时,Memos 会自动在挂载的目录创建 memos_prod.db 文件,所有数据包括用户、笔记、附件元信息都存储在这个文件里。迁移时只需复制这个文件,无需导入导出。


安装与使用

五分钟部署指南

Docker 部署(推荐)

docker run -d \
  --name memos \
  -p 5230:5230 \
  -v ~/.memos/:/var/opt/memos \
  neosmemo/memos:stable

这条命令做了三件事:

  1. 拉取 neosmemo/memos:stable 镜像
  2. 映射 5230 端口到主机
  3. 挂载本地目录 ~/.memos/ 用于数据持久化

运行后,打开浏览器访问 http://localhost:5230,首次访问会引导创建管理员账号。整个过程不超过一分钟。

基础文本笔记

在右侧输入框输入:

# 我的第一条 Memo
今天成功部署了 Memos,这是一个轻量级的自托管笔记服务。

## 为什么选择 Memos?
- 完全开源
- 数据自己掌控
- 部署只需一条命令

#新手入门 #部署成功
  • 即时保存,无需等待
  • Markdown 实时渲染
  • 标签自动识别(以 # 开头)


Markdown 格式支持

创建一条包含多种格式的笔记:

支持:

  • 代码高亮(支持 100+ 语言)
  • 任务列表可交互打勾
  • 表格自动格式化
  • 链接自动识别

标签与过滤

创建多条带标签的笔记 笔记 1:

今天学习了 Go 语言的并发模型,goroutine 真的很强大。

#编程 #golang #学习笔记

笔记 2:

周末计划:
- 阅读《设计模式》第 5 章
- 健身房
- 整理书房

#个人 #周末计划

笔记 3:

周末计划:
- 阅读《设计模式》第 5 章
- 健身房
- 整理书房

#个人 #周末计划

  1. 点击左侧标签云中的 #编程
  2. 只显示包含该标签的笔记
  3. 点击多个标签测试组合过滤
  4. 使用搜索框搜索"项目"

项目支持:

  • 标签自动聚合
  • 点击标签即时过滤
  • 搜索功能支持全文检索

Memo支持的功能还有很多,包括但不限于:

  1. 基础笔记创建和快捷键
  2. Markdown 全功能支持
  3. 标签、过滤、快捷方式
  4. 可见性控制、公开笔记、附件
  5. 数据掌控:导出、备份、迁移
  6. API 集成:命令行创建笔记,展示自动化能力
  7. 高级功能:搜索语法、Daily Review、移动端

Docker Compose(生产环境)

生产环境推荐使用 Docker Compose,配合 MySQL:

version: '3'
services:
  memos:
    image: neosmemo/memos:stable
    container_name: memos
    ports:
      - "5230:5230"
    environment:
      MEMOS_DRIVER: mysql
      MEMOS_DSN: "root:password@tcp(mysql:3306)/memos"
    volumes:
      - ./data:/var/opt/memos
    depends_on:
      - mysql

  mysql:
    image: mysql:8
    container_name: memos-mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: memos
    volumes:
      - ./mysql:/var/lib/mysql

执行 docker-compose up -d 即可启动。MySQL 会自动创建数据库,Memos 启动时执行 schema 迁移。


结语

Memos 的优势在于:

  • 部署简单:一条命令即可运行,无需配置 Node.js 环境
  • 性能领先:Go 后端的内存占用仅为 Node.js 方案的 20%
  • 社区活跃:更新频率高,问题响应快

Memos 团队正在开发的功能包括:

  1. 端到端加密
  2. 协作编辑(实时多人协作)
  3. 插件系统(用户可自定义扩展)
  4. 桌面端应用(Electron 封装)

项目在第一年达到 1000 stars,第二年增长到 20,000。这种增长速度表明开源社区对自托管笔记服务的需求正在快速增长。当越来越多的人意识到数据主权的重要性,Memos 这样的项目会成为主流选择。

相关链接:

💬 你用过哪款 AI 编程工具?欢迎评论区分享你的体验! ⭐ 觉得有用?点个「在看」让更多开发者看到这篇对比!