クラウド環境でDrupalをホストするためのベストプラクティス

画像

この記事の主な目的は、Microsoft Azureプラットフォームのクラウド環境でDrupalをホストする機能とベストプラクティスについて説明することです。 。 翻訳]。 このガイドでは、次のことを学習します。





既存のDrupal Webサイトをクラウドに移行する方法



Drupal上のサイトをAzureクラウドに移行するのは簡単です。 下記のベストプラクティスを使用するだけで、わずか1時間でサイトをクラウド環境のDrupalに移動できます。



Azure WebサイトとMySQLデータベースを構築する



開始するには、AzureでMySQLとGitをサポートする新しいWebサイトを作成します( 手順ごとの手順を使用できます)。 この記事では、クラウドでのMySQL無料バージョンの使用について説明しています。 このバージョンのデータベースは開発段階には最適ですが、産業用には、AzureストアのClearDBからデータベースのクラウドベースのコピーを購入する必要がある場合があります。 共通のデータベースクラスターを取得するための一連の計画から選択できます。 詳細については、AzureストアClearDBの記事を参照してください。 共通のデータベースクラスターを使用する計画が適切でない場合は、専用のMySQLクラスターを選択できます。 詳細は、次のリンクClearDBのミッションクリティカルなデータベースプランをご覧ください。



DrupalサイトにGitを使用する場合は、Gitリポジトリーの構成方法を説明したガイドの手順に従ってください。 この情報は後で必要になるため、リモートMySQLサーバーへの接続に関する情報の取得に関するセクションで説明されている必要な手順を完了していることを確認してください。 サイトをDrupalにデプロイするためのガイドの最後の部分は無視してもかまいませんが、Azure(またはGit)クラウドを探索するだけの場合は、ガイドのこの部分が役立つかもしれません。



MySQLデータベースを使用して新しいAzure Webサイトを開始すると、リモートデータベースと(オプションで)Gitリポジトリへの接続に関する情報が得られます。 次のステップは、MySQLデータベースをAzure Webサイトにコピーすることです。



MySQLのデータベースをAzure Webサイトにコピーする



データベースをAzureに移行する方法は多数あります。 MySQLを移行する1つの実証済みの方法は、[MySqlDump]ツールを使用することです。 次のコマンドは、ローカルマシンからAzure Web Sitesクラウドにコピーする例を示しています。



mysqldump -u local_username --password = local_password drupal | mysql -h remote_host -u remote_username --password = remote_password remote_db_name



もちろん、既存のDrupalデータベースのユーザー名とパスワードを提供する必要があります。 さらに、最初の手順で作成したMySQLデータベースのホスト名、ユーザー名、パスワード、データベース名を転送する必要があります。 この情報は、以前に受け取った接続文字列で利用できます。 接続文字列の形式は次のとおりです。



データベース= remote_db_name;データソース= remote_host;ユーザーID = remote_username;パスワード= remote_password



データベースのサイズによっては、コピープロセスに数分かかる場合があります。



データベースは現在、Azure Web Sitesクラウドにあります。 Drupalコードを投稿する前に、新しいデータベースに接続できるように修正する必要があります。



settings.phpでデータベース接続を変更する



このステップでは、新しいデータベースへの接続に関する情報が再び必要になります。 エディターでファイル<drupalsite> /sites/default/setting.phpを開き、 $ databases配列の値「database」、「username」、「password」、および「host」を新しいデータベースに設定された値に置き換えます。 次のような結果になるはずです。



$databases = array ('default'=>array ('default'=>array ('database'=>'remote_db_name','username'=>'remote_username', 'password'=>'remote_password','host'=>'remote_host','port'=>'', 'driver'=>'mysql','prefix'=>'',),),);
      
      





注: settings.phpに $ base_url構成パラメーターがある場合 、Drupal CMSは$ base_urlのセットからURLアドレスを作成するため、コメント化します 。 クラウドサイトがカスタムドメインを使用するように構成された直後に、 $ base_urlパラメーターを再度使用できます。 settings.phpファイルを保存します。



これで、コードをホストする準備が整いました。



GitまたはFTPを使用してDrupalコードをホストする



最後のステップは、GitまたはFTPを使用してAzure Webサイトクラウドでコードをホストすることです。





Azure Storage Moduleを構成する方法



Drupalをインストールした直後に、Blob Storageモジュールを有効にして構成する必要があります。これは、Azure Storageクラウドストレージを使用してメディアファイルを保存します。 このモジュールを構成するには、次の手順を使用します。 管理者としてサイトにログインし、モジュールタブでAzure Storageモジュールを有効にします。 このモジュールがモジュールのリストにない場合は、ここからインストールしてください



image_thumb [15]



[ 構成 ]タブをクリックし、[ メディア]セクションで[ Azureストレージ ]を選択します



image_thumb [13]



[ 追加 ]ボタンをクリックして、Drupalサイトで使用されるストレージアカウント情報を追加します。 すべての詳細を示します。ストレージアカウントの名前、既存のコンテナーの名前(コンテナーはパブリックでなければなりません)、blobストレージURLのアドレス、プライマリアクセスキー。 リポジトリがCDNに関連付けられている場合はカスタムURLパラメーターを使用し、CDNアドレスをここに入力します。 CDNを使用していない場合、このフィールドは空白のままにします。



image_thumb [11]



[ 構成 ]タブに再度移動し、[ メディア]セクションで[ ファイルシステム ]を選択します 。 項目を選択し、 「構成の保存」をクリックして設定を保存します。



image_thumb [9]



次に、[ 構造]-> [コンテンツタイプ]を選択します 次に 記事タイプのマネージャーフィールドをクリックします ダイアログボックスで、新しいマテリアルを作成するときに[ イメージのアップロード ]オプションを表示するイメージラベルがあるかどうかを確認します。 (さまざまな形式の)ファイルのダウンロードをサポートする場合は、[ファイルのアップロード]のチェックボックスも有効にします。



image_thumb [7]



次に、イメージラベルの[編集]をクリックし、[ アップロード先 ]の[Azureストレージ]オプションを選択します 。 ファイルをダウンロードするために持っている他のすべてのタグについても同じことを行います(FILEフィールドタイプを使用)。



image_thumb [6]



手順を繰り返して、イメージまたはその他のファイルのダウンロードをサポートするコンテンツのタイプの構成をアップグレードします。



キャッシュをサポートするようにMemcached Cloudを構成する方法



memcachedをマネージドサービスとして提供するMemcached Cloudサービスに登録します。 このサービスは現在、Azureプラットフォームの米国東部および米国西部の地域で利用できます。 独自のmemcachedサーバーを管理する場合は、LinuxベースのAzure仮想マシンを使用して簡単に構成できます。 この記事では、クラウドベースのMemcachedの使用について説明します。



Redis labsポータルにログインして、[ 新しいMemcachedサブスクリプション]を選択します



image_thumb [17]



サービスのクラウドプラットフォーム/リージョンと使用するプランを選択します。 無料のプラン(25 MB)は、開発およびテストの目的には優れていますが、産業運用のサイトに必要な十分なレベルのパフォーマンスを提供しません。 [ 選択]をクリックして、独自のmemcachedエンドポイントを作成します。



image_thumb [20]



必要な情報をすべて入力します。 Drupalに使用するモジュールは、memcachedサーバーに追加できるSASL(Simple Authentication and Security Layer)をサポートしていないため、現在のステップでこのオプションをオフにしました。 リソース名を入力して、「 アクティブ化」をクリックします。 memcachedのセキュリティレベルをサポートするモジュールが既にある場合は、memcachedエンドポイントの作成中に有効にすることができます。



image_thumb [24]



これで、Redis Labsポータルからmemcachedサービスを管理できます。



image_thumb [25]



サーバーエンドポイントを取得するには、作成したリソース名をクリックします。 後でDrupalを構成するために必要になるエンドポイント値を覚えておいてください。



image_thumb [27]



ここから memcached PECL拡張モジュールをダウンロードしてコピーします 。 この拡張機能はPHP5.4(32ビット)用であることに注意してください。 サイトで別の構成を使用している場合は、 ここから適切なライブラリ選択します 。 Drupalのmemcachedモジュールをインストールします。 Azure Webサイトコントロールパネルで、サイトの構成を更新します。 [構成]タブのアプリ設定セクションで、値が「bin \ php_memcache.dll」PHP_EXTENSIONSパラメーターを追加します



$ conf変数のsettings.phpファイルで、memcachedサーバーを追加します。 サーバーを指定しない場合、memcache.incは、memcachedサーバーのインスタンスがポート11211(127.0.0.1:11211またはlocalhost:11211)のローカルマシンで実行されていると判断します。動作します。



次の配列例は、パターンを示しています。



 $conf['memcache_servers'] = array( 'pub-memcache-10939.us-east-1.1.azure.garantiadata.com: 10939' => 'default' );
      
      





詳細については、 DrupalMemcache APIマニュアルを参照してください。 上記の構成では、すべてのDrupal操作に1つのサーバーのみを使用できますが、データセットを複数のMemcachedサーバーに分割する場合は、Azureストアで新しいMemcachedサーバーエンドポイントを作成することで簡単にこれを行うことができます。 以下に、2つのMemcachedサーバーを使用した簡単なセットアップを示します。この例では、バケット2にキャッシュされる「ページ」を除き、すべてのデータがバケット1にキャッシュされます。



  $conf['memcache_servers'] = array( 'server1_hostname:server1_port' => 'default', 'server2_hostname:server2_port' => 'pages' ); $conf['memcache_bins'] = array( 'cache_page' => 'pages', );
      
      





最も一般的なキャッシングアプローチは、コンテンツ配信ネットワーク(CDN)とMemcachedサービスの使用を混在させることです。 Drupalはデータベースを使用してキャッシュを保存します。 コンテンツが変更された場合、変更を定義することにより、Drupalはキャッシュを廃止としてマークし、コンテンツの一貫性を維持します。 Memcachedは、Drupal内部キャッシングシステムを置き換えます。



AzureのDrupal CMSのベストプラクティス



クラウド内のサイトに関する一般的な推奨事項:



  1. 将来の計画 :サイトのパフォーマンスと要件、およびユーザーのトラフィックパターンを監視して、オンデマンドでインフラストラクチャのスケーリングを計画する必要があります。
  2. サイトのバックアップ: サイトのバックアップ[Azure Web Sitesには、自動バックアップおよび復元機能が組み込まれています。 翻訳]。 バックアップおよび回復手順をテストします。


次に、Drupal CMSに焦点を当て、Azure Webサイトクラウド環境でDrupal CMSを構築および管理するためのいくつかのベストプラクティスを学びましょう。



セキュリティ構成



  1. 配置する前にすべての一時ファイルを削除します。 ファイルの編集中に、たとえば.bakファイル、「〜」記号で終わる名前のファイル、 settings.php.origなどの一時的なバックアップコピーを作成できます。 これらのファイルは、URLの書き換えルールを使用してweb.configファイルの設定からアクセスを拒否しない場合、ブラウザーで表示できます。 このようなファイルは、サイトの脆弱性となり、攻撃者にアクセスできる可能性があります。 そのようなファイルをすべて削除します。 任意のタイプのファイルへのアクセスを拒否することにより、構成ファイルにルールを追加することにより、そのようなファイルへのアクセスを制限できます。 さらに、Azure Webサイトが提供するWebJobsバックグラウンドタスク機能を使用して、一時ファイルを削除するタスクを簡単に自動化できます。
  2. ログイン用のSSLを有効にします。 Drupalでは、ユーザーがログインするときにSecure Sockets Layer(SSL)を使用する必要はありません。 これにより、攻撃者がサイトへの管理アクセスを取得しやすくなります。 drupal.orgからSecure Pagesモジュールをインストールして有効にします。 このモジュールは、各ユーザーがSSL経由で提供されるようにします。
  3. 安全でないダウンロードフィールドを無効にします。 ユーザーがサイトにファイルをアップロードできるようにする不要なファイルおよび画像フィールドを拒否します。 攻撃者はこれらの機能を使用して、システムに混乱を引き起こす可能性のあるファイルをダウンロードすることにより、Webサイトを制御することができます。 ダウンロードが許可されるファイルの種類に制限を入力し、タイプが.exe、.swf、.flv、.htm、.php、.vb、.vbsのファイルをダウンロードする機能を削除します。
  4. セキュリティキットをオンにします。 セキュリティキットモジュールは、クリックジャッキング、クロスサイトリクエストフォージェリ(CSRF)、クロスサイトスクリプティング(XSS)などの攻撃に対する保護など、サイトのセキュリティを改善します。 このモジュールにはデフォルトの構成を使用することをお勧めしますが、サイトにモジュールが満たさない特別な要件がある場合は、モジュールが単独で動作するように構成できます。 詳細については、 モジュールのページを参照してください
  5. 管理者アカウントに共通のユーザー名を使用しないでください。 管理者アカウントの名前はadmin、administrator、またはrootであってはなりません。これらは広く普及しており、サイトにセキュリティ上の脆弱性をもたらす可能性があります。 複雑または一意のユーザー名を使用して、ハッキングを回避します。
  6. ユーザーからのサイトエラーに関する情報の出力を非表示にします。 これらのエラーメッセージには、サイトまたはサーバーに関する重要な機密情報が含まれ、訪問者に提供されます。 ユーザーにエラー情報を表示しないようにサイトを構成するには、/ admin / config / development / loggingで[ログとエラー]ページを開き、表示するエラーメッセージから[なし]を選択して[構成の保存]をクリックします。
  7. パスワードポリシーモジュールを有効にします。 ウェブサイトのコンテンツ編集者は、簡単に解読できるパスワードを使用することを決定する場合があります。これにより、攻撃者がサイトにアクセスできるようになります。 脆弱性の可能性を減らすために、 パスワードポリシーモジュールを有効にします 。これにより、必須の強力なパスワードポリシーが有効になります。


パフォーマンス構成



  1. 最小キャッシュライフタイムは5分未満です。 サイトの応答性とパフォーマンスを向上させるために、最小キャッシュライフタイムは、指定された期間の変更後、ページおよびブロックキャッシュのクリアを防ぎます。 最小キャッシュライフタイムを5分未満に設定すると、サーバーはサイトの訪問者に新しいコンテンツを配信するためにより多くの作業を行います。 Webサイトで最小キャッシュライフタイムを5分以上に設定するには、/ admin / config / development / performanceの[パフォーマンス]ページを開き、[最小キャッシュライフタイム]パラメーターに新しい値を選択します。 ページをキャッシュに入れたいという要望と、訪問者ができるだけ早く新鮮なコンテンツを取得する必要性を考慮して、このパラメーターをできるだけ大きく設定します。
  2. ページキャッシュの最大有効期間は5分未満です。 ページキャッシュの最大有効期間が5分未満に設定されている場合、サーバーはより頻繁にページを再生成するように強制されます。 これにより、サイトのパフォーマンスが低下します。 パラメーター値を5分以上に設定するには、/ admin / config / development / performanceのPerformanceページを開き、 Page cache max ageパラメーターの新しい値を選択します
  3. CSSおよびJSスクリプトを最適化します。 CSS / JS最適化をオフにすると、ユーザーはページ速度が低下し、サーバーの負荷が増加します。 CSSの最適化を有効にするには、/ admin / config / development / performanceの[パフォーマンス]ページを開き、[CSSファイルの集約と圧縮]オプションを設定します。 JavaScriptの最適化を有効にするには、/ admin / config / development / performanceの[パフォーマンス]ページを開き、[JavaScriptファイルの集約]オプションを設定します。
  4. ページ圧縮をオンにします。 ページの圧縮がオフの場合、サイト訪問者はこれらのページのダウンロード時間が長くなります。 キャッシュに保存する前にページを圧縮して、バックエンドとのネットワーク共有を減らします。 ページ圧縮を有効にするには、/ admin / config / development / performanceでパフォーマンスページを開き、匿名ユーザーのキャッシュページパラメーターが設定され、キャッシュページの圧縮パラメーターが設定されていることを確認します。


Azure Webサイトの構成



  1. Azure Webサイト管理ポータルを介して、サーバーログを有効にし、Azure Storageを使用してそれらを保存します。 メディアコンテンツを保存するために設定したものと同じストレージを使用できます。 詳細については、 Azure Webサイト診断ガイドを参照してください。
  2. 自動スケーリングを設定します。これにより、サイトのインスタンスの数が自動的に増減します。 詳細については、 自動スケール設定マニュアルを参照してください。
  3. Azure Webサイトの基本モードまたは標準モードを使用します。これにより、専用のVMインスタンス、高性能、SLAのフレームワーク内でのサポートが提供されます。 詳細については、階層ごとの機能を参照してください。
  4. 少なくとも2つの中規模または大規模インスタンスで動作するようにサイトを構成します(インスタンスはWebサイトの特定のVMに対応します)。 1つのインスタンスを使用すると、VMに問題が発生した場合、サイトにアクセスできなくなる可能性があります。 2つのコピーを使用する場合、1つのポイントの障害による障害を回避できます。
  5. Visual Studioまたは他のツールを使用してサイトのストレステストを実行し、サイトのスケーリングの構成により、計算されたトラフィックを実際に処理できることを確認します。
  6. サイトの自動駆除を設定します。これにより、サイトの状態の特定のインジケーターに基づいてVMが再起動されます。 詳細については、Webサイトを自動修復する方法の記事を参照してください。


コードのベストプラクティス



  1. Drupalコアを変更しないでください。 このような変更を行うと、Drupalバージョンの管理とWebサイトの更新が複雑になり、サイトの成長に伴ってサイトを維持することが難しくなります。
  2. 多数のモジュールを使用しないでください。 Drupalは、CMSの機能を拡張するモジュールを追加できるようにすることで柔軟性を提供します。 しかし、これに加えて、モジュールが多すぎるとサイトのパフォーマンスに影響を与え、サイトの速度が低下する可能性があります。
  3. web.configを使用してAzure Webサイトを起動します。 Azure WebサイトWebサイトはIISを使用します。これにより、web.configファイルを使用して、ファイルへの不正アクセスに対する保護を管理し、書き換えURLを管理できます。 Drupalサイト用にここで提供さているweb.configの例を使用してください。 特定のユーザーを特定のVMインスタンスに固定するApplication Request Routing Cookieを拒否する必要があります。 この機能をオフにすると、Azureが提供する通常の負荷分散動作をWebサイトで使用できるようになります。 詳細については、 ARR Cookie無効化の記事をご覧ください。 適切な構成のために、 <system.webserver>の直後にweb.configファイルに次のセクションを追加します


 <httpProtocol> <customHeaders> <add name="Arr-Disable-Session-Affinity" value="True" /> </customHeaders> </httpProtocol>
      
      





世界中のいくつかの地域へのDrupalスケーリング



Webサイトのコピーを世界中のさまざまな地域に配置することにより、1つのデータセンターで1つのWebサイトのコピーのみに依存している場合に、単一障害点のリスクを軽減できます。 クラウドソリューションを使用する際に留意すべき重要な点は、各コンポーネント(Webサイト、データベース、キャッシュなど)が失敗する可能性があることを理解することです。したがって、これらの障害を処理できるようにする必要があります。処理して稼働時間を確保します。 これにより、サービス障害が原因である可能性のある運用コストが削減されます。



このシナリオでは、米国東部と米国西部など、少なくとも2つの地域でDrupal Webサイトをホストする必要があります。 AzureのDrupal Webサイトのアクティブ-アクティブ(マスター-マスター)構成を検討します。



  1. それぞれのMySQLデータベースにリンクされた2つのAzure Webサイト
  2. 両方のMySQLデータベースは、データベースレプリケーションを使用して同期されます
  3. Azure Traffice Managerサービスを使用すると、ユーザートラフィックは、パフォーマンス、フェールオーバー、ラウンドロビンの3つの方法のいずれかを使用して、地域ごとに分散されます。
  4. フェールオーバーで構成されたMemcachedマネージドサービス
  5. Azure StorageはAzure CDNで地理的冗長性を使用します


このアーキテクチャは非常に簡単に作成できますが、アプリケーションに特別な要件がある場合は、この構成を自分用にカスタマイズできます。 次の変更を行うことができます。





ウェブサイトのスケーリング



Azure Webサイトのスケールアップには2つの手順が必要です。Webホスティングプランモードをより高いレベルに変更し、新しいプランに移行した後に特定の設定を構成します。 この記事では、両方のアクションについて説明しました。 標準モードなどのより高いレベルでは、リソースの使用方法に高いパフォーマンスと柔軟性が提供されます。 詳細については、 Azure Webサイトのドキュメントをスケーリングする方法を参照してください。



データベースのスケーリング



アプリケーションは、Azure Webサイトとデータベースの2つのコンポーネントに依存しています。 データベースの作成方法に応じて、高可用性とフォールトトレランスのためにデータベースを拡張するいくつかの方法が提供されます。 たとえば、2つのシナリオがあります。



  1. CrearDBサービスを使用する場合は、ClearDB 高可用性ルーティング (CDBR)を構成するだけです。 ClearDBサービスは、リージョンのペア(米国東部と米国西部など)間のデータベースレプリケーションを提供しますが、Azure Webジョブを使用して独自のデータベースレプリケーションツールを作成および使用できます。
  2. MySQL Cluster CGE , MySQL Microsoft Azure. , MySQL, .


Memcached



Memcached Cloud Redis Labs . memcached , memcached . Memcached Cloud Features .



Traffic Manager



Azure Traffic Manager , -. Traffic Manager , DNS -. - . Traffic Manager :





Azure Traffic Manager Azure.



image_thumb [31]



, ADD -, .



image_thumb [33]



Web Site -,



ウェブサイトのエンドポイントを追加



traffic manager. URL traffic manager , .



おわりに



Drupal Azure Web Sites. , , Drupal Azure . Drupal Microsoft Azure.



サイトリンク






All Articles