15

2021年更新

今日、私はこれと他の Devops タスクにAnsibleを使用しています。その過程で、Chef、Puppet、Saltstack、および Docker イメージを試してみましたが、小規模なプロジェクトで作業するソロ開発者として、Ansible のような軽量ツールが最適であることがわかりました。

元の質問 (2011 年から)

私は独立した Web 開発者として始めたばかりで、最近、かなり単純なサイトの見積もりが予想よりもかなり高かったため、クライアントを怖がらせました。基本的には、Wordpress.com や Google サイトなどのホスト ソリューションで自分たちで作成できたパンフレットウェアでした。1 つの重要な機能を除いて、Django はぴったりだと思いました。適切な Web 開発の動機になる可能性があります。

大まかな見積もりに記載したタスクを見ると、ほとんどの時間は、このクライアントの Web サイトに固有のものではないことが明らかです。このことから、新しい Django プロジェクトのセットアップとデプロイのプロセスを自動化するスクリプトが必要だと考えるようになりました。

次のように、いくつかのことを手動で行う必要があります。

  • 新しい VPS をセットアップします (または、ほとんどの場合、既存の VPS で仮想ホストを使用します)。

  • DNS 設定を編集して、clientsdomain.com と test.clientsdomain.com が新しい VPS を指すようにします。

  • SSH キーのセットアップ

  • 構成ファイルを編集します。

スクリプトは次のようなことを行います。

  • 新しい VPS に必要なパッケージをいくつかインストールする

  • 新しい VPS にデフォルトの iptables ファイアウォールをインストールする

  • clientdomain.com および test.clientsdomain.com の nginx/apache 構成を追加します。

  • VPS での本番用とテスト用、およびローカル マシンでの開発用に新しいデータベースをセットアップします。

  • 新しい Django プロジェクトを作成し、Bitbucket に配置します。

  • 本番、テスト、開発用に settings.py と local_settings.py をセットアップする

  • 本番データベースとアップロードされたファイル ディレクトリのオフサイト バックアップ ルーチンをセットアップします。

  • 一部のデフォルト アプリを有効にします: flatpages、admin

  • いくつかのボイラープレート テンプレート、いくつかのボイラープレート フラットページ、およびナビゲーション バーを追加します。

  • 960.gs CSS フレームワークを追加する

  • jQueryを追加

  • 検索用に djapian または Haystack (自動更新用の cron ジョブを含む) をセットアップします。

  • 新しい Google アナリティクス プロファイルを設定します。

  • 本番、テスト、および開発の間でデータベースを複製する可能性を含める

  • Pingdom モニタリングのセットアップ

私は過去にRakeFabricを多少似たような (しかし野心的ではない) ものに使用したことがあり、Fabric はこのタスクにもかなり適していると考えていますが、それでもあなたの意見をお待ちしています. 他に調べる必要のあるツールはありますか? Puppetについては良いことを聞いたことがありますが、彼らのサイト ( Enterprise という単語が含まれています) を見るだけで、1 人で操作するにはやり過ぎかもしれないと感じます。

4

4 に答える 4

8

Puppet は大規模な展開で頻繁に使用されるため、小規模なプロジェクトでは難しすぎてやり過ぎに思えるかもしれませんが、SSL 証明書や複数のマシンを扱う必要がないように、クライアント サーバーをセットアップせずにスタンドアロン モードで 1 台のマシンのみを管理するために Puppet を使用します。 、これは物事をよりシンプルに保ちますが、非常に高速な災害復旧を実行したり、多くの労力をかけずにホスティングを移動したりできるという利点があります. 基本的にループ内で ssh を実行するスクリプトであるシステムや、ユーザーをロックインするプラットフォームに依存するシステムではなく、最新の構成管理システムを使用することには、いくつかの大きな理由(冪等性、クロスプラットフォーム サポート、完全なライフサイクル管理、抽象化、簡潔な DSL) があります。

例と VM プレイグラウンドを含むクイック ランプアップについては、ラーニング パペットを確認してください。スタンドアロンで実行される単純な Puppet スクリプト (マニフェスト) を使用して、非常に便利なことを実行し、必要に応じてすべての高度な機能の学習を開始できます。

もう 1 つの良い点は、多くの Puppet マニフェストとモジュールが既に他のユーザーによって作成されており、それらがPuppet Forgeや他の多くの上級 Puppet ユーザーによって共有されていることです。

于 2011-05-04T05:52:49.133 に答える
4

私は最近、これを似たような立場の人として多く考えています。

あなたが言及したことの多くは、新しいプロジェクトごとにgitからプルできるいくつかの優れたスケルトンコードを設定することで役立ちます。

一般的なdjangoプロジェクトのスケルトンコードの良い出発点としてこれを見てください

http://blog.zacharyvoase.com/2010/02/03/django-project-conventions/

私は、すぐに立ち上げて実行できるようにするだけでなく、サーバーのものをプロジェクトのものから分離することもできるようなものをまとめました。これにより、システム/サーバーファイルを含めずにすべてのプロジェクトのバージョン管理が可能になるため、これは非常に重要です。ここにあります(まだ非常に進行中です)。これにより、フォルダーレイアウト、追加のcss、ボイラープレートhtmlのもの、grid / 960のもの、jquery、開発と本番の設定、データベース設定(ほとんど)、デフォルトでインストールされたアプリなどが処理されます。レイアウトの説明は次のとおりです。

Virtualenvを使用すると、Virtualenvwrapperpipを使用して、1つのVPSで複数のプロジェクトを実行するのに最適なスタンドアロンのカプセル化されたPython環境をセットアップできます。Pipを使用すると、特定のvirualenvにパッケージをインストールしたり、後でインポートできるテキストファイルにすべてのパッケージを出力したりできます。これにより、開発から本番へのコードの再デプロイが非常に迅速になります。また、スケルトンコードに一般的な要件ファイルを記述して、通常のすべてのdjangoアプリ(djangoタグ付けなど)を自動的にインストールすることもできます。

データベースに関しては、開発データベースと本番データベースを異なるマシンに配置することをやめました。フィクスチャをインポート/エクスポートするのは非常に困難です。これで、VPS上に個別の本番データベースと開発データベースがあり、開発時に開発データベースにリモートで(ssh経由で)接続します。簡単にコピーできるのもいいですね。

すべての準備が整ったら、ファブリックを使用して開発から本番環境にデプロイできます(まだこれに固執していないため、使いやすさはわかりません)

似たようなものを投稿しようとしていたので、他の人の考えを聞いてとても興味があります!

于 2011-03-30T12:14:37.127 に答える
4

現在、ファブリック+ビルドアウトで行っています。Chef または Puppet の方が適していると言う人もいます (アプリ レベルだけでなく、サーバー レベルの処理を行う場合は、おそらくそうです)。

また、Djangoには、多くの負荷を軽減する専用のホスティング業者がいくつかあります.django -cmsのデモ用に完全に自動化された展開を強化するために使用するhttp://ep.ioが特に好きです。より多くのオーバーヘッドがかかる VPS に限定するのではなく、これらのホスティング プロバイダーにもアクセスできます。

于 2011-03-30T11:04:07.147 に答える
2

Fabricに基づいており、Django(または任意のWSGI)+ Nginx+Gunicornのデプロイに使用されるSilkDeploymentを確認してください。

http://pypi.python.org/pypi/silk-deployment/

于 2011-04-14T04:25:48.010 に答える