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

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

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

シンボリックリンク

中身ではなく、道しるべを動かす

前のレッスンで版を並べました。次は、nginx にどの版を見せるかです。

版のディレクトリ名を root に直接書くと、更新のたびに設定を書き換えて reload することになります。それでは切り替えが重く、書き間違いも混じります。

代わりに使うのがシンボリックリンクです。中身を持たず、別の場所を指すだけの小さな道しるべです。

ターミナル

ln -s /var/www/mysite-deploy/releases/20260401-101500 /var/www/mysite-deploy/current

ln -s は、指す先を先に、道しるべの名前を後に書きます。この順番はよく逆に覚えます。cp や mv と同じで「元、先」の順だと考えると間違えません。

作ったものは ls -l で確かめられます。

ターミナル

ls -l /var/www/mysite-deploy/current
# lrwxrwxrwx 1 deploy deploy 47 Aug  8 10:15 current -> /var/www/mysite-deploy/releases/20260401-101500

先頭の l がリンクである印で、-> の右が指している先です。

nginx にはリンクを見せる

設定側は、版ではなくリンクを指します。

nginx

root /var/www/mysite-deploy/current;

こう書いておけば、リンクの向き先を変えるだけで公開される中身が変わります。設定ファイルは二度と触りません。

3章で sites-enabled の中身がリンクだったのを思い出してください。あれも同じ考え方です。設定の実体は1か所に置き、有効かどうかはリンクの有無で表す。Linux はこの形をあちこちで使います。

張り替えは -f を付ける

既にある current を別の版に向け直すとき、そのまま ln -s を打つと失敗します。

ターミナル

ln -s .../releases/20260402-090000 /var/www/mysite-deploy/current
# ln: failed to create symbolic link 'current': File exists

上書きするには -f を足します。まとめて -sfn と書くのが定番です。

ターミナル

ln -sfn /var/www/mysite-deploy/releases/20260402-090000 /var/www/mysite-deploy/current

-n が効きます。これが無いと、current が既にディレクトリを指すリンクである場合、その中に新しいリンクが作られます。current/20260402-090000 という意図しないものができて、公開中の版は変わりません。動いてはいるので気づきにくい失敗です。

切り替えたら reload する

リンクを張り替えたあと、nginx には reload をかけます。

ターミナル

systemctl reload nginx

nginx は性能のために、開いたファイルの情報をしばらく覚えています。張り替えた直後は古い版を返し続けることがあるので、reload で確実に読み直させます。3章で見たとおり、reload は接続を切らずに設定を読み直す指示です。

手を動かす

current というリンクを作り、nginx にそれを見せます。新しい版を作って張り替え、公開される中身が変わることを確かめます。

ヒント

ln -s は、指す先が先、道しるべの名前が後です

-n を付け忘れると、リンクの中に新しいリンクが作られて公開中の版は変わりません

  • 1. ln -s で current を作り、releases/20260401-101500 を指させる
  • 2. mysite.conf の root を /var/www/mysite-deploy/current に変える
  • 3. nginx -t のあと systemctl reload nginx で反映する
  • 4. rsync -a --delete で releases/20260402-090000 を作る
  • 5. 新しい版の index.html の見出しを 三宅 あかり 制作実績 に書き換える
  • 6. ln -sfn で current を新しい版に張り替え、reload して確かめる

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

10 項目で採点します