《【华为云 ECS 实战】2核2G部署 Memos,搭建属于自己的私人笔记与记忆时间轴》
【华为云 ECS 实战】2核2G部署 Memos,搭建属于自己的私人笔记与记忆时间轴
一、前言
日常使用电脑和手机时,我们经常会产生各种零散的信息:突然想到的灵感、需要保存的命令、临时记录的任务,以及一些值得以后回顾的生活片段。
这些内容通常分散在微信收藏、手机备忘录、聊天记录和不同的笔记软件中。时间一长,想找回某条记录反而变得困难。
如果已经拥有一台云服务器,能不能搭建一个由自己管理的轻量笔记系统?
这次我们选择开源项目 Memos,利用华为云弹性云服务器 ECS 和 Docker Compose,搭建一个支持 Markdown、标签分类和时间轴浏览的个人笔记平台。
整个方案以轻量、数据可控、容易备份为目标,适合个人学习、自托管应用实践和小规模使用。
二、Memos 是什么?
Memos 是一款开源、自托管的笔记应用,强调快速记录与自主掌控数据。
和传统的复杂知识库不同,Memos 更接近于个人微博或时间轴:打开页面,输入内容,保存即可。
它主要具有以下特点:
-
快速记录: 无需创建复杂的文件夹和页面,可以直接发布一条笔记。
-
Markdown 支持: 可以记录文字、代码片段和结构化内容。
-
时间轴浏览: 按时间回顾过去的想法和记录。
-
标签管理: 通过标签整理不同主题。
-
自主存储: 数据保存在自己的服务器中。
-
轻量部署: 支持 Docker 和 SQLite,无需为个人使用场景单独部署数据库服务器。
Memos 还提供 API 等扩展能力,后续可以进一步探索自动记录、外部应用集成等用途。
三、部署环境与方案
本教程以一台华为云 ECS 为例,参考环境如下:
| 项目 | 配置 |
|---|---|
| 云服务平台 | 华为云 ECS |
| CPU | 2 核 |
| 内存 | 2 GB |
| 操作系统 | Ubuntu / Debian 等 Linux 发行版 |
| 容器环境 | Docker + Docker Compose |
| 应用 | Memos |
| 数据库 | SQLite |
| 应用端口 | 5230 |
以上为部署示例配置,不代表实际性能测试结果。服务器如果已运行多个容器,应先检查剩余内存和磁盘空间。
本次采用以下结构:
个人电脑浏览器
|
| SSH 加密隧道
|
华为云 ECS
|
| 127.0.0.1:5230
|
Docker 容器:Memos
|
| 持久化挂载
|
本地数据目录
|
+-- SQLite 数据库
+-- 图片与附件
这样既能保留数据持久化,也不需要将 Memos 的应用端口直接开放到公网。
需要特别说明:中国大陆节点提供互联网信息服务涉及 ICP 备案要求,包括通过 IP 地址对外提供网站服务的情况。本教程仅演示私人远程管理方式,不将 SSH 隧道视为公开网站的备案替代方案。
四、检查服务器环境
首先,通过 SSH 登录华为云 ECS。
检查 Docker 是否安装:
docker --version
检查 Docker Compose:
docker compose version
如果两个命令均正常显示版本号,说明容器环境已经具备。
继续查看服务器剩余资源:
free -h
df -h
检查 5230 端口是否已被使用:
ss -lntp | grep ':5230'
如果有输出,需要确认现有服务的用途,避免直接覆盖或占用其他应用的端口。
对于已经运行其他业务的服务器,建议先检查容器列表:
docker ps -a
确认不存在需要保留的同名 Memos 容器后,再继续部署。
五、创建 Memos 工作目录
为了便于后续备份、升级和迁移,我们将应用集中保存在独立目录中。
执行:
mkdir -p ~/apps/memos/data
cd ~/apps/memos
目录结构如下:
~/apps/memos/
├── compose.yaml
└── data/
其中:
-
compose.yaml用于定义容器部署配置。 -
data/用于保存数据库及本地附件等持久化数据。
这样即使容器被删除,只要保留数据目录和部署配置,就可以在兼容版本下重新部署或恢复。
六、编写 Docker Compose 配置
在工作目录创建配置文件:
nano compose.yaml
写入以下内容:
services:
memos:
image: neosmemo/memos:stable
container_name: memos
restart: unless-stopped
ports:
- "127.0.0.1:5230:5230"
environment:
MEMOS_PORT: "5230"
MEMOS_DRIVER: sqlite
volumes:
- ./data:/var/opt/memos
这里有几个关键配置值得解释。
1. 镜像版本
neosmemo/memos:stable 使用官方稳定版镜像标签。
需要注意,stable 并非固定版本。未来执行镜像更新时,可能会下载新版本。因此正式长期运行后,可以根据经过验证的版本固定具体镜像标签。
2. 自动重启
restart: unless-stopped 表示在容器异常退出或服务器重启后,Docker 通常会尝试重新启动该容器,除非容器被明确停止。
3. 仅绑定本机回环地址
ports:
- "127.0.0.1:5230:5230"
这是本教程的重要安全配置。
Memos 的端口只绑定在 ECS 的本地回环地址上,不通过 Docker 端口映射直接暴露到服务器公网接口。
4. 数据持久化
volumes:
- ./data:/var/opt/memos
Memos 的数据库和相关本地文件将保存到宿主机的 data 目录。
容器更新时无需重新创建笔记数据。
七、启动 Memos
保存配置后,在工作目录执行:
docker compose up -d
Docker 会根据配置拉取镜像并创建容器。
拉取时间取决于服务器网络环境和镜像仓库的连通情况。
查看运行状态:
docker compose ps
正常情况下,应该能看到 Memos 容器处于运行状态。
查看启动日志:
docker compose logs --tail=100 memos
如果没有明显错误,可以继续测试服务。
在 ECS 上执行:
curl -I http://127.0.0.1:5230
如果返回 HTTP 响应,说明本机已经能够连接 Memos 服务。具体状态码可能随应用版本和请求路径变化。
还可以通过以下命令观察资源使用:
docker stats memos --no-stream
它会显示容器的 CPU、内存、网络等指标。
这里应以实际输出为准,不建议仅根据其他环境的测试结果判断 2GB 内存是否足够。
八、通过 SSH 隧道访问 Memos
由于我们没有将 5230 端口直接开放到公网,因此不能直接使用 ECS 公网 IP 加端口访问。
这时可以使用 SSH 本地端口转发。
在自己的电脑终端中执行:
ssh -N -L 5230:127.0.0.1:5230 用户名@ECS公网IP
将命令中的用户名和公网 IP 替换为实际信息。如果 SSH 使用了自定义端口或密钥文件,还需要添加相应参数。
建立隧道后,在电脑浏览器打开:
http://127.0.0.1:5230
浏览器访问的是本地端口,连接通过 SSH 加密通道转发到云服务器上的 Memos。
需要保持 SSH 连接运行,浏览器才能继续通过隧道访问服务。
这种方式比较适合个人维护和学习环境。
如果后续计划向其他用户提供网站访问,则应另行设计 HTTPS、身份认证、备案及公网访问方案。
九、首次初始化与隐私设置
首次打开 Memos 后,按照页面提示创建管理员账号。
管理员账号拥有实例管理权限,应设置强密码,并避免在截图或文章中暴露账号凭据。
完成初始化后,建议优先检查以下设置:
1. 检查实例访问策略
在管理设置中确认访问模式符合预期。个人笔记系统建议使用私有访问策略。
2. 关闭不必要的用户注册
如果只计划个人使用,没有必要长期开放其他用户注册入口。
3. 检查笔记公开权限
笔记内容可能包含个人记录、命令、工作信息等,不应默认允许匿名访问。
4. 谨慎管理 API Token
如果未来使用 API 接入自动化程序,应该为不同应用分别管理凭据,并设置合理的有效期。
完成这些配置后,就可以尝试创建第一条笔记。
例如:
# 华为云 ECS 学习记录
今天部署了 Memos。
#Linux #Docker #云服务器
常用检查命令:
docker ps
docker stats
df -h
通过这种方式,可以逐步把零散的技术记录整理为可搜索、可回顾的个人时间轴。
十、备份数据,避免笔记丢失
自托管的优势是数据掌握在自己手里,但这也意味着必须自行承担备份责任。
不能因为容器能够正常运行,就认为数据永远安全。
对于 SQLite 数据库,简单可靠的备份方式之一是短暂停止应用,再备份数据目录。
首先进入工作目录:
cd ~/apps/memos
mkdir -p backups
停止容器:
docker compose stop memos
创建备份文件:
tar -czf \
"backups/memos-$(date +%F-%H%M).tar.gz" \
compose.yaml data
完成后恢复容器:
docker compose start memos
如果备份命令报错,也应及时检查原因并手动恢复服务,避免容器一直处于停止状态。
查看备份文件:
ls -lh backups/
这个备份包含 Compose 配置和持久化数据目录。
建议定期将备份复制到其他设备或独立存储位置。只在同一台 ECS 上保存备份,仍然无法抵御服务器磁盘故障或实例误删除。
还应定期进行恢复演练,确认备份文件确实可用。
十一、更新与日常维护
Memos 发布新版本后,可以通过 Docker Compose 更新应用。
更新前,建议先阅读版本变更说明,特别是数据库迁移和不兼容升级要求。
完成可靠备份后执行:
cd ~/apps/memos
docker compose pull memos
docker compose up -d
查看升级后的状态:
docker compose ps
docker compose logs --tail=100 memos
需要注意:镜像更新并不等于数据库可以任意降级。如果新版已经修改数据库结构,直接切换旧版镜像不一定能够恢复正常。
因此,涉及版本回退时,应同时考虑恢复升级前的数据库和对应部署配置。
日常维护可以使用:
| 命令 | 用途 |
|---|---|
docker compose ps |
查看服务状态 |
docker compose logs -f memos |
实时查看日志 |
docker compose restart memos |
重启服务 |
docker stats memos --no-stream |
查看资源使用 |
df -h |
检查磁盘空间 |
十二、常见问题排查
1. 容器启动失败
首先检查日志:
docker compose logs --tail=200 memos
重点关注端口冲突、数据目录权限、镜像架构以及数据库初始化错误。
2. SSH 隧道建立后无法访问
可以依次确认:
-
Memos 容器是否处于运行状态。
-
ECS 本机是否能访问
127.0.0.1:5230。 -
SSH 隧道是否保持连接。
-
本地电脑的 5230 端口是否已经被其他程序占用。
如果本地端口被占用,可以改用 15230:
ssh -N -L 15230:127.0.0.1:5230 用户名@ECS公网IP
此时浏览器访问:
http://127.0.0.1:15230
3. 重建容器后笔记消失
优先检查 Compose 配置中的数据挂载目录是否发生变化。
尤其要确认当前工作目录正确,避免在其他目录中创建了新的空数据卷。
4. 服务器内存不足
运行:
free -h
docker stats --no-stream
如果 ECS 上已经运行多个服务,应结合整体资源使用情况分析,不能直接认定问题一定由 Memos 引起。
5. 公网 IP 无法直接访问 5230
本教程默认只绑定 127.0.0.1,因此公网无法直接访问 5230 是预期行为,不需要为此把安全组开放到所有来源。
如果未来确实需要公开部署,应按照实际网络架构、相关备案要求和安全策略重新配置。
十三、总结
通过这次部署,我们利用华为云 ECS、Docker Compose 和 Memos,构建了一套轻量的私人笔记系统。
这个方案的核心价值,并不只是把一个 Web 应用运行起来,而是学习了几个值得长期使用的自托管实践:
-
使用 Docker Compose 管理服务配置。
-
使用持久化目录保护应用数据。
-
通过 SSH 隧道访问不公开暴露的个人服务。
-
对 SQLite 数据库与附件进行备份。
-
在升级前评估数据兼容性与恢复方案。
对于个人开发者而言,一台 2核2G 的云服务器不一定要运行复杂的大型平台。合理利用资源、选择适合的小型开源项目,同样可以构建有实际价值的工具。
后续还可以探索 Memos 的 API、自动化记录和其他知识管理工具之间的集成,让个人记录从简单的笔记逐步发展为可持续积累的信息系统。
技术实践的最终目标,不是部署更多容器,而是让这些工具真正帮助我们管理自己的信息与数据。
参考资料:
-
Memos 官方部署文档
-
Memos 官方安全配置及备份恢复文档
-
华为云 ECS 安全组配置文档
-
华为云 ICP 备案相关说明
- 点赞
- 收藏
- 关注作者
评论(0)