Memos 0.31.0 常用 CLI 命令与工具详解

Memos 0.31.0 命令行使用面全解:官方单二进制的 version/help/completion 子命令与 13 个启动参数、MEMOS_* 环境变量覆盖优先级实测、SIGTERM 优雅停机、systemd 服务管理全流程、sqlite3 库层只读运维与 PAT 认证 API 交互,全部回显逐字实测。

MemosMemos知识库Markdown2026/10/22

Memos 0.31.0 常用 CLI 命令与工具详解

目标:系统讲清 Memos 0.31.0 的命令行使用面——官方单二进制 memos 的全部子命令(version/help/completion)与 13 个启动参数、MEMOS_* 环境变量双通道的覆盖优先级实测、SIGTERM 优雅停机、systemd 服务管理全流程、sqlite3 库层只读运维,以及 PAT(个人访问令牌)认证的 API 交互。文中全部命令与回显均在真实服务器环境(Ubuntu 24.04.5 LTS、Memos 0.31.0 官方二进制 + systemd 托管,监听 8081,数据目录 /var/opt/memos)逐条实测通过,回显逐字照抄。

一、环境信息

本篇实测环境的关键信息如下:

  • 操作系统:Ubuntu 24.04.5 LTS,x86_64,系统时区 Asia/Shanghai(journalctl 回显时间戳为 +08:00)
  • Memos:0.31.0(官方单二进制,静态链接,GitHub Releases 资产 memos_0.31.0_linux_amd64.tar.gz,2026-09-20 发布)
  • 安装位置:二进制 /usr/local/bin/memos,数据目录 /var/opt/memos
  • 进程托管:systemd 服务 memos.service(Type=simple,systemctl is-active 实测 active)
  • 监听端口:8081(二进制默认端口,--port 默认值实查);本篇参数覆盖实测另用空闲端口 8145/8146/8147
  • 数据库:sqlite(默认驱动,库文件 /var/opt/memos/memos_prod.db)
  • 管理账号:root / q1w2e3r4(实例管理员 Host)
  • 组件背景:Memos 的定位与选型见 《Memos 介绍与选型指南》;二进制裸跑之外的 Compose 编排部署形态见 《Memos 0.31.0 Docker Compose 部署指南》;13 个启动参数与 7 组实例设置的逐项参数学见 《Memos 0.31.0 配置参数详解》

二、工具概览

Memos 只有一个可执行文件 memos,它同时是服务进程与命令行工具(基于 Go 的 cobra 命令行框架构建)。不带子命令直接执行时启动 Web 服务;子命令只有三个,全部与运维自检相关:

命令/用法作用
memos(无子命令)启动 Memos 服务(前台阻塞运行)
memos version打印当前版本号
memos -V / memos --version同上(短参数形式)
memos help打印帮助(与 --help 等价)
memos completion <shell>生成 bash/zsh/fish/powershell 自动补全脚本

围绕这个单二进制,本篇实测的配套工具链:

  • systemd + journalctl:把 memos 托管为系统服务,开机自启、崩溃拉起、集中日志;
  • sqlite3:对默认 SQLite 库做只读核验与在线热备;
  • curl:通过 HTTP API 与实例交互(密码换令牌、PAT 免密认证、数据导出)。

服务层配置(站点标题、注册策略、存储等 7 组实例设置)不在命令行修改,而是存数据库、经 Web 设置页或 API 变更,其参数学见本专栏《Memos 0.31.0 配置参数详解》。

三、前置条件

3.1 安装官方二进制

从 GitHub Releases 下载、校验并安装(完整步骤与代理下载提示见《Memos 0.31.0 配置参数详解》第二章,此处给关键命令):

mkdir -p /opt/memos && cd /opt/memos
wget https://github.com/usememos/memos/releases/download/v0.31.0/memos_0.31.0_linux_amd64.tar.gz
wget https://github.com/usememos/memos/releases/download/v0.31.0/checksums.txt
sha256sum -c checksums.txt 2>/dev/null | grep linux_amd64
tar -xzf memos_0.31.0_linux_amd64.tar.gz
mv memos /usr/local/bin/memos && chmod +x /usr/local/bin/memos

校验命令实测回显:

memos_0.31.0_linux_amd64.tar.gz: OK

安装后立即验证可执行性:

memos version

实测回显:

0.31.0

3.2 准备数据目录

Memos 的数据目录规则(--data 默认值判定逻辑):/var/opt/memos 存在且可写时用它;否则用当前工作目录。服务器部署建议显式创建:

mkdir -p /var/opt/memos

💡 说明:不建目录就地在 $HOME 下启动,库文件会散落在启动目录,后续备份与 systemd 托管都会变别扭——这是新手最常见的「数据去哪了」问题的根源。

四、memos 命令详解

4.1 version:版本自检

memos version
memos --version
memos -V

三种写法实测回显一致:

0.31.0

升级前后各执行一次,是确认替换二进制生效的最快手段。

4.2 help 与 --help:命令与参数全景

memos --help

实测回显(全文):

Usage:
  memos [flags]
  memos [command]

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  help        Help about any command
  version     Print the current Memos version

Flags:
      --addr string                                 address of server
      --data string                                 data directory
      --demo                                        enable demo mode
      --driver string                               database driver (sqlite, mysql, postgres, d1) (default "sqlite")
      --dsn string                                  database source name (DSN)
  -h, --help                                        help for memos
      --instance-url string                         canonical external URL of the Memos instance
      --log-level string                            log verbosity level (debug, info, warn, error) (default "info")
      --port int                                    port of server (default 8081)
      --rate-limit                                  enable request rate limiting (default true)
      --trusted-proxies strings                     proxies whose forwarding headers identify the client: CIDRs, IPs, "private" (default; the loopback and private ranges), or "none" when the instance is reached without a header-rewriting proxy (default [private])
      --unix-sock string                            path to the unix socket, overrides --addr and --port
  -V, --version                                     print the current Memos version
      --webhook-private-network-allowlist strings   private webhook destinations to allow (exact hostname, IP, or CIDR)

Use "memos [command] --help" for more information about a command.

从回显可直接读出各参数的真实默认值,整理如下(13 个配置项 + 2 个信息项):

参数默认值说明
--port int8081HTTP 监听端口
--addr string空(监听全部网卡)监听地址
--unix-sock string空Unix socket 路径,覆盖 --addr 与 --port
--data string空(按 3.2 节规则判定)数据目录
--driver stringsqlite数据库驱动:sqlite/mysql/postgres/d1
--dsn string空数据库连接串(外部数据库必填)
--instance-url string空实例对外规范 URL
--demofalse演示模式(仅限 sqlite 驱动)
--log-level stringinfo日志级别 debug/info/warn/error
--rate-limittrue请求限流开关
--trusted-proxies strings[private]可信代理网段(private/none/CIDR 列表)
--webhook-private-network-allowlist strings空允许 webhook 访问的内网目标白名单
-V, --version—打印版本
-h, --help—打印帮助

子命令的帮助可以继续下钻:

memos version --help

实测回显:

Print the current Memos version

Usage:
  memos version [flags]

Flags:
  -h, --help   help for version

4.3 completion:Shell 自动补全

completion 下有 bash/fish/powershell/zsh 四个子命令:

memos completion --help

实测回显:

Generate the autocompletion script for memos for the specified shell.
See each sub-command's help for details on how to use the generated script.

Usage:
  memos completion [command]

Available Commands:
  bash        Generate the autocompletion script for bash
  fish        Generate the autocompletion script for fish
  powershell  Generate the autocompletion script for powershell
  zsh         Generate the autocompletion script for zsh

Flags:
  -h, --help   help for completion

Use "memos completion [command] --help" for more information about a command.

生成 bash 补全脚本(输出为完整脚本,实测节选头部):

memos completion bash | head -8

实测回显:

# bash completion V2 for memos                                -*- shell-script -*-

__memos_debug()
{
    if [[ -n ${BASH_COMP_DEBUG_FILE-} ]]; then
        echo "$*" >> "${BASH_COMP_DEBUG_FILE}"
    fi
}

zsh 形态(实测节选头部):

memos completion zsh | head -3

实测回显:

#compdef memos
compdef _memos memos

# zsh completion for memos                                -*- shell-script -*-

当前会话即时启用 bash 补全:source <(memos completion bash);要常驻则把该行追加到 ~/.bashrc(zsh 对应 ~/.zshrc)。启用后,输入 memos -- 按 Tab 可列出全部启动参数。

4.4 默认行为:前台启动服务

不带子命令执行即启动服务(前台阻塞,Ctrl+C 停止)。用显式 --port 在实测端口启动:

memos --data /var/opt/memos --port 8145

实测回显(节选):

Memos 0.31.0 started successfully!
Database driver: sqlite
Server running on port 8145
Access your memos at: http://localhost:8145
Access mode: private

💡 说明:--port 8145 生效的关键行是 Server running on port 8145——显式参数覆盖了二进制默认的 8081。生产服务器不建议前台裸跑,配合 systemd 托管见第七章。

4.5 废弃参数的识别与替代

--allow-private-webhooks 在 0.31 已废弃,但它没有出现在 --help 列表里(被框架隐藏)。传入时程序会给出两层告警但仍能启动——实测:

memos --allow-private-webhooks --data /var/opt/memos --port 8145

实测回显(节选,前两行为告警):

Flag --allow-private-webhooks has been deprecated, use --webhook-private-network-allowlist to allow only required destinations
time=2026-10-22T09:31:43.793+08:00 level=WARN msg="--allow-private-webhooks is deprecated and disables webhook private-network protection; use --webhook-private-network-allowlist"
Memos 0.31.0 started successfully!
Server running on port 8145
Access mode: private

要点:第一层是参数解析框架的 deprecation 提示,第二层是应用日志的 WARN,替代方案是 --webhook-private-network-allowlist(按主机名/IP/CIDR 粒度放行 webhook 内网目标,默认拒绝全部)。老版本升级脚本里若还带这个参数,看到双重告警即应替换。

五、启动参数与环境变量实战

5.1 双通道映射规则与优先级

每个启动参数都有同名环境变量:MEMOS_ 前缀 + 参数名中划线转下划线(如 --port ↔ MEMOS_PORT、--trusted-proxies ↔ MEMOS_TRUSTED_PROXIES)。三级取值顺序为:显式传入的启动参数 > 环境变量 > 内置默认值(参数绑定顺序见源码 cmd/memos/main.go)。环境变量的完整对照表见《Memos 0.31.0 配置参数详解》第四章,本节用两个实测验证覆盖链路。

5.2 环境变量覆盖默认值实测(MEMOS_PORT)

不传任何参数,仅设置 MEMOS_PORT:

MEMOS_PORT=8146 memos --data /var/opt/memos

实测回显(节选):

Memos 0.31.0 started successfully!
Database driver: sqlite
Server running on port 8146
Access your memos at: http://localhost:8146
Access mode: private

默认 8081 被环境变量覆盖为 8146,验证了「环境变量 > 内置默认值」一级。

5.3 显式参数优先级实测(--port 与 MEMOS_PORT 并存)

再叠加显式参数,验证最高一级:

MEMOS_PORT=8146 memos --data /var/opt/memos --port 8145

实测回显(节选):

Server running on port 8145

环境变量设了 8146、显式参数给了 8145,最终按 8145 监听——「显式参数 > 环境变量」成立。systemd 排障时若怀疑环境变量干扰,先检查 unit 的 Environment= 与 ExecStart= 两处取值。

5.4 Unix socket 监听实测(--unix-sock)

--unix-sock 设置后覆盖 TCP 监听(--addr/--port 失效),适合本机反代场景:

memos --data /var/opt/memos --unix-sock /run/memos.sock --port 8147

先确认 TCP 端口没有按 --port 8147 监听:

ss -ltn | grep ':8147'

实测回显(无输出,说明 TCP 未监听):

改用 socket 文件访问健康检查端点:

curl -s --unix-socket /run/memos.sock http://localhost/healthz -w "\nhttp_code=%{http_code}\n"

实测回显:

Service ready.
http_code=200

服务日志也印证了监听形态(节选):

Server running on unix socket: /run/memos.sock

进程退出后 socket 文件自动清理(ls /run/memos.sock 实测 No such file or directory),不留残留文件。

5.5 数据目录规则实测(--data)

--data 显式指定数据目录时,日志会回显最终生效路径(见 4.4 节回显中的 Data directory: 行)。若不传 --data 也没有 /var/opt/memos,Memos 会退回当前工作目录——实测在一个空目录里直接启动,日志回显 Data directory: 指向该目录,并在其中生成 memos_prod.db 三件套。因此 systemd 单元必须写死 WorkingDirectory 或显式 --data,否则服务的数据目录随单元配置漂移。

5.6 数据库驱动与 DSN(--driver/--dsn 报错实录)

切换驱动只改两个参数:--driver(sqlite/mysql/postgres/d1)+ --dsn(连接串)。MySQL DSN 形如 root:q1w2e3r4@tcp(mysql-host:3306)/memos,PostgreSQL DSN 形如 postgresql://memos:q1w2e3r4@pg-host:5432/memos?sslmode=disable。两个高频错误实测如下。

错误一:只给驱动不给 DSN——程序按空连接串连本机:

memos --driver mysql

实测报错回显:

time=2026-10-22T08:54:49.988+08:00 level=ERROR msg="memos failed" error="failed to migrate database: failed to pre-migrate: failed to check if database is initialized: failed to check if database is initialized: Error 1045 (28000): Access denied for user ''@'localhost' (using password: NO)"

错误二:demo 模式配外部驱动——--demo 只允许 sqlite:

memos --demo --driver postgres

实测报错回显:

time=2026-10-22T08:54:49.943+08:00 level=ERROR msg="memos failed" error="failed to validate profile: demo mode requires the sqlite database driver, got \"postgres\""

两种错误进程都直接退出(level=ERROR msg="memos failed"),不进入监听状态。

六、优雅停机实测(SIGTERM)

前台运行时按 Ctrl+C(或向进程发 SIGTERM),Memos 走优雅停机流程——停止接收新请求、等待在途请求完成后退出。实测对运行中的进程执行 kill -TERM <pid>,日志回显:

time=2026-10-22T09:31:47.785+08:00 level=INFO msg="server shutting down"
time=2026-10-22T09:31:47.787+08:00 level=INFO msg="memos stopped properly"

memos stopped properly 即优雅退出的标志行。systemd 停止服务(systemctl stop/restart)默认向主进程发 SIGTERM,因此 journalctl -u memos 中同样能看到这两行(见 7.3 节实测)——升级或重启前后用它们确认没有硬截断请求。

七、systemd 服务管理

7.1 服务单元文件

/etc/systemd/system/memos.service 本篇实测采用:

[Unit]
Description=Memos self-hosted memo service
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/var/opt/memos
ExecStart=/usr/local/bin/memos --data /var/opt/memos --port 8081
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

查看与本文一致的原始内容:

systemctl cat memos --no-pager

实测回显(# /etc/systemd/system/memos.service 头行 + 上述全文)。

要点:Restart=on-failure 异常退出自动拉起(正常 stop 不拉起);RestartSec=5 拉起间隔 5 秒;ExecStart 用绝对路径并把 --data 写死,杜绝 5.5 节的目录漂移问题。生产环境可将 User= 改为专用低权账号(需同步 chown 数据目录)。

7.2 启用与状态查看

systemctl daemon-reload
systemctl enable --now memos

enable --now 同时完成开机自启注册与立即启动(无回显即成功)。状态自检:

systemctl status memos --no-pager

实测回显(节选):

● memos.service - Memos self-hosted memo service
     Loaded: loaded (/etc/systemd/system/memos.service; enabled; preset: enabled)
     Active: active (running) since Thu 2026-10-22 09:37:22 CST; 2s ago
   Main PID: 602 (memos)
      Tasks: 11 (limit: 94371)
     Memory: 15.5M (peak: 17.3M)
        CPU: 35ms

Oct 22 09:37:22 997a6dd867b0 systemd[1]: Started memos.service - Memos self-hosted memo service.
Oct 22 09:37:22 997a6dd867b0 memos[602]: Memos 0.31.0 started successfully!
Oct 22 09:37:22 997a6dd867b0 memos[602]: Data directory: /var/opt/memos
Oct 22 09:37:22 997a6dd867b0 memos[602]: Database driver: sqlite
Oct 22 09:37:22 997a6dd867b0 memos[602]: Server running on port 8081
Oct 22 09:37:22 997a6dd867b0 memos[602]: Access your memos at: http://localhost:8081
Oct 22 09:37:22 997a6dd867b0 memos[602]: Access mode: private

Memory: 15.5M (peak: 17.3M)——空闲态内存常驻 15MiB 上下,是典型轻量服务水位;日志尾部回显的五件套(版本/数据目录/驱动/端口/访问模式)与前台启动一致。

7.3 重启与日志跟踪

重启一次并跟踪完整生命周期日志:

systemctl restart memos
journalctl -u memos --no-pager -n 14

实测回显:

Oct 22 09:37:22 997a6dd867b0 systemd[1]: Stopping memos.service - Memos self-hosted memo service...
Oct 22 09:37:22 997a6dd867b0 memos[549]: time=2026-10-22T09:37:22.243+08:00 level=INFO msg="server shutting down"
Oct 22 09:37:22 997a6dd867b0 memos[549]: time=2026-10-22T09:37:22.244+08:00 level=INFO msg="memos stopped properly"
Oct 22 09:37:22 997a6dd867b0 systemd[1]: memos.service: Deactivated successfully.
Oct 22 09:37:22 997a6dd867b0 systemd[1]: Stopped memos.service - Memos self-hosted memo service.
Oct 22 09:37:22 997a6dd867b0 systemd[1]: Started memos.service - Memos self-hosted memo service.
Oct 22 09:37:22 997a6dd867b0 memos[602]: Memos 0.31.0 started successfully!
Oct 22 09:37:22 997a6dd867b0 memos[602]: Data directory: /var/opt/memos
Oct 22 09:37:22 997a6dd867b0 memos[602]: Database driver: sqlite
Oct 22 09:37:22 997a6dd867b0 memos[602]: Server running on port 8081
Oct 22 09:37:22 997a6dd867b0 memos[602]: Access your memos at: http://localhost:8081
Oct 22 09:37:22 997a6dd867b0 memos[602]: Access mode: private

链路完整可读:Stopping → 优雅停机两行(第六章的 SIGTERM 日志)→ Deactivated successfully → 旧 PID 549 停止 → 新 PID 602 启动五件套。日常排障两条常用变体:journalctl -u memos -f 实时跟踪;journalctl -u memos --since "1 hour ago" 按时段过滤。

7.4 修改单元文件后的生效流程

改 memos.service(如调整 ExecStart 参数、加 Environment=)后,直接 restart 不会加载新单元内容,正确顺序:

systemctl daemon-reload
systemctl restart memos

daemon-reload 无回显即成功(重载单元定义),第二步才以新配置重启进程。漏掉第一步是「改了配置不生效」的头号原因。

八、库层工具:sqlite3 只读运维

8.1 数据目录构成

SQLite 方案下数据目录即全部数据:

ls -la /var/opt/memos/

实测回显(结构示意,尺寸随数据量变化):

-rw-r--r-- 1 10001 10001 151552 Oct 22 08:55 memos_prod.db
-rw-r--r-- 1 10001 10001  32768 Oct 22 09:03 memos_prod.db-shm
-rw-r--r-- 1 10001 10001  37112 Oct 22 09:03 memos_prod.db-wal
drwxr-xr-x 2 10001 10001   4096 Oct 22 08:55 assets

库文件三件套(主库 + WAL + SHM)加 assets/ 附件目录。备份恢复的完整实测(在线热备 .backup 与停机冷备)见《Memos 0.31.0 Docker Compose 部署指南》第五章,本节只做只读核验与版本查询。

8.2 表清单与数据核验

sqlite3 /var/opt/memos/memos_prod.db ".tables"

实测回显(13 张业务表):

attachment      memo            reaction        system_setting  user_setting
idp             memo_relation   space           user
inbox           memo_share      space_member    user_identity

核验账号与 memo 数量(只读 SELECT,勿在业务库执行写操作):

sqlite3 /var/opt/memos/memos_prod.db "SELECT count(*) FROM memo; SELECT username FROM user;"

实测回显:

1
root

⚠️ 注意:WAL 模式下直接拷贝主库单文件可能丢最近写入,核验用只读命令没有问题,备份请用 8.4 节的 .backup 或停机冷备。

8.3 schema 版本查询

Memos 的 schema 版本存在 system_setting 表的 BASIC 行 JSON 里。该行同时含实例密钥 secretKey,查询时只提取版本字段,避免把密钥打进终端记录:

sqlite3 /var/opt/memos/memos_prod.db "SELECT value FROM system_setting WHERE name='BASIC';" | python3 -c "import json,sys; print(json.load(sys.stdin)['schemaVersion'])"

实测回显:

0.31.8

该值与启动日志的 schemaVersion=0.31.8 一致。schema 迁移只在启动时发生且只升不降(详见部署篇升级实测一节),版本排查时以库内值为准,而不是二进制版本号。

8.4 在线热备一条命令

不停服一致性备份(apt install sqlite3 后可用):

mkdir -p /var/opt/memos-backup
sqlite3 /var/opt/memos/memos_prod.db ".backup '/var/opt/memos-backup/memos_prod_$(date +%Y%m%d).db'"

命令无回显即成功;备份文件可独立打开核验(SELECT count(*) FROM memo;)。搭配 cron 每日执行即是最简备份方案,完整恢复演练见部署篇第五章。

九、API 交互与 PAT 认证

命令行与实例交互走 HTTP API(REST 网关,路径前缀 /api/v1,兼容 ConnectRPC)。两种认证方式:密码登录换短时 JWT(完整实测见部署篇第四章),或 PAT 免密认证——后者更适合脚本与自动化。

9.1 创建 PAT

以实例用户身份在 Web 端设置页创建 Personal Access Token,得到 memos_pat_ 前缀的长期令牌(服务端只保存哈希,令牌明文仅创建时可见,注意保存)。

9.2 PAT 调用实测

用 PAT 直接创建一条 memo(免登录、无 Cookie):

PAT=memos_pat_你的令牌
curl -s -X POST http://127.0.0.1:8081/api/v1/memos -H "Authorization: Bearer $PAT" -H "Content-Type: application/json" -d '{"content":"PAT 认证实测:免登录口令直连 API 写入。 #实测"}' | head -c 260

实测回显:

{"name":"memos/LntayQmGntuGioZCVwLBLi","state":"NORMAL","creator":"users/root","createTime":"2026-10-22T01:34:07Z","updateTime":"2026-10-22T01:34:07Z","content":"PAT 认证实测:免登录口令直连 API 写入。 #实测","visibility":"PRIVATE","tags":["

(head -c 260 截断展示,tags 数组及后续字段被截去。)PAT 请求与密码登录请求走同一 API 面,脚本化备份、批量导入、外部系统联动均可用此形态。API 的完整服务清单与设置读写(含 PATCH 整组覆盖语义的坑)见《Memos 0.31.0 配置参数详解》第五、七章。

9.3 个人数据导出

设置页(Settings → Export & Import)或一条 GET 即可导出当前用户全部 memo 为 Memos Export Format ZIP(manifest.json + 每条 memo 的 .json/.md),实测命令与产物结构见部署篇第五章,可作跨实例搬家与人工留档手段。

十、注意事项

  1. 限流默认开启:--rate-limit 默认 true,同实例连续错误口令登录第 11 次起返回 429(实测序列 400 ×10 → 429 ×2,见部署篇 FAQ)。自动化脚本一律走 PAT 认证,公网实例不要关闭限流。
  2. schema 只升不降:启动即迁移到目标版本,降级二进制前必须先恢复旧备份库,否则旧版本无法识别新库。
  3. /etc/secrets 文件级配置改动需重启进程生效:文件配置遮蔽数据库同名设置,改文件后 systemctl restart memos(机制详解见配置参数详解篇)。
  4. 敏感信息不进终端历史:system_setting 的 BASIC 行含实例密钥,查询参照 8.3 节只提取需要的字段。
  5. 废弃参数会静默换行为:--allow-private-webhooks 已废弃且从帮助中隐藏(4.5 节实录),升级后检查启动脚本与 unit 文件,改用 --webhook-private-network-allowlist。
  6. --demo 数据无保障:演示模式仅限临时展示(且只能配 sqlite),生产禁用。

十一、常见问题(FAQ)

Q1:改了 unit 里的参数,restart 后还是旧行为? 漏了 systemctl daemon-reload。systemd 缓存单元定义,restart 只重启进程不重载定义;先 daemon-reload 再 restart(7.4 节)。若改的是 Environment=,还要注意 5.3 节的优先级——unit 里 ExecStart 的显式参数会覆盖 Environment。

Q2:换端口启动后,外部还是访问不了? 先确认监听生效(回显 Server running on port <端口>),再排查两层:ss -ltn | grep <端口> 确认内核监听;防火墙/安全组放行该端口。--instance-url 只影响对外规范 URL 生成,不影响监听。

Q3:MySQL/PostgreSQL 驱动启动即退,报 Access denied? DSN 没配全。--driver mysql 不配 --dsn 会按空凭据连本机(5.6 节错误一实录:Error 1045 (28000): Access denied for user ''@'localhost')。外部数据库必须写全「用户:密码@主机:端口/库名」。

Q4:想临时演示又不想动生产数据? --demo 模式(配独立 --data 目录 + sqlite 驱动),数据不保证持久(5.6 节错误二实录了 demo+postgres 会直接退出)。演示结束删掉该数据目录即可,与生产实例互不影响。

Q5:bash 补全想开机常驻? echo 'source <(memos completion bash)' >> ~/.bashrc 后重开终端生效(zsh 用 ~/.zshrc 与 completion zsh)。验证:输入 memos -- 按 Tab 应列出全部启动参数。

Q6:日志太多想降噪? --log-level 改 warn(或 unit 的 Environment=MEMOS_LOG_LEVEL=warn)后重启;临时排查再切回 debug。journalctl 侧可用 -p warning 只看警告级以上条目,两者组合定位问题更快。

十二、参考链接

  1. 官方文档:https://usememos.com/docs
  2. v0.31.0 源码(参数定义与绑定权威来源 cmd/memos/main.go):https://github.com/usememos/memos/tree/v0.31.0
  3. v0.31.0 官方变更日志:https://github.com/usememos/memos/blob/v0.31.0/CHANGELOG.md
  4. 官方发行资产(二进制与校验文件):https://github.com/usememos/memos/releases/tag/v0.31.0
  5. 本专栏相关篇章:《Memos 介绍与选型指南》、《Memos 0.31.0 Docker Compose 部署指南》、《Memos 0.31.0 配置参数详解》