让自建 memos 服务完美融合在 Astro 博客里面

 让自建 memos 服务完美融合在 Astro 博客里面
✨AI 摘要:
🤖 正在生成摘要...

在独立博客中,我们常常希望有一个类似“微博/朋友圈”的角落,用来记录一些随想、短动态或生活碎片,而不需要像写正式文章那样绞尽脑汁去构思标题和排版。

如果你正在使用以轻量美观、支持丰富配置著称的 Astro 博客主题(如 Firefly),同时又部署了轻量级开源笔记/动态服务 Memos,那么将两者结合可以说是绝配——通过将 Memos 作为动态的数据源,你既能享受 Memos 专属后台带来的便捷发布体验(甚至可以用手机随时随地发动态),又能完美保留博客主题的高颜值与极简风格。

本文将带你从零开始,在服务器上使用 Docker 自建 Memos 服务,并通过 Cloudflare Tunnel 实现安全的公网访问,最终将其无缝整合到 Astro 博客的动态页面中。

使用 Docker 自建 Memos 服务#

Memos 是一个极佳的开源、自托管知识库与轻量动态记录工具。我们可以通过 Docker 快速将它部署到 VPS 上。

1. 编写 Docker Compose 配置文件#

在服务器的某个目录下(例如 /opt/memos),创建一个 docker-compose.yml 文件:

services:
memos:
image: neosmemo/memos:latest
container_name: memos
restart: unless-stopped
ports:
- "5230:5230"
volumes:
- ./data:/var/opt/memos
environment:
- MEMOS_INSTANCE_URL=https://memos.example.com # 替换为你实际绑定的域名

💡 注意事项(关于版本与环境变量): 从 Memos 0.30.0 版本开始引入了较为严格的公开与私有模式破坏性变更。如果你的 Memos 版本号 ≥ 0.30.0,请务必在环境变量中配置 MEMOS_INSTANCE_URL,并且该地址需要与你后续在博客里配置的 apiUrl严格保持一致,否则前端跨域或 API 请求可能会遇到阻碍。

2. 启动容器#

在 docker-compose.yml 所在目录下执行:

docker compose up -d

使用 Cloudflare Tunnel 配置内网穿透与 HTTPS#

为了让博客能够安全地通过 HTTPS 访问 Memos 的 API(且无需繁琐配置 Nginx 和 SSL 证书),我们可以使用 Cloudflare Tunnels (cloudflared) 将本地的 5230 端口安全映射到公网域名。

1. 在 Cloudflare Zero Trust 中创建 Tunnel#

  1. 登录 Cloudflare Dashboard,进入 Zero Trust 面板。
  2. 导航至 Networks -> Tunnels,点击 Create a tunnel。
  3. 给隧道起个名字(例如 memos-tunnel),保存后选择你的操作系统或 Docker 部署方式获取运行命令。

2. 配置 Public Hostname(公网域名)#

在 Tunnel 创建完成后,为其绑定一个专属的子域名:

  • Subdomain & Domain: 填入你想要的域名,例如 memos.example.com。
  • Service:
    • Type: HTTP
    • URL: localhost:5230(如果 cloudflared 与 memos 容器在同一台机器上)或容器名 memos:5230(如果在同一个 Docker 网络下)。

保存后,Cloudflare 会自动为你处理 DNS 解析和免费的 SSL/TLS 证书。此时直接访问 [https://memos.example.com](https://memos.example.com) 即可打开 Memos 初始化页面,完成管理员账号注册。

在 Astro 博客(Firefly 主题为例)中接入 Memos 数据源#

当 Memos 搭建完毕并通过 Tunnel 成功上线后,我们就可以让 Astro 博客直接读取 Memos 的内容,并在前端动态页面中实时展示。

1. 开启动态页总开关#

首先,在站点配置文件(如 src/config/siteConfig.ts)中,确保开启了动态页面模块:

export const siteConfig = {
// ... 其他配置
pages: {
dynamic: true, // 开启动态页
},
};

2. 修改动态配置文件启用 Memos#

打开动态专属的配置文件 src/config/dynamicConfig.ts,将 memos 的 enable 改为 true,并正确填写你的 Memos 实例地址以及用户标识 (parent):

export const dynamicConfig = {
title: "",
description: "",
profileUrl: "/about/",
showComment: true,
itemsPerPage: 20,
apiUrl: "/api/dynamic.json", // 当 memos.enable 为 true 时此项会被忽略
memos: {
enable: true, // 启用 Memos 数据源
apiUrl: "https://memos.example.com", // 你的 Memos 实例地址(需与 Docker 环境变量及 Tunnel 域名一致)
parent: "users/your-username", // 你的 Memos 用户标识(可在 Memos 后台或 API 路径中确认)
},
};

配置项说明:#

  • enable: 设置为 true 后,博客客户端将绕过本地静态 JSON,直接从配置的 Memos API 实时拉取数据。
  • apiUrl: 你的 Memos 站点根地址。
  • parent: 目标用户的 Resource Name 格式(例如 users/xiaye 或你的实际用户名)。

效果与特性#

完成上述配置并部署上线后(如果你习惯直接通过 GitHub 在线修改代码同步更新,也可以直接在 GitHub 仓库中调整对应配置文件触发 Vercel 等平台自动部署):

  1. 实时同步:你在 Memos 后台(或手机客户端)发布的任何碎碎念、动态,都会实时同步展现到 Astro 博客的动态页中。
  2. 特性支持:主题会自动处理 Memos 中的图片附件展示、置顶同步,甚至能将位置信息(location)完美映射并显示在动态发布时间旁。
  3. 小组件联动:博客侧边栏的「最新动态」等小组件也会无缝从该 Memos 接口获取最新内容,保持全站数据流的一致性。

通过这种方式,既省去了复杂的服务器运维与证书申请,又拥有了一个极其现代、方便管理的动态发布后台,可以说是独立开发者和博主们的理想搭配!

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
让自建 memos 服务完美融合在 Astro 博客里面
https://929255.xyz/posts/memos-as-dynamic/
作者
ZaoCat
发布于
2026-10-18
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
ZaoCat
A digital momad
最新动态
站点统计
文章
12
分类
2
标签
25
总字数
13,129
运行时长
0 天
最后活动
0 天前