コース一覧
サーバー運用実践:セキュリティ・監視・デプロイ
ヘルスチェック

サーバー運用実践:セキュリティ・監視・デプロイ

構築済みのnginxサーバーを、専用ユーザー・SSH鍵認証・ufwで保護し、HTTPS化、ログとヘルスチェックの監視、systemdタイマー、リリース切替、ロールバック、障害復旧までを実践します。本番を想定した安全な公開・監視・デプロイの基本を身につける30レッスンのコースです。

1
セキュリティのきほん
01. 専用ユーザーで動かす16分
02. SSH鍵認証16分
03. sshdを固める16分
04. ufwファイアウォール16分
05. ポートの棚卸し16分
06. ミッション サーバーを固める16分
07. 第4章クイズ12分
2
HTTPS
01. HTTPSとTLSのしくみ16分
02. 自己署名証明書を作る16分
03. nginxにHTTPSを設定16分
04. HTTPからのリダイレクト16分
05. ミッション HTTPS化完了16分
06. 第5章クイズ12分
3
運用と監視
01. tmuxで多重端末16分
02. ログローテーション16分
03. エラーログ監視16分
04. ヘルスチェック16分
05. systemdタイマー16分
06. ミッション 監視の自動化16分
07. 第6章クイズ12分
4
デプロイ
01. デプロイの型16分
02. シンボリックリンク16分
03. deploy.sh v216分
04. ロールバック16分
05. ミッション ワンコマンドデプロイ16分
06. 第7章クイズ12分
5
総合制作
01. ゼロから構築ミッション16分
02. 障害対応演習16分
03. 自由拡張16分
04. 完成と次のステップ16分

ヘルスチェック

「見たら動いていた」では足りない

ここまで、動いているかどうかは自分の目で確かめてきました。curl を打ち、返ってきた文字を読む。人がいる間はこれで十分です。

困るのは、人がいない時間です。夜中に落ちたサーバーは、朝まで誰にも気づかれません。必要なのは、人の代わりに見て、結果を残す仕組みです。

そのために、まず「生きている」を機械が判定できる形に落とします。

終了コードで判定する

シェルのコマンドは、終わるときに 0 から 255 の数を返します。0 が成功、それ以外が失敗です。この数は $? で読めます。

ターミナル

curl -skf https://localhost/ > /dev/null
echo $?
# 0

-f が要点です。この指定を付けると、HTTP のステータスが 400 以上のとき curl 自身が失敗として終わります。付けないと、404 が返ってきても curl としては「取得に成功した」ので 0 を返します。死活判定で -f を落とすのは定番の失敗です。

判定に使う残りの指定は次のとおりです。

  • -s — 進捗表示を出さない
  • -k — 自己署名証明書を受け入れる
  • --max-time 5 — 5秒で見切りをつける

最後の見切りが効きます。応答しないサーバーに繋ぎに行くと、指定しなければ長く待ち続けます。判定が返ってこないのは、失敗が返ってこないのと同じです。

if で分岐を書く

終了コードは if にそのまま渡せます。

ターミナル

if curl -skf --max-time 5 https://localhost/ > /dev/null; then
    echo "OK"
else
    echo "NG"
fi

if は、続くコマンドの終了コードが 0 なら then を、そうでなければ else を実行します。他の言語のように真偽値を比べる必要はありません。コマンドの成否がそのまま条件になるのが、シェルの書き方です。

記録には時刻を必ず付ける

判定結果は追記していきます。

ターミナル

date '+%Y-%m-%d %H:%M:%S'
# 2026-08-08 12:00:00

date は書式を指定できます。%Y が西暦、%m が月、%d が日、%H:%M:%S が時刻です。

書き込みは > ではなく >> を使います。> は毎回上書きなので、直前の1件しか残りません。いつから落ちていたのかは、履歴が無いと分かりません。

ターミナル

echo "$(date '+%Y-%m-%d %H:%M:%S') OK" >> /var/log/healthcheck.log

1章から使ってきた $(...) は、中のコマンドの出力をその場に埋め込む書き方です。

スクリプトにまとめる

Linux 入門で作った backup.sh と同じ形にします。1行目の #!/bin/bash で、この中身を bash に読ませると宣言し、chmod +x で実行できるようにします。

次の章でこれをタイマーに繋ぎます。人が打たなくても、決まった間隔で回り続ける状態が、この2レッスンの行き先です。

手を動かす

サイトが 200 を返すかどうかで OK と NG を判定し、時刻つきで記録するスクリプトを書きます。

ヒント

if はコマンドの終了コードをそのまま条件にします。0 なら then、それ以外なら else です

-f は、400 以上のステータスを curl 自身の失敗として扱う指定です

  • 1. /root/bin/healthcheck.sh を作り、1行目に #!/bin/bash を書く
  • 2. curl -skf --max-time 5 https://localhost/ の成否を if で分岐させる
  • 3. 成功なら OK、失敗なら NG を、date の時刻とあわせて /var/log/healthcheck.log へ >> で追記する
  • 4. chmod +x /root/bin/healthcheck.sh で実行できるようにする
  • 5. 2回実行して、記録が2行に増えることを確かめる

Linux は使うときに起動します(初回は約102MB通信します)

10 項目で採点します