元の回答
扱っているサービスがどこまでの安全性を求めるかと、
どれだけデプロイにコストをかけられるかによって方法が変わってきます
後述のリスクについて特に問題ない場合は
自分のプロジェクトにとってやりやすい方法で大丈夫です
(ポートフォリオサイト等であれば git pull
で十分だと思います)
後述のリスクが気になる場合は
Capistrano
や Ansistrano
というツールを使うと
ベストプラクティスに則ったデプロイ処理を行ってくれます
または、ローリングデプロイ
してくれるサービスを本番環境として使うか、
自分でローリングデプロイ
を行う、または自動化します
参考: ローリングデプロイの仕組み | デプロイポリシーと設定 - AWS Elastic Beanstalk
稼働中のサービスを pull した場合のリスク
静的なコンテンツを返すサイトだったり、
お金を扱わないサイトではさほど問題になりませんが、
動いている Web サービスのコードをいきなり pull で更新すると
実行中の処理がどのような動作になるかは保証がありません
そのため、別ディレクトリーに clone した後、
シンボリックリンクで参照先を切り替える、など
なるべく影響が発生しにくい方法がとられることがあります
Capistrano
や Ansistrano
というツールを使うと
上記の処理を自動的に処理してくれます
ローリングデプロイ
例えば、本番環境を複数台用意して
本番環境をロードバランサー
から 1 台ずつ切り離してデプロイすれば
上記の心配はなくなります
使っているクラウドによっては、
このようなデプロイのワークフローついてもインフラ側で考慮してくれて
こちらで考える必要がない場合があります
参考: デプロイ / リリース 手法 まとめ - galife
追記
「そのため、別ディレクトリーに clone した後、
シンボリックリンクで参照先を切り替える、など」
こちら「シンボリックリンクで参照先を切り替える」とはどういう事なのでしょうか...?
もう少し詳細に説明すると、次のような手順です
事前準備:
1
プロジェクトを、あるパスに clone します
2
Web サーバーのドキュメントルートに指定するディレクトリーを
シンボリックリンクで作成し、宛先を手順 1 で clone したパスに向けておきます
デプロイ時
1
更に別のパスにプロジェクトを clone します
2
手順 1 で clone したパスにシンボリックリンクを切り替えます
3
切り戻しの必要がなければ、以前に clone したパスに存在するプロジェクトを削除します
さらなる詳細は Ansistrano のワークフローの説明が参考になります:
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/16 12:08
2020/09/16 12:33
2020/09/16 15:24
2020/09/17 02:52
2020/09/17 03:11
2020/09/17 11:36 編集
2020/09/17 13:03
2020/09/18 11:18 編集