5.8 KiB
NixMsg 运维手册
对应 DEVELOPMENT 第 11 节。本文不含任何密码或令牌样例。
1. 配置项
环境变量 NIXMSG_CONFIG 指向 YAML 配置,默认 ./config.yaml。完整字段见 deploy/config.example.yaml。
| 项 | 说明 |
|---|---|
listen |
端接入端口,如 ":7443" |
admin_listen |
后台单独监听,如 "127.0.0.1:7444";空表示后台与端共用 listen |
tls.cert_file / tls.key_file |
证书与私钥路径;空表示明文 |
tls.allow_plaintext |
配了证书时是否仍接受明文;生产建议 false |
trusted_proxies |
可信反向代理网段,用于解析真实客户端 IP |
data_dir |
数据目录(库文件、listen.addr、迁移备份) |
limits.* |
正文/帧大小、TTL、群人数、宽限、确认超时、配额等;max_body_bytes 只能调小,上限 262144 |
session_idle_days |
会话令牌闲置失效天数;0 不失效 |
record_retention_days |
完成后消息记录保留天数;0 表示完成后不留记录 |
idempotency_hours |
防重窗口 |
receipt_retention_days |
回执保留天数 |
sqlite_synchronous |
FULL 或 NORMAL |
metrics.token |
共用端口时访问 /metrics 所需 Bearer 令牌;空则共用端口不提供 /metrics |
log.level |
日志级别,如 info |
注册开关、注册安全码、API 令牌存在数据库,在管理后台修改,不在配置文件里。
校验配置:nixmsg check-config。
2. 目录布局
config.yaml
data/nixmsg.db
data/backup/ # 迁移前自动备份、手工 backup 也可写到这里
data/listen.addr # serve 写入实际监听地址(测试用端口 0 时需要)
Docker 约定:配置 /etc/nixmsg/config.yaml,数据 /data,证书 /certs(只读挂载)。
3. 备份
程序不做定时备份,用 cron 或 1Panel 计划任务调用:
# 宿主机(服务可在运行中)
NIXMSG_CONFIG=/path/to/config.yaml nixmsg backup --out /path/to/data/backup/manual-$(date +%Y%m%d).db
# Docker Compose
docker compose -f deploy/docker-compose.yml exec nixmsg /nixmsg backup --out /data/backup/manual.db
备份文件含当时未送完的正文,按敏感数据保管。旧备份自行清理。
恢复:停服务,用备份文件替换 data/nixmsg.db(或拷到新 data_dir),再启动;勿在半迁移状态硬切。
4. 升级与自动迁移
- 换上新二进制或拉新镜像。
- 启动时若有未应用的嵌入迁移版本,会先
VACUUM INTO到
<data_dir>/backup/pre-migrate-<UTC时间>.db,再执行迁移。 - 迁移失败则进程退出,不带半新半旧库继续服务;运维可从备份恢复后排查。
- 空库首次建表不会产生迁移前备份。
无需手工跑迁移命令。
5. 证书与 1Panel
程序只读证书文件,不做 ACME。装有 1Panel 时:
-
在 1Panel 证书管理申请证书(DNS 或 HTTP 验证),打开自动续签。
-
勾选「推送证书到本地目录」,例如
/opt/nixmsg/certs。申请与续签后写入fullchain.pem、privkey.pem。 -
配置:
tls: cert_file: /opt/nixmsg/certs/fullchain.pem key_file: /opt/nixmsg/certs/privkey.pem allow_plaintext: false -
私钥须让 NixMsg 进程可读。Docker 容器用户为 nonroot(uid
65532);可在 1Panel「申请证书后执行脚本」里调整属主/权限。 -
程序每小时检查文件修改时间,续签后新连接自动用新证书,已有连接不断开。
不要用 1Panel OpenResty 终止 TLS 再转发裸 TCP:TCP/UDP 代理不做 TLS,设备会被拆端口。仅当全部端走 WebSocket 时,才可改成「OpenResty 终止 HTTPS/WSS,NixMsg 本机明文」;此时配置 trusted_proxies,并设置 proxy_http_version 1.1、Upgrade、Connection,Host 用 $http_host。
6. 服务器时钟
- 开启 NTP 对时。
- 服务器时钟被人为大改时,定时消息按新时钟触发。
- 宽限、确认超时、会话闲置等也依赖系统时间。
7. 抓取 /metrics
Prometheus 文本格式,只含计数和耗时,不含正文与编号明细。
- 后台单独监听(
admin_listen非空):在后台端口直接
GET http://<admin_host>:<port>/metrics,无需令牌。 - 共用端口:请求头必须带
Authorization: Bearer <metrics.token>。- 未配置
metrics.token→404 - 令牌错误 →
401
- 未配置
示例(共用端口且已配置 token;勿把真实令牌写进仓库或脚本提交):
curl -sS -H "Authorization: Bearer $NIXMSG_METRICS_TOKEN" http://127.0.0.1:7443/metrics
健康检查:GET /healthz、GET /readyz(Docker HEALTHCHECK 用镜像内 /nixmsg healthcheck)。
8. Docker 要点
- 镜像:
git.asio.asia/nixevol/nixmsg(版本标签与latest)。 - Compose 示例:deploy/docker-compose.yml。
- 容器以 uid
65532运行:挂载数据目录须可写;命名卷首次可
docker run --rm -v <卷名>:/data busybox chown -R 65532:65532 /data。 - 首次:
docker compose run --rm nixmsg admin init,再up -d。 - 构建/推送 Task 目标见根目录 README(
q:docker-build/q:docker-push/q:docker-buildx)。正式仓库推送在阶段 3。
9. 验收与仍跳过的长时项
F01–F23 短时间验收对照表见 test/accept/ACCEPTANCE.md(汇总通过 23,失败 0,未测 0)。下列因环境或时长限制未测,不得宣称已通过:
- F03:1000 端全表 1 秒内返回、真拔网线后心跳超时离线
- F08 / Q3:Linux netem 20% 丢包(本机 Windows)
- 压测:1000 连接保持 10 分钟、每秒 200 条
F22 通过的子集仅覆盖 init + 健康检查等;备份恢复、升级迁移、证书重载、Docker 全量、/metrics 抓取等仍见对照表备注。