メインコンテンツへスキップ

🔔 BookStackバックアップ失敗時にSlackへ通知する設定手順(Incoming Webhook)

📝 はじめに

本記事では、BookStackのバックアップ処理でエラーが発生した場合に、Slackへ自動通知を送る仕組みを構築する手順をまとめる。 cronで回るバックアップは「静かに失敗する」ことが最大のリスクになるため、失敗時だけ確実に人間へ届く通知経路を用意するのが目的である。

本構成では、SlackのIncoming Webhook(無料プラン可) を利用し、既存のバックアップスクリプトに最小限の変更を加える。


🚦 全体構成の概要

  • Slack:Incoming Webhook を1つ作成
  • サーバー:Webhook URL を root のみ読めるファイルに保存
  • スクリプト:エラー発生時に webhook へ POST
  • cron:従来どおり(変更不要)

Slack Webhookは無料プランで十分。
バックアップ失敗通知(1日1回以下)であれば、制限に引っかかることはない。


🧩 Slack側の設定(Incoming Webhook作成)

① ワークスペースを作成

Slack公式サイトからワークスペースを作成する(無料プランでOK)。

② Incoming Webhook を有効化

  1. Slackの「App管理」画面を開く
  2. 「Incoming Webhooks」を検索
  3. ワークスペースに追加
  4. 投稿先チャンネルを指定(例:#alerts
  5. Webhook URL を発行

取得できる URL の例:

https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX

Webhook URLはパスワードと同等。
GitHub・スクショ・記事に絶対に載せないこと。


🔐 サーバー側:Webhook URLの安全な保管

① 設定ファイルを作成(root専用)

sudo mkdir -p /root/.notify
sudo vi /root/.notify/slack_env

中身:

SLACK_WEBHOOK_URL='https://hooks.slack.com/services/XXX/YYY/ZZZ'

② 権限を厳格に設定

sudo chmod 600 /root/.notify/slack_env

一般ユーザーが読める場所に置かない。
/home 以下や /etc 配下は避け、root専用にする。


🧪 動作確認(単体テスト)

以下をrootで実行:

sudo -i
set -a
. /root/.notify/slack_env
set +a

curl -X POST "$SLACK_WEBHOOK_URL" \
  -H 'Content-Type: application/json' \
  -d '{"text":"Slack通知テスト:BookStackバックアップ"}'

Slackにメッセージが届けばOK。

この段階で届けば、Slack側の設定は完了。


🧠 バックアップスクリプトへの組み込み

以下は bookstack_backup_to_s3.sh への 最小差分追加

① 冒頭にSlack設定を読み込む

set -a
. /root/.notify/slack_env
set +a

② 通知関数を定義

notify_slack() {
  local msg="$1"
  [ -n "${SLACK_WEBHOOK_URL:-}" ] || return 0

  curl -sS -X POST "$SLACK_WEBHOOK_URL" \
    -H 'Content-Type: application/json' \
    --data "{\"text\": \"${msg//\"/\\\"}\"}" >/dev/null || true
}

③ エラー時に自動通知する(trap)

on_error() {
  local ec="$?"
  notify_slack "❌ BookStack backup failed (exit=${ec}) on $(hostname) at $(date -Is)"
  exit "$ec"
}
trap on_error ERR

set -e と trap ERR の組み合わせにより、
どこで失敗しても必ず1回だけ通知される。


⏰ cronとの関係

cron側の設定は変更不要。

例:

40 3 * * * /usr/local/bin/bookstack_backup_to_s3.sh
  • 成功時:何も通知されない
  • 失敗時:Slackに即通知

「静かに成功、うるさく失敗」という運用が実現できる。


⚠️ よくある注意点

通知が来ない=成功とは限らない。
初回は必ず意図的に失敗させて通知が飛ぶことを確認する。

Webhook URLをスクリプトに直書きしない。
事故時に漏洩範囲が広がる。


🎯 まとめ

  • Slack Incoming Webhook は 無料・安定・簡単
  • root専用ファイル+環境変数で安全に管理
  • trap ERR で 失敗時のみ確実に通知
  • BookStackバックアップ運用として十分に実戦的

この構成があれば、「気づいたらバックアップが数週間止まっていた」事故は防げる