Message-Nest:Docker 部署聚合消息推送
本文属于「自托管 Docker 部署实战」系列(共 35 篇),第 17 篇。 示例中的 IP(192.0.2.10)、域名(example.com)、密码均为占位符,请按实际环境替换。
它是什么
Message-Nest 是一个「聚合推送」服务:把服务器上的事件按渠道(邮件、Webhook、聊天机器人等)分发出去,并保留发送记录。它没有公开镜像,需要自己编译成单二进制后打进镜像运行。
如果你只需要最简单的手机推送,用 PushMe 更省事;需要多渠道路由、失败重试、发送历史时再上 Message-Nest。
镜像地址
message-nest-dev:latest # 自建镜像,无公开仓库
构建产物名与目录结构以你的仓库为准,下文假设二进制为
/app/Message-Nest。
前置条件
- 一台 Linux 服务器(1C1G 足够,取决于并发推送量);
- 已安装 Docker 与 Compose v2;
- 已按项目文档编译出可执行文件(Go 项目通常是
go build -o Message-Nest ./...)。
# 安装 Docker(已安装可跳过)
curl -fsSL https://get.docker.com | sh
# 目录约定
mkdir -p /srv/docker/active/message-nest/app && cd /srv/docker/active/message-nest
构建镜像
# Dockerfile
FROM debian:12-slim
WORKDIR /app
COPY Message-Nest /app/Message-Nest
COPY config/ /app/config/
RUN chmod +x /app/Message-Nest
CMD ["/app/Message-Nest"]
# 把编译好的二进制和配置放进 app/
cp /path/to/Message-Nest ./app/
cp -r /path/to/config ./app/config/
docker build -t message-nest-dev:latest .
部署步骤
# docker-compose.yml
services:
message-nest:
image: message-nest-dev:latest
container_name: message-nest
restart: always
network_mode: host # 方便直接监听端口,也可改 bridge + ports
environment:
- TZ=Asia/Shanghai
volumes:
- ./app:/app
working_dir: /app
command: ["/app/Message-Nest"]
docker compose up -d
docker compose logs -f --tail=100
关键配置
| 项 | 说明 |
|---|---|
network_mode: host |
服务直接监听宿主机端口;改 bridge 时记得补 ports: |
./app:/app |
二进制、配置、SQLite/日志都在这里,唯一需要备份的目录 |
command |
入口必须指向你的二进制路径 |
TZ |
推送记录时间依赖它 |
注意事项
- 自建镜像没有版本号,升级 = 替换二进制 + 重启,回滚就是把旧二进制拷回去;
- 如果用 host 网络,注意端口别和宿主机已有服务冲突,先
ss -lntp | grep <端口>; - 配置文件里通常有各渠道的 Token/Webhook 密钥,
.env权限设 600,不要进 Git; - 推送渠道要能出网,服务器 DNS/代理异常时会出现「发送成功但没收到」;
- 发送失败重试会产生重复消息,渠道侧做好去重。
备份与升级
# 备份(二进制 + 配置 + 数据)
tar czf "backup-$(date +%F).tar.gz" ./app
# 升级:替换二进制后重启
docker compose restart message-nest
docker compose logs --tail=100
# 回滚:拷回旧二进制,再 restart
- 保留最近 1-2 个旧二进制,出问题能立刻切回;
- 定期清理发送历史表,避免 SQLite 无限增长。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果