English | 中文
在fly.io上运行自托管的 memos,并附有 litestream自动备份数据库到你个人的 S3 / Backblaze B2。
🙏 感谢 memos 和 linkding-on-fly,本项目受其启发!
-
如果您想在 Fly.io 上部署 Memos,但不需要 Litestream 来自动备份数据库到你的 S3/B2,请跳过本文档接下来的部分,并直接阅读 README_no_litestream_zh-CN。
-
如果你想要在本地搭建(包含 Litestream 功能),而不在 fly.io 上搭建,可参考 hu3rror/memos-litestream。
-
hu3rror/memos-on-fly-build 已被弃用,新的项目镜像维护更新将被转移到 hu3rror/memos-litestream,如果你以前使用过这个镜像,你可以简单地在你的 fly.toml 中的 build image 部分中删除旧的镜像,并改为新的镜像,像这样:
[build] - image = "hu3rror/memos-fly:latest" + image = "ghcr.io/hu3rror/memos-litestream:stable"
-
Memos 在更新到 v0.22.0 版本后,Telegram Bot 将不再内置在 Memos 中,而转为外置启动的 telegram-integration ,如果你需要该功能,可尝试将镜像标签更改为
ghcr.io/hu3rror/memos-litestream:stable-memogram
,像这样:[build] - image = "ghcr.io/hu3rror/memos-litestream:stable" + image = "ghcr.io/hu3rror/memos-litestream:stable-memogram"
并在 fly.io 中添加新的环境变量
BOT_TOKEN
到 flyctl secrets 中,并重新部署flyctl secrets set BOT_TOKEN="your_bot_token"
⚠️ stable-memogram
标签版本的支持仍处于测试阶段,使用前务必备份您的数据库。
- fly.io 帐户
- Backblaze帐户或其他 S3 服务帐户
- 按照 fly.io 官方安装教程安装 fly 的命令行界面
flyctl
。 - 按照 fly.io 官方登录教程 登录 flyctl。
flyctl auth login
- [可选] 如果要构建自己的Docker镜像,请从hu3rror/memos-litestream 克隆存储库,找到最新的 release 的 commit,按你所需自行构建
注意
⚠️ : 不要 设置 Postgres,不要 立即部署!
flyctl launch
该命令将创建一个 fly.toml
文件。
您可以参考本存储库中的 fly_example.toml 并根据注释内容的提示进行修改。
[build]
image = "ghcr.io/hu3rror/memos-litestream:stable"
[env]
LITESTREAM_REPLICA_BUCKET = "your_bucket_name" # 更改为您的 litestream bucket 名称
LITESTREAM_REPLICA_ENDPOINT = "your_endpoint" # 更改为您的 litestream ENDPOINT 网址
LITESTREAM_REPLICA_PATH = "memos_prod.db" # 如果不了解请保持默认值
ℹ️ 如果您想使用其他存储提供程序,请检查 litestream 的 "Replica Guides" 部分并根据需要调整配置。
- 登录 B2 并创建一个bucket。
- 将
LITESTREAM_REPLICA_ENDPOINT
和LITESTREAM_REPLICA_BUCKET
的值设置到您的[env]
部分。 - 为此 bucket 创建访问密钥。将密钥添加到fly的密钥存储中。
flyctl secrets set LITESTREAM_ACCESS_KEY_ID="your_key_id" LITESTREAM_SECRET_ACCESS_KEY="your_application_key"
-
创建持久卷。fly.io 的免费套餐包含
3GB
存储空间,而memos
若采用纯文本+外挂图床的方式,则所需要的存储空间非常少,大多数情况下1GB
的卷已经足够了。您也可以在稍后更改卷的大小。如何更改可以在下面的_"scale persistent volume"_部分找到。flyctl volumes create memos_data --region your_region --size size_in_GB
例子:
flyctl volumes create memos_data --region hkg --size 1
-
在
fly.toml
添加mounts
部分,将持久卷附加到容器。[[mounts]] source = "memos_data" destination = "/var/opt/memos"
[http_service]
internal_port = 5230 # change to 5230
flyctl deploy
如果一切正常,您现在可以通过运行 flyctl open
来访问 memos。您应该会看到它的登录页面。
🎊 尽情使用 memos 吧!
如果最新的 docker 镜像已经发布到 Docker Hub,您可以通过在项目文件夹中运行flyctl deploy
来轻松升级memos。
如果您希望,您可以参考 fly.io 自定义域名。
- 您应该能够登录到您的 memos 实例。
- 在您的B2存储桶浏览一下,应该可以看到一个数据库的初始副本。
- 您的用户数据应该在 VM 重新启动后仍然存在。
Litestream 通过将其 WAL(Write-ahead logging) 持久化到B2上的备份来实现数据持久化。如果您想验证备份是否正常工作,可以手动模拟故障并恢复。
- 在 fly.io 的控制台中,使用 "Stop" 按钮停止您的应用程序。
- 更改您的
memos
数据库中的某些数据。 - 使用 "Start" 按钮重新启动应用程序。
- 检查您的更改是否仍然存在。如果是,则意味着已经成功数据持久化。
如果您想测试持久卷的扩展,请按照以下步骤操作:
-
使用
flyctl volumes resize
命令来增加持久卷的大小。 -
使用 SSH 连接到您的 fly.io VM,然后运行以下命令来扩展文件系统。
cd memos-on-fly fly ssh console sudo resize2fs /dev/vda1
注意:
/dev/vda1
是文件系统所在的设备名称。如果您的设备名称不同,请相应地更改此命令。 -
检查文件系统是否已成功扩展。您可以运行
df -h
命令来查看文件系统的容量和使用情况。如果一切正常,您应该看到文件系统的可用空间已经增加了。
由于 fly.toml 更新到 v2 版本,默认开启 auto_stop_machines,你可以手动修改 fly.toml:
[http_service]
auto_stop_machines = false # 修改为 `false`,如果你使用 telegram bot