🔔 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 を有効化
- Slackの「App管理」画面を開く
- 「Incoming Webhooks」を検索
- ワークスペースに追加
- 投稿先チャンネルを指定(例:
#alerts) - 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バックアップ運用として十分に実戦的
この構成があれば、「気づいたらバックアップが数週間止まっていた」事故は防げる。