デプロイの型

上書きするデプロイは危ない

ここまで、サイトの中身は /var/www/mysite に直接置いてきました。更新するときは、そこへファイルを上書きすることになります。

このやり方には問題が3つあります。

  • 上書きの最中は、壊れた状態が見えている。半分だけ新しいページが訪問者に届く
  • 戻せない。上書きした瞬間、前の版はどこにも残っていない
  • いま何が公開されているのか分からない。ファイルの日付から推測するしかない

1つ目は数秒の話に見えますが、ファイルが多いほど窓は広がります。3つ目は事故が起きたときに効いてきます。「昨日の版に戻して」と言われて、昨日の版が手元に無い状況ほど困るものはありません。

版を並べて置き、向き先だけ変える

解決の型は決まっています。新しい版は別の場所に丸ごと作り、公開先の向き先を切り替える。この形です。

/var/www/mysite-deploy/ ├── releases/ │ ├── 20260806-120000/ │ ├── 20260807-093000/ │ └── 20260401-101500/ └── current -> releases/20260401-101500

releases の下に、版ごとのディレクトリが日時の名前で並びます。current は「いま公開しているのはこれ」を指す目印です。

この形にすると、さきほどの3つがそのまま解決します。

  • 新しい版は誰にも見えない場所で完成させてから、向き先を変える。切り替えは一瞬で終わる
  • 前の版は消さずに残っている。向き先を戻すだけで復帰できる
  • current が何を指しているかを見れば、公開中の版が分かる

名前を日時にするのは、並べたときに時系列の順になるからです。v1v2 のような通し番号だと、いつの版なのかが分かりません。

中身は rsync で運ぶ

新しい版を作るには、元になるファイルを releases の下へ運びます。

rsync -a --delete /var/www/mysite/ /var/www/mysite-deploy/releases/20260401-101500/

rsync は、Linux 入門でバックアップに使ったものと同じです。

  • -a — 権限や更新日時を保ったまま丸ごと運ぶ
  • --delete — 運び元に無いファイルを、運び先から消す

--delete が要点です。付けないと、前に置いて今回消したはずのファイルが残り続けます。消したはずのページがなぜか見えている、という不具合の原因はたいていこれです。

運び元の末尾の / にも意味があります。付けると「中身を」、付けないと「そのディレクトリごと」運びます。付け忘れると releases/20260401-101500/mysite/ という一段深い形になります。

実際に運ぶのは誰か

4章で deploy ユーザーを作りました。デプロイはこのユーザーの仕事です。root で運ぶと、置かれたファイルの持ち主が root になり、次に deploy から触れなくなります。

置き場所ごと deploy の持ち物にしておくのが、この先で詰まらないための下ごしらえです。

手を動かす

版を並べて置くための場所を作り、いまのサイトを最初の版として置きます。

ヒント

  • 1. mkdir -p /var/www/mysite-deploy/releases で置き場所を作る
  • 2. rsync -a --delete で /var/www/mysite/ の中身を releases/20260401-101500/ へ運ぶ
  • 3. 運び元の末尾に / を付ける。付けないと一段深い形になる
  • 4. chown -R deploy:deploy /var/www/mysite-deploy で持ち主を変える
  • 5. ls -l /var/www/mysite-deploy/releases/ > /root/releases.txt で結果を保存する

9 項目で採点します