跳到主要内容

部署教程

Gotify 部署教程:Docker、HTTPS 与安卓消息推送

发布于

部署 Gotify 接收脚本和监控消息,配置应用令牌、安卓客户端与数据备份。

把服务器通知送到安卓手机

Gotify 服务端接收 REST API 消息,再通过 WebSocket 交给浏览器与 Android 客户端。可用来接收网站监控、备份结果和定时任务通知。Android 客户端需要保持后台连接,iPhone 不适用这套安卓客户端步骤。

前往雨云选购 ↗

注册推荐码:KuZhuJi

用 Docker 启动服务端

示例固定 gotify/server:3.1.1,使用 SQLite 和 /app/data 持久化。将默认密码及 push.example.com 改成自己的值,再执行:

bash;使用前请核对本文前提。 如内容超出,可左右滑动,键盘使用方向键或 Home/End 查看。
仅复制文本,不会执行。
mkdir -p /opt/gotify/data
cd /opt/gotify
sudo chown -R 1000:1000 data
cat > docker-compose.yml <<'YAML'
services:
  gotify:
    image: gotify/server:3.1.1
    container_name: gotify
    restart: unless-stopped
    user: "1000:1000"
    ports:
      - "127.0.0.1:8085:80"
    environment:
      TZ: Asia/Shanghai
      GOTIFY_SERVER_PORT: 80
      GOTIFY_DEFAULTUSER_NAME: admin
      GOTIFY_DEFAULTUSER_PASS: change-this-before-first-login
      GOTIFY_REGISTRATION: "false"
      GOTIFY_SERVER_STREAM_ALLOWEDORIGINS: "https://push.example.com"
      GOTIFY_SERVER_SECURECOOKIE: "true"
    volumes:
      - ./data:/app/data
YAML

docker compose up -d

容器用 UID/GID 1000 运行,data 目录需有对应写权限。8085 只监听宿主机回环地址;注册关闭,数据目录保存用户、应用和历史消息。

配置 HTTPS 和 WebSocket

域名解析到 VPS,由宿主机 Caddy 转发到 8085。Caddy 运行在其他容器中时,上游应改为共同网络中的 Gotify 地址。

caddyfile;使用前请核对本文前提。 如内容超出,可左右滑动,键盘使用方向键或 Home/End 查看。
仅复制文本,不会执行。
push.example.com {
  encode zstd gzip
  reverse_proxy 127.0.0.1:8085
  header {
    X-Content-Type-Options nosniff
    Referrer-Policy no-referrer
  }
}

校验并重载 Caddy 后打开 HTTPS 域名,登录并修改初始密码。普通 reverse_proxy 支持 WebSocket,后台数据目录在重建时继续使用。

创建应用令牌并发送消息

在 Applications 创建发送方,例如 backup-job,取得 Application Token。脚本发送消息用应用令牌;Android 或其他读取端使用登录会话、Client Token。

bash;使用前请核对本文前提。 如内容超出,可左右滑动,键盘使用方向键或 Home/End 查看。
仅复制文本,不会执行。
curl -sS -X POST "https://push.example.com/message" \
  -H "X-Gotify-Key: ${GOTIFY_APP_TOKEN}" \
  -F "title=备份完成" \
  -F "message=web-01 备份已写入对象存储,快照编号 2026-09-22-0300" \
  -F "priority=5"

先设置受限环境变量 GOTIFY_APP_TOKEN。示例主机名、快照编号都是消息模板,按实际任务替换。令牌放在 X-Gotify-Key 请求头,不放到公开 URL。

bash;使用前请核对本文前提。 如内容超出,可左右滑动,键盘使用方向键或 Home/End 查看。
仅复制文本,不会执行。
#!/usr/bin/env bash
set -euo pipefail
notify() {
  local title="$1" message="$2" priority="${3:-4}"
  curl -fsS -X POST "https://push.example.com/message" \
    -H "X-Gotify-Key: ${GOTIFY_APP_TOKEN}" \
    -F "title=${title}" \
    -F "message=${message}" \
    -F "priority=${priority}" >/dev/null
}

if /usr/local/bin/nightly-job; then
  notify "定时任务完成" "nightly-job 成功,主机 $(hostname)" 2
else
  code=$?
  notify "定时任务失败" "nightly-job 退出码 ${code},请查看日志" 8
  exit "$code"
fi

nightly-job 换成自己的任务程序。成功和失败分别通知,失败保留原退出码;高频重复告警由脚本或监控系统聚合。

连接安卓客户端

安装 Gotify Android,填写 HTTPS 地址并登录,允许通知权限,按机型关闭该应用的电池优化并允许后台运行。先确认连接状态,再发送消息,检查通知渠道、声音与免打扰设置。

锁屏、切换网络、重启手机后分别检查送达。浏览器有消息而手机没有时,先查客户端连接、后台限制和通知权限,再看反向代理的 WebSocket 请求。401/403 则先检查令牌类型与值。

备份数据与升级

停止 Gotify 后归档 data,备份文件另存到服务器之外:

bash;使用前请核对本文前提。 如内容超出,可左右滑动,键盘使用方向键或 Home/End 查看。
仅复制文本,不会执行。
cd /opt/gotify
sudo install -d -m 700 /var/backups/gotify
docker compose stop gotify
sudo tar -czf /var/backups/gotify/gotify-data-$(date +%F-%H%M).tar.gz data
docker compose start gotify

恢复时使用原部署配置和相应镜像,把数据恢复到独立目录后启动,检查账号、应用、历史消息和发送接口。升级前保存数据与旧镜像版本,升级后重新发送消息;Gotify 自身的监控使用另一条通知渠道。