展開しているサイトの種類について、より多くの情報が必要になると思います。サイト間の関係に基づいて、プログラムと「法的」(ビジネス関係など)の両方に違いがあります。
- サイトが異なる人によって「所有」されている場合、「サイト」ごとにシステム アカウントを持つと便利です。少数のクライアントを持つ Web デザイナーまたはプログラマーの場合は、分離することでメリットが得られる可能性があります。
- フォーラム サイトやブログ サイトなど、サイトが関連している場合は、(当社のような) 単一の展開システムからメリットが得られる可能性があります。
- ライブラリの場合、信頼できるソース (pypy、github など) でホストされている場合は、そこに残してそこからデプロイしても問題ないでしょう。稼働中または停止中の危険なホスト上にある場合は、コピーを取得して配置します。 git リポジトリの / thirdparty フォルダーにあります。
FABRIC
ファブリックは素晴らしいです - そのセットアップと構成が適切であれば:
- ここには、誰もサーバーにログオンする必要がないことを意味するポリシーがあります (これはほとんど真実です - 生の nginx ログ ファイルを見たい場合がありますが、それはまれです)。
- 個々の機能ブロック (restart_nginx、restart_uwsgi など) があるようにファブリックを構成しましたが、
- すべての小さなブロックを正しい順序で実行する高レベルの「ビジネス」関数 - すべてのサーバーを更新するには、単に「fab -i secretkey live deploy」と入力します - live は live サーバーの設定を設定し、ldeploy をデプロイします ( .ssh キーが正しく設定されている場合、-i はオプションです) 。
- ライブ設定が使用されている場合、デプロイを実行する前に「よろしいですか」と尋ねる制御フラグもあります。
コードのレイアウト
したがって、コード ベースのレイアウトは次のようになります。
/ <-- folder containing readme file etc
/bin/ <-- folder containing nginx & uwsgi binaries (!)
/config/ <-- folder containing nginx config and pip list but also things like pep8 and pylint configs
/fabric/ <-- folder containing fabric deployment
/logs/ <-- holding folder that nginx logs get written into (but not committed)
/src/ <-- actual source is in here!
/thirdparty/ <-- third party libs that we didn't trust the hosting of for pip
バイナリをリポジトリにロードするため、おそらく物議を醸す可能性がありますが、ボックスでnginxをアップグレードし、ロールバックしたい場合は、gitを操作するだけです. どのビルドに対して何が機能するかを知っています。
デプロイの仕組み:
すべてのソース コードは、プライベートな bitbucket リポジトリでホストされています (多くのリポジトリと少数のユーザーがいます。これが、github よりも bitbucket の方が適している理由です)。bitbucket 用の独自の ssh キーを持つ「サーバー」のユーザー アカウントがあります。
Deploy in fabric は、各サーバーで次のことを実行します。
- irc ボットが irc チャネルで開始をアナウンス
- gitプル
- pip deploy (リポジトリの pip リストから)
- syncdb
- 南に移住
- uwsgi再起動
- セロリの再起動
- irc ボットが irc チャネルに完了をアナウンスする
- 可用性テストを開始する
- 可用性テストの結果を発表 (およびレポートをプライベート ペーストビンに投稿)
「可用性テスト」 (ライブ サーバーに対する単体テストと考えてください) - 「テスト」アカウントのすべての Web ページと API をヒットし、ライブ統計に影響を与えずに正常なデータが返されることを確認します。
また、バックアップ git サービスも用意されているため、bitbucket がダウンした場合は適切にフォールオーバーします。また、「デプロイ」ブランチへのコミット時にデプロイを実行させるジェンキンス統合もあります。
怖いビット
クラウド コンピューティングを使用して高いスループットを期待しているため、ボックスは自動的に生成されます。git リポジトリなどのコピーを含むデフォルトのイメージがありますが、常に古くなっているため、それ自体に展開を行う起動スクリプトがあります。つまり、クラスターに追加された新しいボックスは自動的に最新の状態になります。