web-dev-qa-db-ja.com

デプロイを処理するために、pip、virtualenv、Fabricをどのように使用しますか?

あなたの設定、トリック、そして何よりもワークフローは何ですか?

これらのツールは素晴らしいですが、それらの使用法に関連付けられたベストプラクティスはまだないため、どのツールを使用するのが最も効率的なのかわかりません。

  • pip バンドルを使用しますか、それとも常にダウンロードしますか?
  • Apache/Cherokee/MySQLを手動で設定していますか、それともスクリプトを持っていますか?
  • すべてを virtualenv に入れ、--no-site-packagesを使用しますか?
  • 複数のプロジェクトに1つのvirtualenvを使用していますか?
  • Fabric を何に使用しますか(展開のどの部分をスクリプト化しますか)?
  • Fabricスクリプトをクライアントまたはサーバーに配置しますか?
  • データベースとメディアファイルの移行をどのように処理しますか?
  • SCons などのビルドツールが必要ですか?
  • 展開のステップは何ですか?どのくらいの頻度でそれらのそれぞれを実行しますか?
  • 等.
66
e-satis

「ベストプラクティス」は状況に大きく依存するため、自分のベストプラクティスであると主張することはありません。私は主に小規模なサイトで作業しているため、複数サーバーのデプロイメントやCDNなどはありません。Webfaction共有ホスティングデプロイメントをサポートする必要があります。クライアントによっては、最も安価なホスティングが必要なためです。多くの場合、さまざまな環境でサイトを何度も展開する必要があるため、スクリプトによる繰り返しの展開が重要です。

  • 私はpipバンドルを使用せず、requirements.txtからインストールします。私は自分の chishop サーバーを必要なすべてのsdistsで実行しているので、ビルドプロセスに複数の単一障害点はありません。また、開発マシンでPIP_DOWNLOAD_CACHEを使用して、プロジェクト環境のブートストラップを高速化しています。これは、プロジェクトの要件のほとんどがかなり重複しているためです。
  • Ubuntu VPSでnginx + Apache/mod_wsgiを自動的にセットアップして構成できる Fabric スクリプトを使用するか、同等の Webfaction 共有ホスティングを構成してからプロジェクトをデプロイします。
  • 私はvirtualenvで--no-site-packagesを使用していません。これは、システムレベルでインストールされる動きの遅いコンパイル済みパッケージ(Python Imaging Library、psycopg2)を使用することを好むためです。すべてのvirtualenv内で行うには遅すぎて面倒です。私は一般にそれを汚染しないので、私は汚染されたシステムサイトパッケージで問題を抱えていません。そしていずれの場合でも、virtualenvに何かの異なるバージョンをインストールすることができ、それが優先されます。
  • 各プロジェクトには独自のvirtualenvがあります。特定のプロジェクトのvirtualenvを既知の場所に展開し、そのプロジェクトの要件をそれにインストールすることを自動化するbashスクリプト( virtualenvwrapper ではありませんが、多くの人がそれを使用して愛しています)があります。
  • 裸のUbuntuサーバーVPSまたはWebfaction共有ホスティングアカウントから実行中のWebサイトまでの展開プロセス全体は、Fabricを使用してスクリプト化されます。
  • ファブリックスクリプトはプロジェクトソースツリーの一部であり、ローカルの開発チェックアウトから実行します。
  • SCons(私が知っている)は必要ありません。

配備

現時点では、新しい展開は次の手順に分かれています。

  • fab staging bootstrap(サーバーのセットアップと初期コードの展開)
  • fab staging enable(このサイトのApache/nginx構成を有効にします)
  • fab staging reload_server(Apache/nginx設定をリロードします)。

もちろん、これらを単一のコマンドラインに結合することもできますfab staging bootstrap enable reload_server

これらの手順が完了したら、新しいコードでデプロイメントを更新するだけでfab staging deploy

更新をロールバックする必要がある場合は、fab staging rollback。ロールバックで特に不思議なことはありません。コードを最後にデプロイされたバージョンにロールバックし、データベースを以前の状態に移行します(これには、DBのデプロイ後の移行状態に関するメタデータをテキストファイルに記録する必要があります)。

私はこの回答で説明されているFabricスクリプトを数年間使用していないため、まったく維持されず、その品質に対する責任は負いません:-)しかし、それらは https:// bitbucket .org/carljm/Django-project-template -fabfile.pyはレポルート、およびdeploy/サブディレクトリ。

79
Carl Meyer

私はファブリックを使用してコードをビルドおよびデプロイし、システムがすでにセットアップされていると想定しています。私は puppet のようなツールがApacheやmysqlのようなもののインストールを自動化するのにより適切であると思いますが、ワークフローにはまだ含まれていません。

また、私は通常プロジェクトごとに異なるvirtualenvを持っています。これらは、pythonの「基本」インストールから作成されます。ここで-カールが指摘したように、グローバルpythonライブラリを残すことができます。

したがって、ワークフローに関しては次のようになります。

  1. 必要なサービス(Webサーバー、データベース、SSHサーバーなど)をインストールするための人形
  2. 必要なユーザーと基本フォルダーを設定するパペット
  3. アプリケーションのvirtualenvを作成するファブリック
  4. requirements.txtからpipインストールするファブリック
  5. アプリをデプロイするためのファブリック
  6. 構成ファイルをデプロイするファブリック(Webサーバーなど)
9
Rodrigue