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

在独立博客中,我们常常希望有一个类似“微博/朋友圈”的角落,用来记录一些随想、短动态或生活碎片,而不需要像写正式文章那样绞尽脑汁去构思标题和排版。
如果你正在使用以轻量美观、支持丰富配置著称的 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
- 登录 Cloudflare Dashboard,进入 Zero Trust 面板。
- 导航至 Networks -> Tunnels,点击 Create a tunnel。
- 给隧道起个名字(例如
memos-tunnel),保存后选择你的操作系统或 Docker 部署方式获取运行命令。
2. 配置 Public Hostname(公网域名)
在 Tunnel 创建完成后,为其绑定一个专属的子域名:
- Subdomain & Domain: 填入你想要的域名,例如
memos.example.com。 - Service:
- Type:
HTTP - URL:
localhost:5230(如果cloudflared与 memos 容器在同一台机器上)或容器名memos:5230(如果在同一个 Docker 网络下)。
- Type:
保存后,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 等平台自动部署):
- 实时同步:你在 Memos 后台(或手机客户端)发布的任何碎碎念、动态,都会实时同步展现到 Astro 博客的动态页中。
- 特性支持:主题会自动处理 Memos 中的图片附件展示、置顶同步,甚至能将位置信息(
location)完美映射并显示在动态发布时间旁。 - 小组件联动:博客侧边栏的「最新动态」等小组件也会无缝从该 Memos 接口获取最新内容,保持全站数据流的一致性。
通过这种方式,既省去了复杂的服务器运维与证书申请,又拥有了一个极其现代、方便管理的动态发布后台,可以说是独立开发者和博主们的理想搭配!
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
早安喵栈





