シンボリックリンク
中身ではなく、道しるべを動かす
前のレッスンで版を並べました。次は、nginx にどの版を見せるかです。
版のディレクトリ名を root に直接書くと、更新のたびに設定を書き換えて reload することになります。それでは切り替えが重く、書き間違いも混じります。
代わりに使うのがシンボリックリンクです。中身を持たず、別の場所を指すだけの小さな道しるべです。
ln -s /var/www/mysite-deploy/releases/20260401-101500 /var/www/mysite-deploy/currentln -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 にはリンクを見せる
設定側は、版ではなくリンクを指します。
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 nginxnginx は性能のために、開いたファイルの情報をしばらく覚えています。張り替えた直後は古い版を返し続けることがあるので、reload で確実に読み直させます。3章で見たとおり、reload は接続を切らずに設定を読み直す指示です。
手を動かす
current というリンクを作り、nginx にそれを見せます。新しい版を作って張り替え、公開される中身が変わることを確かめます。