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

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

構築済みの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分

ロールバック

直すより、戻すほうが速い

出したばかりの版で不具合が見つかったとします。原因を調べて直して出し直すには、早くても数十分かかります。その間、訪問者には壊れたページが見え続けます。

やるべきことは逆です。まず前の版に戻して、原因はそれから調べる。前のレッスンまでで、戻すのに必要なものはもう揃っています。古い版は消さずに残っていて、公開先はリンク1本です。

ターミナル

ln -sfn /var/www/mysite-deploy/releases/20260401-101500 /var/www/mysite-deploy/current
systemctl reload nginx

これだけです。ファイルを運び直す必要がないので、数秒で終わります。

「1つ前」を自分で探させる

手で打つなら、戻り先の名前を調べる必要があります。慌てているときに ls を見て名前を写すのは、打ち間違いの元です。

版の名前は日時なので、並べ替えれば時系列になります。

ターミナル

ls -1 /var/www/mysite-deploy/releases | sort

ls -1 は1行に1つずつ出す指定です。sort で並べれば、下にあるものほど新しい版です。

1つ前を取り出すには、末尾から2つを取って先頭を見ます。

ターミナル

PREV=$(ls -1 /var/www/mysite-deploy/releases | sort | tail -2 | head -1)

tail -2 で最後の2つ、head -1 でそのうちの先頭。つまり最新の1つ前です。日時の名前にしておいた効き目が、ここで出ます。

戻れないときは止める

版が1つしか無いときに戻ろうとすると、PREV には最新の版そのものが入ります。戻ったつもりで何も変わらない、という最悪の結果になります。

ターミナル

COUNT=$(ls -1 /var/www/mysite-deploy/releases | wc -l)
if [ "${COUNT}" -lt 2 ]; then
    echo "戻れる版がありません"
    exit 1
fi

exit 1 は、失敗として終わるという指定です。前のレッスンで見た終了コードと同じ話で、0 以外が失敗を表します。戻れないことを黙って隠さないのが大事です。

[ "${COUNT}" -lt 2 ] の -lt は「より小さい」という比較です。数を比べるときは < ではなくこの書き方を使います。

戻したことを記録する

戻す操作は、あとで必ず振り返ることになります。いつ、どの版から、どの版へ戻したか。記録が無いと、翌日に自分でも思い出せません。

ターミナル

echo "$(date '+%Y-%m-%d %H:%M:%S') rollback ${CURRENT} -> ${PREV}" >> /var/log/deploy.log

6章のヘルスチェックと同じ形です。自動で動くものほど、何をしたかを残す。この習慣が、運用の質をそのまま決めます。

手を動かす

最新の1つ前の版を自分で探して戻すスクリプトを書き、実際に戻ることを確かめます。

ヒント

版の名前を日時にしておいたおかげで、並べ替えるだけで時系列になります

数を比べるときは < ではなく -lt を使います

  • 1. /root/bin/rollback.sh を書く。1行目は #!/bin/bash、その下に set -eu を置く
  • 2. 版の数を数え、2 未満なら echo で伝えて exit 1 で終わる
  • 3. ls -1 ... | sort | tail -2 | head -1 で1つ前の版を取り出す
  • 4. ln -sfn で current をそこへ張り替え、systemctl reload nginx で反映する
  • 5. 戻した記録を date とあわせて /var/log/deploy.log へ >> で追記する
  • 6. chmod +x を付けて実行し、公開される中身が前の版に戻ることを確かめる

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

12 項目で採点します