Azure Cloud ServicesでRuby、Python、Node.js、Perl、およびJava Webアプリケーションを公開します

画像 この記事では、Azure Cloud Servicesクラウド内のさまざまなテクノロジーを使用して作成されたWebアプリケーションをデプロイする方法について説明します。 つまり、Ruby、Python、Node.js、Perl、およびいくつかの注意事項がありますが、JavaとRailo(ColdFusion)もあります。 Rubyアプリケーションの例として、Ruby on Railsで実行されるRedmineを使用し、PythonでDjangoで実行されるLightning Fast Shopを使用し、Node.jsでexpress.jsを使用する小さなプロジェクトを使用し、Perlで空のMojoliciousプロジェクトを設定します。 この記事の目的は、これらすべてのWebテクノロジーのツアーではなく、Azureクラウドに発行する便利で普遍的な方法を示すことだけです。 そのため、Ruby、Python、またはPerlコードは含まれません。 しかし、多くのスクリーンショット、シェルスクリプト、およびアプリケーションのパッケージ化と展開の手順があります。





そのため、Azure Cloud Servicesとは何で、何を使って何を食べますか:



残念ながら、Web上の豊富なマーケティング資料では、このトピックが十分に明らかにされておらず、多くのノイズが発生しています。 そして、この問題を単純なWeb開発者が理解できる人間の言語で議論しようとします。 まず、Azure Cloud Servicesの使用方法を学びたい開発者にとって理解することが重要なのは、このサービスが実際には仮想マシンファクトリであることです。 これを実装する方法は技術的に重要ではありませんが、私たちが興味を持っている主なことは、Azureインフラストラクチャが、Webサイトまたは他のアプリケーションを実行できる一定量のリソースを備えた多数の同一の仮想マシンを迅速かつ自動的に提供できることです。



Azureシステムでは、これらすべての仮想マシンはほぼ同じであり、Windows Server 2008、2008 R2、および2012になります。明らかに、これは、このような仮想マシンの作成はシステムにとって非常に安価であり、これらのマシン自体は多くのリソースを消費せず、同じ仮想マシンは管理が容易であるためです 私は個人的にAzure Cloud Servicesの内部構造を知りませんが、これは単なる仮定です。 VPSホスティングとの主な違いは、これらの仮想マシンを構成する必要がないことです。 Azureシステムは仮想マシン自体をデプロイし、必要に応じてアプリケーションをインストールします。 これにより、必要に応じて、自動的に、参加せずに仮想マシンを動的に作成および削除できます。 このテクノロジを実装するには、システムがインストール方法を認識できるように、アプリケーションを特別に作成してパッケージ化する必要があります。



なぜ私たちにとって利益があるのか​​:まず第一に、それはリソースを節約し、それゆえ私たちのお金を節約しています(もちろん、サービスの価格に依存します)。 サイトが常に最大量のリソースを必要とするわけではありません。 VPSまたはDedicated hostingを購入する場合、必要な最大構成を採用する必要があります。AzureCloud Servicesの場合、現時点で必要な仮想マシンに対してのみ支払うことができます。 リソースの負荷が増加すると、Azureシステムはサイトにサービスを提供する新しい仮想マシンを自動的に割り当てます。 負荷が低下すると、仮想マシンはシステムに戻り、料金は発生しません。



ホスティング事業者がこれを必要とする理由(この場合はMicrosoft):理由は同じです-リソースを節約します。 通常、異なるサイトおよびサービスは、同時に最大量のリソースを必要としません。 これにより、プロバイダーはより少ない物理リソースでより多くのWebサイトをホストできるようになります。 共有ホスティングの場合と同じ節約-すべての人が同時にピーク負荷を必要とするわけではありません。 したがって、通常、共有ホスティングは安価です。



そして今、不快な瞬間-これはアプリケーションの開発を複雑にし、プラットフォームに私たちを結び付けます。 むしろ、複雑ではありませんが、アプローチがわずかに変更されるため、あまり馴染みがありません。 結局のところ、開発者は通常、SSHセッションまたはRDPを開くことができるサーバーがあるという事実に慣れており、そこで必要な環境を構成するためにさまざまなコマンドを実行できます。 理論的には、Azure Cloud Servicesでは仮想マシンに対してRDPを開くこともできますが、デバッグの目的を除いて、これには少し意味があります。 結局、5分後、システムはこれらの「サーバー」をさらに12個生成し、それらはユーザーが手動で構成することはできません。 そして、設定したサーバーを警告なしに完全に削除します。



サーバー構成の問題の解決は非常に簡単です。公開する前にアプリケーションをパックして、システム自体がその構成方法、アプリケーションが機能するためにサーバーで実行する必要のあるアクションを把握する必要があります。 このパッケージには、アプリケーション自体に加えて、すべての依存関係も含める必要があります。依存関係は、サーバーで実行および構成するために必要になる場合があります。 そして最も重要なことは、アプリケーション用にクリーンな新しい仮想マシンを構成できるスクリプトがあることです。 Azureシステムは、このパッケージを展開し、新しい仮想マシンが動作するたびにスクリプトを実行します。



この記事では、このようなソリューションを使用して、プラットフォームの独立性を最大限に維持します。 結局のところ、プラットフォームへの依存と別のサービスへの移行ができないことが、現時点でクラウドサービスへの移行を妨げる主な要因の1つです。 例やオープンソース技術によく知られているアプリケーションを選んだのは偶然ではありません。他のプラットフォームでこれらのアプリケーションをセットアップする方法はよく知られています。 そのため、必要に応じて、あるプラットフォームから別のプラットフォームにアプリケーションを転送できます。 それで、十分な理論、練習に移りましょう。 次に、各テクノロジーを順番に使用する例を検討します。 各テクノロジーには多くの同一のアクションがあるため、記事を短くするために記事を繰り返さないため、この特定のテクノロジーを使用しない場合でも、テキスト全体を連続して読むことをお勧めします。



ルビー



Rubyから始めて、彼女の例ですべての重要なポイントを見てみましょう。したがって、この章は最も長くなります。 Rubyを使用したことがない場合でも構いません。 実際には特定のコマンドは使用せず、すべてのプラットフォームを構成する手順は同じです。 まず、Windowsワークステーションが必要です。 Helicon Zooを使用して、ワークステーションとAzureシステムの両方でIISでRubyアプリケーションを実行します。 アプリケーションのランタイムを構成するのが簡単になるだけでなく、Azureでのこのような構成は、他の手順でよく行われるように、ポート80で統合サーバーを使用してRubyプロセスを開始するよりもパフォーマンスの点ではるかに優れた信頼性の高いソリューションを作成します。 さらに、IISでアプリケーションを起動すると、IISの他の技術と機能をアプリケーションに組み込み、この記事に記載されているASP.NETおよびその他の言語のセクションをサイトに追加し、SSLおよびURL書き換えを構成し、マルチコアマシンをフルに活用し、静的データを使用して、 IIS自体も、リソースを大幅に節約します。



すでにRubyを使用している場合は、ワークステーションにgemがインストールされたRubyのインストールおよび構成済みバージョンが既にある可能性があります。 これはすべて良いことですが、どうすればAzure Cloud Servicesに移行できますか? Helicon Zooパッケージを使用すると、アプリケーションのすべての依存関係を1つのアーカイブにパックできるため、Azure Cloud Servicesなどの他のサーバーに簡単に転送できます。 したがって、忠実性のために、マシンに別のRubyが存在するかどうかに関係なく、Helicon Zooリポジトリから最新バージョンのRubyをインストールします。



そのため、リンクに従ってMicrosoft Web Platform Installerをインストールしてください 。 実行して[オプション]を押し、開いたウィンドウでHelicon Zooフィードを追加します: http : //www.helicontech.com/zoo/feed.xml



ワークステーションでは、サーバーとしてIIS Expressを選択することもお勧めします。 テストでの作業が容易になり、必要な設定が少なくなります。







次に、Windows Azure SDKをインストールする必要があります。これを行う最も簡単な方法は、同じWeb Platform Installerを使用することです。 検索に「Azure SDK 2.1」と入力するか、単にこのリンクをクリックします。 記事を読んだ時点でSDKバージョンが古く、リンクが機能しない場合は、リストで新しい方を見つけてください。







Azure SDKには、必要なWindows Azureクラウドサービス用のパッケージを作成およびテストするためのユーティリティセットが含まれています。 この記事では「魔法」の量を最小限に抑えようとしたため、コマンドラインユーティリティを使用し、サイトの自動公開にはVisual Studioやその他のツールを使用しません。 特に、Rubyでアプリケーションを公開しているため、Visual Studioが開発ツールになるのは疑わしいです。 そのため、Ruby用のAzure SDKではなく、基本のAzure SDKをインストールすることをお勧めします。 後者にはすでに、いくつかのRubyディストリビューションと、悪くないかもしれない構成のセットが含まれていますが、この記事で使用されるものは間違いありません。 Visual Studioを使用してAzureパッケージを作成することにまだ慣れている場合は、この記事を使用して必要なパッケージを手動で作成することは難しくありません。



次に、ワークステーションでRubyアプリケーションを作成しましょう。 既製のRuby Rackアプリケーションがすでにある場合は、Web Platform Installerを起動し、Zoo-> Templatesセクションから「Rubyプロジェクト」をインストールする必要があります。 次に、作成されたテンプレートサイトの招待ページの指示に従います。







しかし、誰もが「Hello World」アプリケーションのインストールにうんざりしているようで、より高度なコードを書くことはこの記事の範囲を超えているため、Redmineをかなり複雑で有名なオープンソースのRuby on Railsアプリケーションとして置きます。 これを行うには、同じWeb Platform Installerを開き、Zoo-> Applicationsに移動してRedmineをインストールします。 インストールが完了すると、アプリケーションの展開プロセスが開始され、 この記事の 「手動インストール」セクションで説明されている手順が自動的に実行されます。







同時に、Ruby、Dev Kit、gems、またはIIS Express自体の事前インストールは不要です。WebPlatform InstallerとHelicon Zooがすべてを処理します。 必要なパッケージはすべてインターネットからダウンロードされ、ワー​​クステーションにインストールされます。 すべてのコンポーネントがインストールされると、Redmineの最初のページが表示されます。 もちろん、良い方法で、まだ正しいデータベースを構成する必要がありますが、テストでは、デフォルトのSQLiteですでに十分です。



結果のサイトのファイル構造に注意してください(フォルダーの外観を更新するには、WebMatrixでF5キーを押す必要がある場合があります)。







GEM_HOMEフォルダーには、アプリケーションが依存するすべてのgemが含まれています。 そこから操作中にロードされます。 deploy_done.rbファイルは、前の手順で確認したdeploy.rbスクリプトです。このページでは、「Application deployment in progress」というメッセージが表示されます。 実行が完了すると、Helicon Zooはこのファイルの名前をdeploy_done.rbに変更し、不必要に再起動しないようにしました。 新しい方法でプロセスを開始する必要がある場合は、このファイルの名前をdeploy.rbに戻すだけで、サーバーへの次の要求からスクリプトが再度起動されます。 このスクリプトには、不足している依存関係を見つけてインストールし、必要に応じてデータベースの移行を作成するなどの標準コマンドが含まれています。 これは、アプリケーションのコンテキストでコマンドを実行する方法の1つです。詳細については、 ヘリコン動物園のドキュメントを参照してください 。 別の方法は、[スタート]-> [プログラム]-> [ヘリコン]-> [Zoo]からHelicon Zoo Manager(IIS Express用)を起動することです。そこで、アプリケーションを選択して、Start WebコンソールまたはStart IDEをクリックします







Webコンソールを使用すると、ローカルマシンとリモートサーバーの両方で、アプリケーションのコンテキストで、このアプリケーションのユーザー(IISの場合はアプリケーションプールユーザー、IIS Expressの場合はインタラクティブユーザー)の代わりにコマンドを実行できます。 [IDEの起動]ボタンを使用すると、選択したWebアプリケーションの変数とパスの事前構成された環境でプログラムを起動できます(デフォルトではcmd.exeコマンドラインになります)。 また、システム全体にではなく、アプリケーションに適用されるコマンドの実行を許可します。 AptanaやPyCharmなどの最新のIDEにはコマンドラインが組み込まれており、これらの変数を正しく認識し、ローカルアプリケーションフォルダーを多かれ少なかれ分離して作業し、環境から直接コマンドを実行できます。 したがって、[IDEの開始]ボタンを使用してお気に入りのIDEの開始を構成し、そこからすべてのコマンドを実行することをお勧めします。 [ツール]-> [アプリケーション環境のエクスポート]をクリックして、環境変数を.cmdファイルにエクスポートすることもできます。 このファイルは、アプリケーション用の他のスクリプトコマンドを実行する前に呼び出すことができ、必要なパスと環境変数を設定します。 これは、たとえば、Windowsスケジューラからタイマーアプリケーションにコマンドを適用する必要がある場合に便利です。



これらのツールを使用することがなぜそれほど重要なのですか? アプリケーション内のすべての依存関係をパックできるためです。 結局、アプリケーションはAzure Cloud Servicesで動作するように送信され、必要なすべての依存関係が必要になります。 もちろん、新しいクラウドサービスノードが動作するたびに、Rubyコマンド「バンドルインストール」を実行してインターネットからダウンロードし、すべての依存関係をインストールできます。 ただし、その場合、アプリケーションはrubygems.orgサービスおよびその他のインターネットリソースの動作にも依存しますが、その100%の可用性が問題になっています。 さらに、セカンダリの依存関係からgemの正確なバージョンを指定するのを忘れる可能性が常にあり、アプリケーションは、互換性のない新しいバージョンのgemのリリースで突然動作を停止しますが、何も変更していないようです。 これらすべての確率を掛けると、そのような魅力的なアップタイムは得られません。 したがって、インターネットからのインストール時に可能な限り何もスイングしないように、外部依存関係の数を最小限に抑える必要があります。そうすると、すべての新しい仮想マシンは互いの正確なコピーになります。



そして、1つの微妙な点があります-習慣。 たとえば、Javaプログラマーがすべての依存関係をアプリケーションとともにパッケージ化する必要があるという事実に慣れている場合、Rubyプログラマーは自分の裁量でサーバーを構成することに慣れています。 そのため、ヘリコン動物園での作業にはある程度の規律が必要になります。つまり、最初にアプリケーションへのパスを設定しないと、ワークステーション上でもコンソールやIDEを実行してアプリケーションを操作することはできません。 Helicon Zoo ManagerからコンソールとIDEを実行するか、他のコマンドを実行する前にアプリケーションenvironment.cmdからエクスポートされたファイルを実行することにより、これを行うことができます。 また、gemsやその他のモジュールをグローバルにインストールすることはできません。 これらのルールを使用すると、あるサーバーから別のサーバーへの転送に便利な、簡単に移植できるアプリケーションを取得できます。



RedmineをHelicon Zooリポジトリから直接インストールしたため、すべての依存関係がアプリケーションに自動的にインストールされました。 Redmineを別のサーバーに転送するには、このサーバーにHelicon Zoo-> Ruby Hosting Packageをインストールし、フォルダーをサイト自体と一緒に転送するだけです。 Rubyホスティングパッケージには、さまざまなバージョンのRuby、開発キット、ヘリコン動物園モジュール、およびサーバーで役立つその他のすべての依存関係が既に含まれています。 Ruby Hosting Packageをインストールする代わりに、原則として、必要なパッケージをHelicon Zooリポジトリから個別にインストールするだけで、スペースを節約できます。 ただし、何かを失う可能性が高く、Rubyディストリビューションは保存するために多くのスペースを占有しません。



サーバーでは、ディストリビューションとサーバーの可用性に依存しないように、RubyおよびHelicon Zooパッケージをインターネットからダウンロードしません。 このために、すべてを一度パックしてからアーカイブからインストールする方法もあります。 Web Platform InstallerとコマンドラインユーティリティWebpiCMD.exeを使用します。 通常、Web Platform Installerのインストールフォルダーで見つけることができます:C:\ Program Files \ Microsoft \ Web Platform Installer。 このユーティリティは、インターネットに接続せずにインストールするために、Web Platform Installerから製品をパッケージ化できます。



まず、コンソールを右クリックして「管理者として実行」を選択し、管理者権限でコンソールを起動します。







これは、WebpiCMD.exeの起動時に新しいコンソールウィンドウが開かないようにするために必要です。そうしないと、コマンドの出力を読み取ることが困難になります。 Redmineの 'offline-package'フォルダにあるサイトのディレクトリにインストールパッケージを保存します。 なぜなら IIS Expressの下にRedmineをインストールした後、私のサイトは「C:\ Users \ Slov \ Documents \ My Web Sites \ redmine222 」フォルダにあります。 あなたの場合、フォルダ名は異なるため、次のコマンドでこれを修正し、コンソールで実行します。



mkdir "C:\Users\Slov\Documents\My Web Sites\redmine222\offline-package" WebpiCmd.exe /offline /Products:RubyHostingPackage /Path:"C:\Users\Slov\Documents\My Web Sites\redmine222\offline-package" /Feeds:http://www.helicontech.com/zoo/feed.xml
      
      







コマンドからわかるように、オフラインインストール用に保存する必要がある製品を示します。 同時に、WebpiCmd.exeは、可能なすべての依存関係、ビットなどを保存します。 このコマンドは、パッケージを保存するフォルダーへのパスと、これらすべてのパッケージが由来するHelicon ZooリポジトリーのURLを取得します。 プロセス全体に時間がかかる場合があります。 多くのシェルコマンドはパス内のスペースを好まないため、引用符を忘れないでください。 このコマンドは、RubyHostingPackage製品とそのすべての可能な依存関係をWebサイト内の「offline-package」フォルダーに保存します。 その後、このフォルダーの内容を使用して、Ruby Hosting Packageを別のマシンにインストールできます。 この記事の執筆時点で、Helicon Zooには7つのホスティングパッケージが含まれており、その名前は次のとおりです。



 CFMLHostingPackage CFML Hosting Package JavaHostingPackage Java Hosting Package RubyHostingPackage Ruby Hosting Package NodejsHostingPackage Node.js Hosting Package PerlHostingPackage Perl Hosting Package PHPHostingPackage PHP Hosting Package PythonHostingPackage Python Hosting Package
      
      





このリンクで、英語でのオフラインインストールの詳細を読むことができます。 WebpiCmd.exeコマンドの/ Listキーを使用して、使用可能なすべての製品の内部名を確認できます。 WebpiCMD.exeユーティリティの元の英語ドキュメントはこちらです。



結果の 'offline-package'フォルダーの構造を見ると、binフォルダーには、WebpiCMD.exeが既にパッケージに自身の作業用コピーが既に含まれていることがわかります。 仮想マシンAzure Cloud Servicesで呼び出して、必要な依存関係をパッケージからインストールします。







Azure用にサイトをパックする前に、仮想マシンのすべての依存関係をインストールするスクリプトをサイトに追加する必要があります。 Azureのルールに従って、このスクリプトはサイト自体のルートの下のbinディレクトリに配置する必要があります。 このファイルをstartup.cmdと呼びます。 その内容は次のとおりです。



[bin \ startup.cmd]
 echo Starting installation... rem           icacls "%RoleRoot%\approot" /grant "Everyone":F /T rem   AppData        Web Platform Installer rem          md "%RoleRoot%\appdata" reg add "hku\.default\software\microsoft\windows\currentversion\explorer\user shell folders" ^ /v "Local AppData" /t REG_EXPAND_SZ /d "%RoleRoot%\appdata" /f rem     WebpiCmd.exe pushd "%RoleRoot%\approot\offline-package\bin" rem   WebpiCmd.exe      offline-package rem      - RubyHostingPackage,     install.txt  install-error.txt WebpiCmd.exe /install /Products:RubyHostingPackage /XML:%RoleRoot%\approot\offline-package\feeds\latest\webproductlist.xml ^ /Feeds:%RoleRoot%\approot\offline-package\feeds\latest\supplementalfeeds\feed.xml ^ /AcceptEula >%RoleRoot%\approot\public\install.txt 2>%RoleRoot%\approot\public\install-error.txt popd rem       AppData reg add "hku\.default\software\microsoft\windows\currentversion\explorer\user shell folders" ^ /v "Local AppData" /t REG_EXPAND_SZ /d %%USERPROFILE%%\AppData\Local /f rem     ,    . echo Completed installation.
      
      





変数%RoleRoot%は、ロールがインストールされている場所を示し、それに応じて%RoleRoot%\ approotフォルダーがサイトのルートフォルダーになります。 このファイルのメイン行は、WebpiCmd.exeの呼び出しです。 インストールログの出力のinstall.txtファイルへのリダイレクトに注意してください。STDERRの出力はinstall-error.txtファイルに格納されます-両方とも結果のサイトのルートのパブリックフォルダーに格納されます。 その後、これらのファイルをURLで要求して、エクスペリエンスが初めて失敗した場合にインストールエラーの可能性を読み取ることができます。 最初の行は、サイトのあるフォルダーへの書き込み権限を設定します。これらの権限は、Redmine自体が機能するために必要です。 Rubyアプリケーションは、多くの場合、アプリケーションフォルダーに書き込まれます。



今こそ、Azure Cloud Servicesのサイトをパックするときです。 私のサイトは「C:\ Users \ Slov \ Documents \ My Web Sites \ redmine222」フォルダにあります。 サイトの上のフォルダーにあるフォルダーに移動します。「C:\ Users \ Slov \ Documents \ My Web Sites \」というフォルダーがあります。 ここでは、3つのファイルを作成する必要があります。サービス構成ファイル* .cscfg、* .csdefパッケージを作成するためのパラメーターを持つファイル、および便利にパッケージ化されるcmdスクリプトファイルです。 これらのファイルといくつかのコメントを次に示します。



[remine222.csdef]

 <?xml version="1.0" encoding="utf-8"?> <ServiceDefinition name="WindowsAzure2" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2013-03.2.0"> <WebRole name="redmine222" vmsize="Small"> <Sites> <Site name="Web" physicalDirectory="./redmine222"> <Bindings> <Binding name="Endpoint1" endpointName="Endpoint1" /> </Bindings> </Site> </Sites> <Endpoints> <InputEndpoint name="Endpoint1" protocol="http" port="80" /> </Endpoints> <Startup> <Task commandLine="startup.cmd" executionContext="elevated" taskType="simple" > </Task> </Startup> </WebRole> </ServiceDefinition>
      
      





何らかの理由で、ロール名とそれが配置されているフォルダーの名前が一致する必要があります。



[redmine222.cloud.cscfg]

 <?xml version="1.0" encoding="utf-8"?> <ServiceConfiguration serviceName="WindowsAzure2" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="2" osVersion="*" schemaVersion="2013-03.2.0"> <Role name="redmine222"> <Instances count="1" /> <ConfigurationSettings> </ConfigurationSettings> </Role> </ServiceConfiguration>
      
      





これらのファイルの説明と形式は、インターネットおよびWindows Azure自体のドキュメントに記載されていますので、詳細は省略してください。



[redmine222.pack.cmd]

 @echo off set WINDOWS_AZURE_SDK_PATH="C:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\v2.1" call %WINDOWS_AZURE_SDK_PATH%\bin\setenv.cmd pushd %~dp0 if "%ServiceHostingSDKInstallPath%" == "" ( echo Can't see the ServiceHostingSDKInstallPath environment variable. Please run from a Windows Azure SDK command-line (run Program Files\Windows Azure SDK\^<version^>\bin\setenv.cmd^). GOTO :eof ) rem     ,  IIS  .. rem iisreset /stop rem  deploy_done.rb  deploy.rb       ren redmine222\deploy_done.rb deploy.rb rem      Windows Azure cspack redmine222.csdef /out:redmine222.cspkg popd
      
      





行に注意してください

 ren redmine222\deploy_done.rb deploy.rb
      
      





このコマンドはdeploy_done.rbファイルの名前をdeploy.rbに変更します。これにより、デプロイされたアプリケーションへの最初のリクエストでHelicon Zooのデプロイメントスクリプトが再起動されます。 すべてのモジュールを正しくパックし、データベースを移行する必要がない場合、この手順はオプションであり、時間を節約できます。 ただし、最初にすべてが正しくパックされる可能性はそれほど高くないため、最初の試行ではこの行を残すことをお勧めします。



別の推奨事項は、サイトルートのweb.configファイルを編集し、次の行を<system.webServer>セクションに追加することです。

 <httpErrors existingResponse="PassThrough" />
      
      





この行により、IISへの外部リクエストを伴う500番目のエラーに関する詳細なメッセージを生成できます。 この行がないと、アプリケーションで何かが壊れた場合、エラーテキストは表示されず、「サーバーエラー」というドライメッセージのみが表示されます。 プロダクションモードで作業するには、この行を削除する方が適切ですが、最初の起動には便利です。



このリンクでは、プロジェクトのフォルダ構造に応じて上記のファイルの例を見つけることができます-何を置くかを明確にするために。



すべて、ファイルの準備ができました。 さて、redmine222.pack.cmdを呼び出す前に、ワークステーションでIISまたはIIS Expressを停止して、アプリケーションファイルのロックを解除する必要があります。 次に、管理コンソールからredmine222.pack.cmdを呼び出します。 パッケージ化プロセスには時間がかかります。その結果、redmine222.cspkgファイルを取得します。このファイルは、実際にはすべての必要なパッケージを含むZIPアーカイブです。 このファイルのサイズは138メガバイトになりました。 Ruby 1.8、1.9のバージョン、Ruby DevKitの2つのバージョン、Helicon Zoo Module、Microsoft URL Rewrite、Redmine自体、およびその操作に必要なすべてのgemが含まれています。 ただし、このアーカイブにはすべての依存関係が含まれており、インターネットから何もダウンロードする必要はありません。アーカイブ自体はAzureネットワーク内に転送されます。



それでは、Windows Azure管理ポータルに行きましょう。 新しいクラウドサービスを作成し、そのURLを選択する必要があります。







次に、「新しいステージング展開」を選択します。







ローカルフォルダーからRedmineファイルを選択します。 redmine222.csdefファイルでは、テストに十分なロールの1つのインスタンスを使用するように指定したため、「ロールに単一のインスタンスが含まれる場合でもデプロイ」フラグを指定する必要がありますが、実際の状況ではこの数を増やす必要があります。







その後、パッケージをAzureにダウンロードし、新しい仮想マシンを作成し、この仮想マシンにアプリケーションと共にパッケージをデプロイし、インストールスクリプトを実行するプロセスが開始されます。 このプロセスは非常に長く、20分かかります。 すべてのインストールプロセスが完了したら、[サイトURL]リンクをクリックします。







Helicon ZooからApplcationデプロイメントページが表示され、Redmineホームページが更新されます。







Webサイトをより受け入れやすいドメイン名でユーザーに表示するには、.cloudapp.net内のドメイン名のCNAMEレコードを指定する(推奨)か、レジストラーでのドメインの設定でパブリックIPアドレスにドメインの「A」レコードを指定する必要がありますAzureアプリケーション。 マイクロソフト自体は、ドメイン登録サービスを提供していません。



Python





この章では、Helicon Zooリポジトリの一部ではないアプリケーションを手動でインストールする方法について説明します。 これを行うには、Djangoを使用してPythonで記述されたオープンソースのLightning Fast Shop (LFS)アプリケーションを使用します。 Azure Cloud Serviceにアプリケーションを公開する手順は前の章とほぼ同じですが、ワークステーションにアプリケーションを展開する手順は異なります。



したがって、まだインストールされていない場合は、前の章と同様に、 Microsoft Web Platform InstallerHelicon Zooフィード 、およびWindows Azure SDKをインストールします。 Web Platform Installerを起動し、IIS ExpressでZoo-> Templates-> Pythonプロジェクトをインストールします。







WebMatrixが起動し、新しいサイトが開きます:







Python用のテンプレートプロジェクトをインストールしました。 Virtualenvはこのプロジェクトで既に構成されており、サイト内のすべてのモジュールと依存関係をインストールするために使用されます。 Pythonプロジェクトを開始するには、Pythonプロジェクトの招待ページの指示に従ってさらに進んでください。 Helicon Zoo Managerを使用してコンソールまたはIDE( PyCharmなど )を起動することを忘れないでください。そうすると、コンソールは事前構成されたvirtualenvで起動します。そうしないと、コマンドはアプリケーションへのパスを見つけられません



Lightning Fast Shopはインストールするのにかなり大規模で不機嫌なプログラムです。IISおよびHelicon Zooに手動でインストールする場合は、次の手順をステップごとに繰り返してください。 何が起こっているのかという詳細な説明はしません。何が起こっているのかは、LFSプロジェクトの機能に関係しており、Helicon ZooやAzureには関係していないからです。 別のプロジェクトの設定は、異なるシナリオに従う場合があります。 失敗した場合は、Pythonプロジェクトの指示に従って、より小さくシンプルなプロジェクトから始めてみてください。 LFSプロジェクトを選択したのは、Azure Cloud Servicesで「Hello World」だけを起動できないことを示すためです。

  1. 公式サイトからLFSディストリビューションをダウンロードします 。 バージョン0.7.7を選択しました。 django-lfs-installer-0.7.7.ta​​r.gzのようなファイル名のインストーラーバージョンをダウンロードする必要があります。

    アーカイブには「lfs-installer」というフォルダーがあります-Pythonプロジェクトでコンテンツをサイトのルートに解凍します(私の場合はC:\ Users \ Slov \ Documents \ My Web Sites \ ZooPythonProject2フォルダーです)。

    Helicon Zoo Managerを起動し、プロジェクトで目的のサイトを選択し、Start IDEをクリックして、構成されたコンソールを起動します。

    コンソールで、次を入力します。

     python bootstrap.py
          
          



    それから

     bin\buildout –v
          
          



    次に、lfs_project \ settings.pyファイルを編集し、SQLiteプロジェクトで使用するためにDATABASESセクションを次のテキストに置き換えます。

     DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 'NAME': os.path.join(DIRNAME, 'sqlite3.bd'), # Or path to database file if using sqlite3. 'USER': '', # Not used with sqlite3. 'PASSWORD': '', # Not used with sqlite3. 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. 'PORT': '', # Set to empty string for default. Not used with sqlite3. } }
          
          



    次に、コンソールで次のコマンドを入力します。

     bin\django syncdb bin\django lfs_init bin\django collectstatic
          
          



    すべてがエラーなく動作した場合、Djangoテストサーバーを実行して、IIS Webサーバーとは別にLFSプロジェクトの動作をテストできます。 コンソールで実行します。

     bin/django runserver
          
          



    そして、ブラウザhttp:// localhost:8080 /で開きます



    次に、ヘリコン動物園を介してIISでプロジェクトを開始するには、 web.configファイルで PYTHONPATHを設定する必要があります 。 LFSでは、それは長く、多くのeggパッケージが含まれています。 bin \ django_script.pyファイルで見つけることができます:

     #!"C:\Users\Slov\Documents\My Web Sites\ZooPythonProject2\venv\Scripts\python.exe" import sys sys.path[0:0] = [ 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\eggs\\django_lfs-0.7.6-py2.7.egg', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\eggs\\gunicorn-18.0-py2.7.egg', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\eggs\\djangorecipe-1.1.2-py2.7.egg', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\eggs\\django-1.3.1-py2.7.egg', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\eggs\\zc.recipe.egg-2.0.1-py2.7.egg', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\eggs\\zc.buildout-2.2.1-py2.7.egg', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\eggs\\south-0.7.3-py2.7.egg', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\eggs\\pillow-1.7.5-py2.7-win32.egg', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\eggs\\lfs_order_numbers-1.0b1-py2.7.egg', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\eggs\\lfs_contact-1.0-py2.7.egg', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\eggs\\django_tagging-0.3.1-py2.7.egg', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\eggs\\django_reviews-0.2.1-py2.7.egg', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\eggs\\django_postal-0.9-py2.7.egg', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\eggs\\django_portlets-1.1.1-py2.7.egg', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\eggs\\django_paypal-0.1.2-py2.7.egg', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\eggs\\django_pagination-1.0.7-py2.7.egg', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\eggs\\django_lfstheme-0.7.3-py2.7.egg', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\eggs\\django_compressor-1.1.1-py2.7.egg', 'c:\\users\\slov\\documents\\my web sites\\zoopythonproject2\\venv\\lib\\site-packages', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\eggs\\django_piston-0.2.3-py2.7.egg', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\eggs\\django_countries-1.5-py2.7.egg', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\eggs\\django_appconf-0.6-py2.7.egg', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\eggs\\six-1.4.1-py2.7.egg', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\parts\\django', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\parts', 'c:\\users\\slov\\docume~1\\mywebs~1\\zoopyt~1\\lfs_project', ] import djangorecipe.manage if __name__ == '__main__': sys.exit(djangorecipe.manage.main('lfs_project.settings'))
          
          





    ご覧のとおり、絶対パスがありますが、プロジェクトはAzureに転送されるため、私たちには適していません。 web.configを介してPYTHONPATHを設定するには、これらのパスを少し変わった形式でやり直す必要があります。 ここに私のweb.configのスニペットがあります:

     <?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <heliconZoo> <application name="python.project"> <environmentVariables> <add name="VIRTUAL_ENV" value="%APPL_PHYSICAL_PATH%\venv" /> <add name="PATH" value="%APPL_PHYSICAL_PATH%\venv\Scripts;%PATH%" /> <add name="PYTHONPATH" value=".\eggs\django_lfs-0.7.6-py2.7.egg ;.\eggs\gunicorn-18.0-py2.7.egg ;.\eggs\djangorecipe-1.1.2-py2.7.egg ;.\eggs\django-1.3.1-py2.7.egg ;.\eggs\zc.recipe.egg-2.0.1-py2.7.egg ;.\eggs\zc.buildout-2.2.1-py2.7.egg ;.\eggs\south-0.7.3-py2.7.egg ;.\eggs\pillow-1.7.5-py2.7-win32.egg ;.\eggs\lfs_order_numbers-1.0b1-py2.7.egg ;.\eggs\lfs_contact-1.0-py2.7.egg ;.\eggs\django_tagging-0.3.1-py2.7.egg ;.\eggs\django_reviews-0.2.1-py2.7.egg ;.\eggs\django_postal-0.9-py2.7.egg ;.\eggs\django_portlets-1.1.1-py2.7.egg ;.\eggs\django_paypal-0.1.2-py2.7.egg ;.\eggs\django_pagination-1.0.7-py2.7.egg ;.\eggs\django_lfstheme-0.7.3-py2.7.egg ;.\eggs\django_compressor-1.1.1-py2.7.egg ;.\venv\lib\site-packages ;.\eggs\django_piston-0.2.3-py2.7.egg ;.\eggs\django_countries-1.5-py2.7.egg ;.\eggs\django_appconf-0.6-py2.7.egg ;.\eggs\six-1.4.1-py2.7.egg ;.\parts\django ;%APPL_PHYSICAL_PATH% ;.\parts ;.\lfs_project" /> <add name="WSGI_APP" value="welcome.application" /> <add name="CONSOLE_URL" value="console" /> <add name="DEPLOY_FILE" value="deploy.py" /> <add name="ERROR_LOG_DIR" value="log" /> <add name="IDE" value="C:\Windows\system32\cmd.exe" />
          
          





    web.configにコピーできますが、0.7.7以外のバージョンを設定している場合は、PYTHONPATHが異なる場合があります。



    また、web.configでDJANGO_SETTINGS_MODULE変数を設定します。

     <!-- django project --> <add name="DJANGO_SETTINGS_MODULE" value="lfs_project.settings" />
          
          





    ここで、フォルダー'\ lfs_project \ sitestatic'のコンテンツを、サイトのルートにあるフォルダー'\ static'に移動する必要があります。



    すべて、プロジェクトをIISで実行する準備が整いました。 WebMatrixのリンクをクリックすると、LFSホームページが表示されます。



    フォルダ構造の結果は次のとおりです。







    次に、Azure Cloud Servicesのパッケージを準備します。 Helicon Zoo Managerを起動し、目的のサイトを選択し、「IDEを起動」をクリックしてコンソールを起動します。 Webコンソールはここでは機能しません。 彼女には十分な権利がありません。 そこで次のコマンドを実行します。



     mkdir offline-package WebpiCmd.exe /offline /Products:PythonHostingPackage /Path:"offline-package" /Feeds:http://www.helicontech.com/zoo/feed.xml
          
          





    これにより、サイト内のオフラインパッケージディレクトリにPythonホスティングパッケージが保存されます。



    次に、前の章のように、「My Documents \ My Web Sites」フォルダーにAzure Cloud Services用の3つのファイルを作成します。 これらのファイルで以前のものと異なる行を太字で強調しました。



    [LFS.Cloud.cscfg]

     <?xml version="1.0" encoding="utf-8"?> <ServiceConfiguration serviceName="WindowsAzure2" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="2" osVersion="*" schemaVersion="2013-03.2.0"> <Role name="ZooPythonProject2"> <Instances count="1" /> <ConfigurationSettings> </ConfigurationSettings> </Role> </ServiceConfiguration>
          
          







    [LFS.csdef]

     <?xml version="1.0" encoding="utf-8"?> <ServiceDefinition name="WindowsAzure2" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2013-03.2.0"> <WebRole name="ZooPythonProject2" vmsize="Small"> <Sites> <Site name="Web" physicalDirectory="./ZooPythonProject2"> <Bindings> <Binding name="Endpoint1" endpointName="Endpoint1" /> </Bindings> </Site> </Sites> <Endpoints> <InputEndpoint name="Endpoint1" protocol="http" port="80" /> </Endpoints> <Startup> <Task commandLine="startup.cmd" executionContext="elevated" taskType="simple" > </Task> </Startup> </WebRole> </ServiceDefinition>
          
          







    [LFS.pack.cmd]

     @echo off set WINDOWS_AZURE_SDK_PATH="C:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\v2.1" call %WINDOWS_AZURE_SDK_PATH%\bin\setenv.cmd pushd %~dp0 if "%ServiceHostingSDKInstallPath%" == "" ( echo Can't see the ServiceHostingSDKInstallPath environment variable. Please run from a Windows Azure SDK command-line (run Program Files\Windows Azure SDK\^<version^>\bin\setenv.cmd^). GOTO :eof ) rem     ,  IIS  .. rem iisreset /stop <b>del /s /q *.log *.pyc *.pyo</b> rem      Windows Azure cspack lfs.csdef /out:lfs.cspkg popd
          
          





    そして、サイトのルートにファイル\ bin \ startup.cmdを作成します:

     echo Starting installation... rem           icacls "%RoleRoot%\approot" /grant "Everyone":F /T rem   AppData        Web Platform Installer rem          md "%RoleRoot%\appdata" reg add "hku\.default\software\microsoft\windows\currentversion\explorer\user shell folders" ^ /v "Local AppData" /t REG_EXPAND_SZ /d "%RoleRoot%\appdata" /f rem     WebpiCmd.exe pushd "%RoleRoot%\approot\offline-package\bin" rem   WebpiCmd.exe      offline-package rem      - <b>PythonHostingPackage</b>,     install.txt  install-error.txt WebpiCmd.exe /install /Products:PythonHostingPackage /XML:%RoleRoot%\approot\offline-package\feeds\latest\webproductlist.xml ^ /Feeds:%RoleRoot%\approot\offline-package\feeds\latest\supplementalfeeds\feed.xml /AcceptEula ^ >%RoleRoot%\approot\static\install.txt 2>%RoleRoot%\approot\static\install-error.txt popd rem       AppData reg add "hku\.default\software\microsoft\windows\currentversion\explorer\user shell folders" ^ /v "Local AppData" /t REG_EXPAND_SZ /d %%USERPROFILE%%\AppData\Local /f rem     ,    . echo Completed installation.
          
          





    このアーカイブには、上記のファイルの例があります。



    LFS.pack.cmdを実行します。 結果として得られるLFS.cspkgファイルのサイズは70MBです。



    Azureポータルから古いステージング環境を削除し、新しいステージング環境を作成します。 前の章のようにファイルを転送し、起動を待ちます。







    「すべてのインスタンスの準備ができていません」という行が消えたら、リンクを開いて、Azure Cloud Servicesで作業中のLightning Fast Shopを確認します。







    Node.js



    次にNode.jsの番です。 したがって、 Microsoft Web Platform Installerを起動し、 Zoo-> Templates-> Node.js projectをインストールします。 すべての依存関係が自動的にインストールされます。







    起動後、プロジェクトは、express.js、sqlite3、persist.js、Twitter Bootstrapに基づいて構築された完全に既製のModel-View-Routeアプリケーションにデプロイされます。 たとえば、このテンプレートには、簡単なブログとその管理パネルが既にあります。 このようなアプリケーションは、独自のWebサイトを作成するための良い出発点となります。 すでに既製のNode.js Webサイトがある場合は、テンプレートプロジェクトで指定されたすべてのファイルの目的を明らかに知っています。 ファイルを一番上に上書きするだけで、web.configはそのままで、アプリケーションが動作するはずです。







    このシンプルなブログをAzure Cloud Servicesにインストールします。 前の章と同様に、Helicon Zoo Managerを起動して、Start IDEまたはStart Web Consoleをクリックします。 コンソールで、次を入力します。



     mkdir offline-package WebpiCmd.exe /offline /Products:NodejsHostingPackage /Path:"offline-package" /Feeds:http://www.helicontech.com/zoo/feed.xml
          
          





    次に、 bin \ startup.cmdファイルを作成します。



    [bin \ startup.cmd]

     echo Starting installation... rem           icacls "%RoleRoot%\approot" /grant "Everyone":F /T rem   AppData        Web Platform Installer rem          md "%RoleRoot%\appdata" reg add "hku\.default\software\microsoft\windows\currentversion\explorer\user shell folders" ^ /v "Local AppData" /t REG_EXPAND_SZ /d "%RoleRoot%\appdata" /f rem     WebpiCmd.exe pushd "%RoleRoot%\approot\offline-package\bin" rem   WebpiCmd.exe      offline-package rem      – NodejsHostingPackage,     install.txt  install-error.txt WebpiCmd.exe /install /Products:NodejsHostingPackage /XML:%RoleRoot%\approot\offline-package\feeds\latest\webproductlist.xml ^ /Feeds:%RoleRoot%\approot\offline-package\feeds\latest\supplementalfeeds\feed.xml ^ /AcceptEula >%RoleRoot%\approot\public\install.txt 2>%RoleRoot%\approot\public\install-error.txt popd rem       AppData reg add "hku\.default\software\microsoft\windows\currentversion\explorer\user shell folders" ^ /v "Local AppData" /t REG_EXPAND_SZ /d %%USERPROFILE%%\AppData\Local /f rem     ,    . echo Completed installation.
          
          





    «My Web Sites»:



    [Node.js.Cloud.cscfg]

     <?xml version="1.0" encoding="utf-8"?> <ServiceConfiguration serviceName="WindowsAzure2" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="2" osVersion="*" schemaVersion="2013-03.2.0"> <Role name="Node.js project"> <Instances count="1" /> <ConfigurationSettings> </ConfigurationSettings> </Role> </ServiceConfiguration>
          
          







    [Node.js.csdef]

     <?xml version="1.0" encoding="utf-8"?> <ServiceDefinition name="WindowsAzure2" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2013-03.2.0"> <WebRole name="Node.js project" vmsize="Small"> <Sites> <Site name="Web" physicalDirectory="./Node.js project"> <Bindings> <Binding name="Endpoint1" endpointName="Endpoint1" /> </Bindings> </Site> </Sites> <Endpoints> <InputEndpoint name="Endpoint1" protocol="http" port="80" /> </Endpoints> <Startup> <Task commandLine="startup.cmd" executionContext="elevated" taskType="simple" > </Task> </Startup> </WebRole> </ServiceDefinition>
          
          







    [Node.js.pack.cmd]

     @echo off set WINDOWS_AZURE_SDK_PATH="C:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\v2.1" call %WINDOWS_AZURE_SDK_PATH%\bin\setenv.cmd pushd %~dp0 if "%ServiceHostingSDKInstallPath%" == "" ( echo Can't see the ServiceHostingSDKInstallPath environment variable. Please run from a Windows Azure SDK command-line (run Program Files\Windows Azure SDK\^<version^>\bin\setenv.cmd^). GOTO :eof ) rem     ,  IIS  .. rem iisreset /stop rem      Windows Azure cspack Node.js.csdef /out:Node.js.cspkg popd
          
          





    .



    Node.js.pack.cmd, Node.js.cspkg 41. : https://dl.dropboxusercontent.com/u/7840290/habrahabr/Node.js.zip



    Azure Cloud Services . 5-10, , , , Ruby.



    Perl



    «Hello World» Mojolitious. Perl . Microsoft Web Platform Installer Zoo -> Templates -> Perl project .







    «Welcome to universal Perl template powered by Helicon Zoo», «open web console» :

     cpanm Mojolicious
          
          





    app.pl :



    [app.pl]

     use Mojolicious::Lite; get '/' => sub { shift->render(text => 'Hello from Mojolicious!') }; app->start;
          
          





    «» «Hello from Mojolicious!». , .



    , :



     mkdir offline-package WebpiCmd.exe /offline /Products:PerlHostingPackage /Path:"offline-package" /Feeds:http://www.helicontech.com/zoo/feed.xml
          
          





    bin\startup.cmd:



    [bin\startup.cmd]

     echo Starting installation... rem           icacls "%RoleRoot%\approot" /grant "Everyone":F /T rem   AppData        Web Platform Installer rem          md "%RoleRoot%\appdata" reg add "hku\.default\software\microsoft\windows\currentversion\explorer\user shell folders" ^ /v "Local AppData" /t REG_EXPAND_SZ /d "%RoleRoot%\appdata" /f rem     WebpiCmd.exe pushd "%RoleRoot%\approot\offline-package\bin" rem   WebpiCmd.exe      offline-package rem      – PerlHostingPackage,     install.txt  install-error.txt WebpiCmd.exe /install /Products:PerlHostingPackage /XML:%RoleRoot%\approot\offline-package\feeds\latest\webproductlist.xml ^ /Feeds:%RoleRoot%\approot\offline-package\feeds\latest\supplementalfeeds\feed.xml ^ /AcceptEula >%RoleRoot%\approot\public\install.txt 2>%RoleRoot%\approot\public\install-error.txt popd rem       AppData reg add "hku\.default\software\microsoft\windows\currentversion\explorer\user shell folders" ^ /v "Local AppData" /t REG_EXPAND_SZ /d %%USERPROFILE%%\AppData\Local /f rem     ,    . echo Completed installation.
          
          





    «My Web Sites» ( «My Web Sites\Perl project»):



    [Perl.Cloud.cscfg]

     <?xml version="1.0" encoding="utf-8"?> <ServiceConfiguration serviceName="WindowsAzure2" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="2" osVersion="*" schemaVersion="2013-03.2.0"> <Role name="Perl project"> <Instances count="1" /> <ConfigurationSettings> </ConfigurationSettings> </Role> </ServiceConfiguration>
          
          







    [Perl.csdef]

     <?xml version="1.0" encoding="utf-8"?> <ServiceDefinition name="WindowsAzure2" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2013-03.2.0"> <WebRole name="Perl project" vmsize="Small"> <Sites> <Site name="Web" physicalDirectory="./Perl project"> <Bindings> <Binding name="Endpoint1" endpointName="Endpoint1" /> </Bindings> </Site> </Sites> <Endpoints> <InputEndpoint name="Endpoint1" protocol="http" port="80" /> </Endpoints> <Startup> <Task commandLine="startup.cmd" executionContext="elevated" taskType="simple" > </Task> </Startup> </WebRole> </ServiceDefinition>
          
          







    [Perl.pack.cmd]

     @echo off set WINDOWS_AZURE_SDK_PATH="C:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\v2.1" call %WINDOWS_AZURE_SDK_PATH%\bin\setenv.cmd pushd %~dp0 if "%ServiceHostingSDKInstallPath%" == "" ( echo Can't see the ServiceHostingSDKInstallPath environment variable. Please run from a Windows Azure SDK command-line (run Program Files\Windows Azure SDK\^<version^>\bin\setenv.cmd^). GOTO :eof ) rem     ,  IIS  .. rem iisreset /stop rem      Windows Azure cspack Perl.csdef /out:Perl.cspkg popd
          
          





    : https://dl.dropboxusercontent.com/u/7840290/habrahabr/Perl.zip



    Perl.pack.cmd. Perl.cspkg 92. Azure Cloud Services Mojolicious , .







    Java ColdFusion (Railo)





    Java ColdFusion. ColdFusion Helicon Zoo Railo . – Java Railo Azure Cloud Services , – Azure. 200 . Railo Java Oracle JDK, 125 , 200. , Java , . , . Java . Java – . , Java, , .



    Java- Oracle JDK, , , Helicon Zoo. Oracle JDK Oracle. JDK-7 , : http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html Azure Cloud Services Windows-64 bit. . JDK-7 , Java- Helicon Zoo. Zoo -> Applications -> SCM Manager – Git, Mercurial SVN Java. Zoo -> Applications -> Mura CMS – CMS ColdFusion. .







    Mura CMS «My Web Sites\Mura CMS1». – offline-package Java Hosting Package CFML Hosting Package Helicon Zoo, :

     mkdir offline-package WebpiCmd.exe /offline /Products:CFMLHostingPackage /Path:"offline-package" /Feeds:http://www.helicontech.com/zoo/feed.xml
          
          







    offline-package\bin JDK-7.

    bin\startup.cmd JDK-7:



    [bin\startup.cmd]

     echo Starting installation... rem           icacls "%RoleRoot%\approot" /grant "Everyone":F /T rem   AppData        Web Platform Installer rem          md "%RoleRoot%\appdata" reg add "hku\.default\software\microsoft\windows\currentversion\explorer\user shell folders" ^ /v "Local AppData" /t REG_EXPAND_SZ /d "%RoleRoot%\appdata" /f rem     WebpiCmd.exe pushd "%RoleRoot%\approot\offline-package\bin" rem  JDK-7 jdk-7u45-windows-x64.exe /s rem   WebpiCmd.exe      offline-package rem      – PerlHostingPackage,     install.txt  install-error.txt WebpiCmd.exe /install /Products:CFMLHostingPackage /XML:%RoleRoot%\approot\offline-package\feeds\latest\webproductlist.xml ^ /Feeds:%RoleRoot%\approot\offline-package\feeds\latest\supplementalfeeds\feed.xml ^ /AcceptEula >%RoleRoot%\approot\install.txt 2>%RoleRoot%\approot\install-error.txt popd rem       AppData reg add "hku\.default\software\microsoft\windows\currentversion\explorer\user shell folders" ^ /v "Local AppData" /t REG_EXPAND_SZ /d %%USERPROFILE%%\AppData\Local /f rem     ,    . echo Completed installation.
          
          





    :



    [Mura.Cloud.cscfg]

     <?xml version="1.0" encoding="utf-8"?> <ServiceConfiguration serviceName="WindowsAzure2" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="2" osVersion="*" schemaVersion="2013-03.2.0"> <Role name="Mura CMS1"> <Instances count="1" /> <ConfigurationSettings> </ConfigurationSettings> </Role> </ServiceConfiguration>
          
          







    [Mura.csdef]

     <?xml version="1.0" encoding="utf-8"?> <ServiceDefinition name="WindowsAzure2" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2013-03.2.0"> <WebRole name="Mura CMS1" vmsize="Small"> <Sites> <Site name="Web" physicalDirectory="./Mura CMS1"> <Bindings> <Binding name="Endpoint1" endpointName="Endpoint1" /> </Bindings> </Site> </Sites> <Endpoints> <InputEndpoint name="Endpoint1" protocol="http" port="80" /> </Endpoints> <Startup> <Task commandLine="startup.cmd" executionContext="elevated" taskType="simple" > </Task> </Startup> </WebRole> </ServiceDefinition>
          
          







    [Mura.pack.cmd]

     @echo off set WINDOWS_AZURE_SDK_PATH="C:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\v2.1" call %WINDOWS_AZURE_SDK_PATH%\bin\setenv.cmd pushd %~dp0 if "%ServiceHostingSDKInstallPath%" == "" ( echo Can't see the ServiceHostingSDKInstallPath environment variable. Please run from a Windows Azure SDK command-line (run Program Files\Windows Azure SDK\^<version^>\bin\setenv.cmd^). GOTO :eof ) rem     ,  IIS  .. rem iisreset /stop rem      Windows Azure cspack Mura.csdef /out:Mura.cspkg popd
          
          





    Mura.pack.cmd. Mura.cspkg 275 . : Java . 300 .



    , Azure Cloud Services , . .



    おわりに





    , . . , PHP ASP.NET, Windows Azure. Helicon Zoo PHP Hosting Package, Microsoft PHP , Zoo .



    , – . , «» Azure, . , , Windows Linux. , Azure , , , Media Services, Mobile Services, SQL Databases . , .



All Articles