🌍

【Docker+ntfy】ntfyをDockerでどっかーんするだけ

に公開

最近、XよりMisskeyの方が利用頻度が増えてきたので手持ちのデバイス全部に通知が来るようにしたくなりました。
「WebPushでええやん」ってなりそうですが、iOS26(dev beta)だと"ホーム画面に追加"の項目がバグり散らかしててホーム画面に追加できない -> 通知を登録できないという悲しいことになっちゃったのでできないわけです。(というか、Appleが厳しいのもあるのか以前使ったときも通知が来ない事が多かったのですが)

てなわけで、Misskeyのwebhookをcf workersに送りつけて、それをntfyで全デバイスに送りつける構成を作ろうと思います。が、今回はntfy構築の部分しか話しません。(まだ作ってないし)
cf workersでwebhookごにょごにょする話はまた今度します。

Dockerインストール

前もやりましたが、一応。

https://zenn.dev/r64/articles/eace9e09168474

パッケージ削除(Ubuntu 24.04 minimal installであれば要らないと思います)

for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt remove $pkg; done

インストール

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

コピペで終わります。

compose.ymlを書く

docsを参考にかきかき

https://docs.ntfy.sh/install/#docker

compose.yml
services:
  ntfy:
    image: binwiederhier/ntfy
    container_name: ntfy
    command:
      - serve
    environment:
      - TZ=JST    # optional: set desired timezone
      - NTFY_ATTACHMENT_CACHE_DIR=/var/lib/ntfy/attachments
    volumes:
      - /var/cache/ntfy:/var/cache/ntfy
      - /etc/ntfy:/etc/ntfy
    ports:
      - 10000:80
    healthcheck: # optional: remember to adapt the host:port to your environment
        test: ["CMD-SHELL", "wget -q --tries=1 http://localhost:80/v1/health -O - | grep -Eo '\"healthy\"\\s*:\\s*true' || exit 1"]
        interval: 60s
        timeout: 10s
        retries: 3
        start_period: 40s
    restart: unless-stopped

私はnginxの背後にntfyを置くのでホスト側のポートを10000にしていますが、そのまま公開しちゃいたい場合は

compose.yml
- - 10000:80
+ - 80:80

にしてください。

sudo docker compose upで念の為起動を確認。動けばokです。

細かい設定

ここにserver.ymlのexampleがあるので、/etc/ntfy/server.ymlにコピペしちゃいます。
あとはdocsを見ながらいじいじ。

https://docs.ntfy.sh/config/#example-config

私の場合は、とりあえず認証周りをいじくりました。L94付近にあるはずです。

server.yml
auth-file: "/var/lib/ntfy/user.db"
auth-default-access: "deny"

リバプロを使っている場合はこれも(L112付近)

server.yml
behind-proxy: true
proxy-forwarded-header: "X-Forwarded-For"

iOS版の場合、バックグラウンド処理が行えないのでプッシュ通知のためにntfy.shを経由することになります。使う場合はL238付近を編集します。

server.yml
iOS users:
    upstream-base-url: "https://ntfy.sh"

base-urlも念の為。(L14付近)

server.yml
base-url: "https://example.ruka.local"

その他は各自好きなようにいじってください。

ユーザー追加

sudo docker exec -it ntfy ntfy user add --role=admin r64

あとは設定するパスワードを尋ねられるのでそれに従うだけです。

Done 🎉

おわり!!!!トピック設定とかはdocs読んでください(投げやり)

Discussion