2

Web アプリケーションを効果的に開発してテストし、運用サーバーで起動する方法を決定する際に問題があります。私はウェブ開発に非常に慣れておらず、一般的に大規模なプロジェクトを開発しているので、ご容赦ください。

Debian 7 32 ビットを実行している VPS で Web アプリケーションをホストします。この VPS では、PHP 5.4.16 と dotdeb の nginx を使用しています。私がやりたいことは、運用サーバーでの起動が簡単になるように、まったく同じパッケージと構成を使用するローカル マシンを取得することです。私はかつて、開発マシンでは機能するがプロダクションでは機能しないさまざまな設定を調整するという悪夢に見舞われました。たぶん、このアプローチは正しいことではありません。開発およびテスト用に本番サーバーの一部を割り当てる必要がありますか? しかし、私は常にsshする必要があります。

もう 1 つの問題は、ローカル マシンで同じパッケージを取得できたとしても、将来、別のバージョンの PHP を使用する必要がある場合はどうすればよいかということです。インストールされている他のパッケージと互換性がないパッケージをインストールする必要がある場合はどうすればよいですか?

プロジェクトごとに仮想マシンを維持する唯一のソリューションのようです。これはまともな解決策ですか?ローカル開発マシンで効率的に開発/テストするにはどうすればよいですか?

4

4 に答える 4

1

これは、いくつかの要因に大きく依存します。

  1. ホスティング環境の OS についてどのくらい意見を持っていますか
  2. 上記のホスティング環境へのアクセス権
  3. プロジェクトで使用したいテクノロジー (初心者向けの PHP を想定)

ホスティングしているOSを決定でき、そのホスティング環境に完全にアクセスできると仮定すると(まだホストを決定している場合は両方をお勧めします)、実際には3が決定要因です.

NginXは、プロキシとして非常に強力な機能を備えているという理由だけで、Web 開発に非常に適しています。同じサーバー上で必要なほとんどすべてを実行してから、プロキシするか、 NginX を使用して新しい仮想ホストに提示することができます。(はい、 Apacheにもこれらの機能があることは知っていますが、NginX はほぼすべての点で Apache より優れているようです)。これは、静的コンテンツと動的コンテンツの両方のスタンドアロン サーバーとしての能力を超えています。PHP と NginX にまだ慣れていない場合は、このリンクを確認してください。

1 つのフロントエンド (この場合は NginX) を使用してすべてのプロジェクトをホスティング プロバイダーに提示する場合、ホスティングの OS (バージョンを含む) に一致する仮想マシン (1 つを使用する必要があります)プロバイダーは完璧な開発環境です。実用的な観点からは、どの VM ソリューションを使用しても問題はありません。無料のものから銀行破りのものまで多数あります。法案に合ったものを選んでください。

また、バージョン管理システムのセットアップも検討します。( Gitは素晴らしいです。Mercurialも素晴らしいです)。これらのツールは使い始めるのが非常に簡単で、パワーツールを使用する準備ができたら非常に強力です

また、開発用仮想マシンと Web ホストの間でファイルを転送する方法も検討する必要があります。最近ではSSHが一般的な方法ですが、 BitTorrentSyncなどを使用してコード ベースを維持している人たちの話を聞いたことがあります。個人的には、これは少し危険だと思います (新しい技術、予期しない動作など)。SSH を使用する場合は、Passwordless loginsを調べてください。セットアップはそれほど難しくありません。

PHP のバージョンに関しては、互換性のないパッケージ要件に遭遇した場合最も簡単でクリーンな解決策は、別のマシンを起動することです。それを回避する方法はあります(Google に任せます)。物が分かれた。正直、あまり出てこないはずです。

それ以外は、Web 開発を楽しんでいただければ幸いです。他の言語にも挑戦することを恐れないでください。Node.jsPythonGo、およびその他の多くは、サーバー側で遊ぶのがとても楽しく、Jquery、Angular.js およびその他の多くは、クライアント側で素晴らしいものです。

ハッピーコーディング!

于 2013-06-11T12:53:08.110 に答える
1

実際には、開発、テスト、本番環境への展開、本番環境の監視など、対処すべきさまざまな問題がいくつかあります。

通常、データを使用して本番環境から分離された機器で開発を行いたいと考えています。環境は本番環境に似ていますが、テスト ハーネス、デバッガー、ロガー、自動化された単体テストなど、開発を効率的かつ効果的に行うために必要な優れた機能がすべて備わっています。など。ほとんどの場合、本番データは保護する必要があるため、本番データではなく、本番データと同様のデータが必要です。また、独自の製造データを持つ開発により、設計者テストの一部として特定のシナリオのテストが可能になります。

システムのソース コードと機能に変更が加えられたときに、開発者が追加する標準のテスト データ セットを用意することをお勧めします。また、テスト データの追加/変更は、なんらかの考慮が必要な何らかの形式的または準形式的なプロセスを必要とする変更であり、そうしないと混乱してしまいます。エントロピーは、混沌と混乱に向かう傾向のある物理システムと同様に、ソフトウェア システムにも当てはまります。

テスト環境は、開発環境から分離し、本番環境にできるだけ近づける必要があります。おそらく、2 つのバージョンのテスト環境が必要です。1 つは追加のデータ キャプチャ機能をテストするためのもので、データをキャプチャするための最初のパスの検証に使用されます。開発では、見つかった問題を修正する必要があります。効率の問題についてのアイデアを得るために。

開発者が開発ツールをテスト環境に置くことは許可されるべきではありません。開発環境が提供するコンポーネントが欠落しているために、何かが本番環境に導入されてシステムがクラッシュするケースを見てきました。テスト環境でこの種の問題をキャッチする必要があります。

本番環境で問題が発生した場合に変更をロールバックできるように、新しいシステム バージョンの展開を計画する必要があります。

主なことは、本番サーバーの内容を正確に把握できるように、本番環境を開発からできるだけ分離することです。また、実稼働サーバーの内容を変更すると、何が変更され、その理由と、変更が実稼働環境に与える影響について、かなり良いアイデアが得られます。

これは、Mercurial や Subversion などのリポジトリの使用が品質管理の役割を担う場所です。リポジトリにあるものは、完全なパッケージとしてテストに入るという考えです。特定のパッケージのテストが完了し、品質が良好になると、パッケージは生産に入ります。

これは、本番環境のゴールド バージョンが必要な場所でもあります。安定性を確保するために、運用環境を制御された整然とした方法で変更する必要があります。以前は動作していたアプリケーションと機能がクラッシュする原因となる更新が行われるのを誰もが見たことがあるため、その更新プロセスを管理したいと考えています。

したがって、実稼働環境のゴールド バージョン (何らかのイメージ) がある場合は、それを使用して、追加のサーバー、テスト環境、デザイナー テスト環境を複製できます。本番環境の追加のバリエーションには、必要な本番環境への追加を含む独自のパッケージがあります。たとえば、開発環境は、本番環境とそのツール、デザイナー テスト データなどを含む開発環境です。

これは、仮想マシンが非常に便利な場所です。

これは面倒で非効率的に聞こえますが、実際にそうです。しかし、人は間違いを犯します。この種のプロセスは、間違いが本番環境に移行する可能性を減らすのに役立ちます。

于 2013-06-11T13:59:39.193 に答える
1

各言語には、展開用の独自のツールがあります。特にこれは、使用している環境によって異なります。中規模環境 (約 100 サーバー) の Web プロジェクト/サービスの例を挙げることができます。私は Python 開発者です。私のチームでは次の種類のツールが使用されていました。

  • バージョン管理システム ( gitmercurialsvn) [本番サーバーはリポジトリへの読み取り専用アクセス権を持っていた]
  • 仮想環境ツール (python の場合virtualenvは 、ruby の場合はrvmおよびbundler、python/ruby ライブラリを分離し、異なるバージョンの python/ruby 自体を使用できます)
  • 構成管理ツール ( 、、データベース、フレームワーク自動セットアップ、ファイアウォール、ユーザー管理、ssh キー管理puppetなど、必要なすべてのデーモンをセットアップできる、広く使用されているツールです)nginxuwsgimysqldjangoiptables
  • Makefile (必要なアクションを起動するため)

したがって、基本的にこれら 3 つのツールがあれば、本番環境と同じテスト サーバーを数分でセットアップできます。さらに進んで、API を備えたサーバー上にハイパーバイザーがあったため、新しい開発者向けの devbox を数分で作成できました。また、多くの請負業者があり、Amazon インスタンスでも同じことが実現できます。もちろん、puppet でスクリプトを作成して環境を準備する必要があります (または、環境がそれほど大きくない場合は bash で行うこともできます)、多くの構成などを行います。

このプロセスは - Deploymentと呼ばれます。

たとえば、テスト サーバーから本番サーバーに変更をデプロイするときに行ったことは、本番サーバーmake deploy productionからコマンドを起動し、スクリプトが git からすべてのコードをチェックアウトし、コンパイルされた Python ファイルを消去し、nginx サーバーを再起動し、キャッシュを消去し、その他多くのことを行いました。変更を適用するために不可欠な操作。

デプロイメントは主にチーム リーダーが行うスキルと見なされるため、他の開発者よりもサーバー環境のセットアップについて心配する必要があります。おそらく、展開に関するポリシーがあるでしょう。変更を適用するときは、特定の曜日にすることができます。これについては、facebook company からの素晴らしいビデオがあります: video about deployment in facebook

使用する私のアドバイスは、これらすべての回答からすべてのキーワードを検索することです。展開には、信頼性の高い環境をセットアップするための多くの時間と労力が必要です。これまでの生産で発生したすべての問題からの貴重な経験です。IT のトレンド ソリューションに関するニュースを常に読んでいます。たとえば、最近、linkedin.com が node.js に移行しました (バックエンド全体だと思います..) ソースは次のとおりです: Hacker newsRedditHigh Scalability

Ps in PHP で広く知られている展開ツールは capistrano ですが、それでも私は puppet と makefile を使用します。それはただより速く、より透過的です。

于 2013-06-11T13:13:24.650 に答える