Appearance
Docker
在单个 Docker 容器中运行 Memos,并保持数据持久化
对于单个 Memos 实例而言,Docker 是最简单的生产级部署方式。
快速开始
bash
docker run -d \
--name memos \
--restart unless-stopped \
-p 5230:5230 \
-v ~/.memos:/var/opt/memos \
neosmemo/memos:stable- 容器监听
5230端口。
- Memos 在容器内部的
/var/opt/memos目录中持久化存储数据。
- 宿主机的
~/.memos包含 SQLite 数据库和本地资源。
镜像标签
一般的标签选项:
stable:生产环境上最安全的默认选项
- 版本化的标签例如
0.28.1:定版部署
- 类似分支的标签例如
0.28:当前分支的最新打包
latest:以开发为主,不适合生产环境
平台支持
此镜像包含多架构清单(multi-arch manifests),会根据环境自动匹配最佳版本:
linux/amd64— x86_64 处理器
linux/arm64— ARM 64-bit (苹果芯片, 树莓派 4+)
linux/arm/v7— ARM 32-bit (树莓派 2/3)
容器用户
Memos 在容器内以非 root 用户运行:
- UID
10001, GID10001, 用户名nonroot
- 入口脚本自动修复挂载磁盘的所有权
如果你的磁盘需要不同的 UID 或 GID,覆写它们:
bash
docker run -d \
--name memos \
-p 5230:5230 \
-v ~/.memos:/var/opt/memos \
-e MEMOS_UID=1000 \
-e MEMOS_GID=1000 \
neosmemo/memos:stable环境变量
所有的 MEMOS_* 变量都直接对应命令行的标记,常用的有:
| 变量 | 默认值 | 意义 |
|---|---|---|
MEMOS_PORT | 8081 | HTTP 监听端口 (镜像默认是: 5230) |
MEMOS_ADDR | `` | 监听地址 (为空是监听全部入口) |
MEMOS_DATA | /var/opt/memos | 数据目录 |
MEMOS_DRIVER | sqlite | 数据库 |
MEMOS_DSN | auto | 数据库连接字符串 |
MEMOS_INSTANCE_URL | `` | 公共实例 URL |
MEMOS_DEMO | false | Demo 模式 |
典型示例:
bash
docker run -d \
--name memos \
--restart unless-stopped \
-p 5230:5230 \
-v ~/.memos:/var/opt/memos \
-e MEMOS_PORT=5230 \
-e MEMOS_DRIVER=sqlite \
-e MEMOS_INSTANCE_URL=https://memos.example.com \
neosmemo/memos:stable外部数据库
SQLite 是默认数据库,并且在单节点部署中表现很好。如果你需要使用 MySQL 或 PostgreSQL,则需要提供:
MEMOS_DRIVER=mysql或者MEMOS_DRIVER=postgres
MEMOS_DSN使用合适的连接字符串
例如使用 MySQL:
bash
docker run -d \
--name memos \
-p 5230:5230 \
-v ~/.memos:/var/opt/memos \
-e MEMOS_DRIVER=mysql \
-e MEMOS_DSN="user:password@tcp(mysql-host:3306)/memos" \
neosmemo/memos:stable例如使用 PostgreSQL:
bash
docker run -d \
--name memos \
-p 5230:5230 \
-v ~/.memos:/var/opt/memos \
-e MEMOS_DRIVER=postgres \
-e MEMOS_DSN="postgres://user:password@postgres-host:5432/memos?sslmode=disable" \
neosmemo/memos:stable当使用外部数据库,挂载的卷依然关联本地的资源和实例数据。
带有 _FILE 后缀的密钥
入口脚本支持 *_FILE 后缀的变量,所以你可以避免使用普通的环境变量传递凭据,取而代之的是使用 Docker 密钥。
bash
echo "postgres://user:password@host:5432/memos" | docker secret create memos_dsn -
docker run -d \
--name memos \
-p 5230:5230 \
-v ~/.memos:/var/opt/memos \
-e MEMOS_DRIVER=postgres \
-e MEMOS_DSN_FILE=/run/secrets/memos_dsn \
--secret memos_dsn \
neosmemo/memos:stable这对任何 MEMOS_* 变量都有效。
容器管理
bash
docker logs -f memos
docker stop memos
docker start memos
docker restart memos升级
bash
docker pull neosmemo/memos:stable
docker stop memos
docker rm memos
docker run -d \
--name memos \
--restart unless-stopped \
-p 5230:5230 \
-v ~/.memos:/var/opt/memos \
neosmemo/memos:stable由于数据存储在挂载卷中,更换容器时只要使用的相同的数据目录并留有备份,通常来说是安全的。