本番用の構築:Webアプリケーション—展開

前書き

チュートリアルのこの部分では、サンプルPHPアプリケーション、WordPress、およびプライベートDNSをデプロイします。

image:https://assets.digitalocean.com/articles/architecture/production/lamp/dns_application.png [DNS +アプリケーション図]

ユーザーは、ドメイン名を介してHTTPS経由でアプリケーションにアクセスします。 ロードバランサを指す「https://www.example.com」。 ロードバランサーは、アプリケーションサーバーへのリバースプロキシとして機能し、データベースサーバーに接続します。 プライベートDNSにより、名前を使用してサーバーのプライベートネットワークアドレスを参照できるようになり、サーバーの構成プロセスが容易になります。

6台のサーバーで説明したコンポーネントを次の順序でセットアップします。

  • プライベートDNS(ns1およびns2)

  • データベースサーバー(db1)

  • アプリケーションサーバー(app1およびapp2)

  • ロードバランサー(lb1)

DNSのセットアップを始めましょう。

プライベートDNSサーバー

アドレスに名前を使用すると、作業しているサーバーの識別に役立ち、無数の構成ファイルを更新する代わりにDNSレコードを(1か所で)更新するだけでサーバーを交換できるため、大規模なサーバーセットアップのメンテナンスに不可欠になりますIPアドレス。 設定では、DNSを設定して、IPアドレスではなく名前でサーバーのプライベートネットワークアドレスを参照できるようにします。

「nyc3.example.com」サブドメインの下のホスト名で各サーバーのプライベートネットワークアドレスを参照します。 たとえば、データベースサーバーのプライベートネットワークアドレスは「db1.nyc3.example.com」となり、これはそのプライベートIPアドレスに解決されます。 サブドメインの例はほぼ完全に任意であり、通常は論理的な編成目的に基づいて選択されることに注意してください。この場合、「nyc3」はサーバーがNYC3データセンターにあることを示し、「example.com」はアプリケーションのドメイン名です。

これをセットアップするには、このチュートリアルに従い、セットアップ内の各サーバーにDNSレコードを追加します。

DNSチュートリアルを完了すると、* ns1 ns2 *の2つのBINDサーバーが必要になります。 セットアップ内のすべてのサーバーのプライベートIPアドレスがすでにわかっている場合は、ここでそれらをDNSに追加してください。そうでない場合は、サーバーの作成時に適切なDNSレコードを追加します。

これで、データベースサーバーをセットアップする準備が整いました。

データベースサーバーのセットアップ

アプリケーションサーバーの負荷を分散する必要があるため、つまり ApacheとPHPを実行している場合は、データベースを別のサーバーにセットアップして、アプリケーションサーバーからデータベースを分離する必要があります。 このブログ投稿で説明されているように、データベースをアプリケーションから切り離すことは、多くのタイプのアプリケーションを水平にスケーリングする前に不可欠なステップです。https://www.digitalocean.com/company/blog/horizo​​ntally-scaling-php-applications/ [Horizo​​ntally Scaling PHPアプリケーション:実用的な概要]。

このセクションでは、データベースサーバーのセットアップに必要なすべての手順について説明しますが、このチュートリアルでは、PHPアプリケーション用のリモートの分離されたMySQLデータベースサーバーのセットアップの詳細を学ぶことができます:https://www.digitalocean.com/community/ tutorials / how-to-setup-a-a-remote-database-to-optimize-site-performance-with-mysql [リモートMySQLデータベースのセットアップ方法]。

MySQLをインストールする

データベースサーバー* db1 *にMySQLサーバーをインストールします。

sudo apt-get update
sudo apt-get -y install mysql-server

プロンプトで目的のMySQLルートパスワードを入力します。

今すぐ実行:

sudo mysql_install_db
sudo mysql_secure_installation

上記の手順で設定したMySQL管理者のパスワードを入力する必要があります。 その後、そのパスワードを変更するかどうかを尋ねられます。 現在のパスワードに満足している場合は、「N」と入力します。 残りの質問にはデフォルトで回答します。

プライベートネットワークインターフェイスでリッスンするようにMySQLを構成する

MySQL構成ファイルを開きます。

sudo vi /etc/mysql/my.cnf

`+ bind-address +`設定を見つけて、データベースサーバーのプライベートネットワークアドレスのアドレスに変更します。

/etc/mysql/my.cnf

bind-address            =

保存して終了。

MySQLを再起動します。

sudo service mysql restart

データベースとデータベースユーザーのセットアップ

次に、アプリケーションサーバーが接続に使用するデータベースとデータベースユーザーを作成する必要があります。

MySQLコンソールに入ります:

mysql -u root -p

プロンプトでMySQLルートパスワードを入力します。

MySQLプロンプトで、アプリケーションのデータベースを作成します。

CREATE DATABASE ;

MySQLは、ユーザーを接続元のサーバーに関連付けます。 この例では、接続するアプリケーションサーバーが2つあるため、それぞれにユーザーを作成する必要があります。 各アプリケーションサーバー(* app1 および app2 *)のプライベートネットワークアドレスから接続できるデータベースユーザー(この例では「appuser」)を作成します。 各ユーザーに同じパスワードを使用する必要があります。

CREATE USER ''@'' IDENTIFIED BY '';
CREATE USER ''@'' IDENTIFIED BY '';

最終的なデータベースユーザー権限は後で設定しますが、* appuser app *データベースに対するフルコントロールを与えましょう。

GRANT ALL PRIVILEGES ON .* TO ''@'';
GRANT ALL PRIVILEGES ON .* TO ''@'';
FLUSH PRIVILEGES;

これらの緩和された特権により、アプリケーションのインストーラーがデータベースにアプリケーションをインストールできるようになります。 3つ以上のアプリケーションサーバーがある場合は、必要なすべてのデータベースユーザーをここで作成する必要があります。

今すぐMySQLプロンプトを終了します。

exit

データベースサーバーのセットアップが完了しました。 アプリケーションサーバーをセットアップしましょう。

アプリケーションサーバーのセットアップ

アプリケーションサーバーはアプリケーションのコードを実行し、データベースサーバーに接続します。 サンプルアプリケーションはWordPressです。これは、ApacheやNginxなどのWebサーバーを介して提供されるPHPアプリケーションです。 アプリケーションサーバーの負荷を分散するため、2つの同一のサーバーをセットアップします。

このセクションでは、アプリケーションサーバーをセットアップするために必要なすべての手順を説明しますが、このトピックについては、* Webサーバーのセットアップ*セクションから始まる次のチュートリアルで詳しく説明します。https://www.digitalocean.com/community / tutorials / how-to-set-up-a-remote-database-to-optimize-site-performance-with-mysql [リモートデータベースのセットアップ方法]。

ApacheとPHPをインストールする

  • app1 app2 *の両方のアプリケーションサーバーで、ApacheとPHPをインストールします。

sudo apt-get update
sudo apt-get -y install apache2 php5-mysql php5 libapache2-mod-php5 php5-mcrypt

Apacheを構成する

ロードバランサーサーバーでHAProxyを使用してSSL終了を処理するため、ユーザーがアプリケーションサーバーに直接アクセスすることは望ましくありません。 そのため、Apacheを各サーバーのプライベートネットワークアドレスにバインドします。

各アプリケーションサーバー* app1 および app2 *で、Apacheポート構成ファイルを開きます。 デフォルトでは、これは `+ ports.conf +`ファイルです:

sudo vi /etc/apache2/ports.conf

「+ Listen 80+」という行を見つけて、プライベートIPアドレスを追加します(サーバーの実際のIPアドレスに置き換えます)。

Apache ports.conf-プライベートインターフェイスでリッスンします

Listen :80

保存して終了。 これにより、プライベートネットワークインターフェイスでのみリッスンするようにApacheが構成されます。つまり、パブリックIPアドレスまたはホスト名ではアクセスできません。

Apacheを再起動して、変更を有効にします。

sudo service apache2 restart

Apacheは、アプリケーションサーバーのプライベートネットワークアドレス経由でのみアクセスできるようになりました。 ここで、すぐにユーザーリクエストを送信するようにロードバランサーを構成します。

アプリケーションのダウンロードと構成

この例では、WordPressをアプリケーションとして使用しています。 別のPHPアプリケーションを使用している場合は、ダウンロードして、関連する構成を実行します(例: データベース接続情報)、次のセクションにスキップします。

最初のアプリケーションサーバー* app1 *で、WordPressアーカイブをダウンロードします。

cd ~
wget http://wordpress.org/latest.tar.gz

WordPressアーカイブを抽出します。

tar xvf latest.tar.gz

抽出されたディレクトリに変更します。

cd wordpress

WordPressには、アップロード用のディレクトリ `+ wp-content / uploads +`を作成する必要があります。 それでは、それをやってみましょう。

mkdir wp-content/uploads

サンプルのWordPress設定ファイルをテンプレートとして使用します。 適切な場所にコピーします。

cp wp-config-sample.php wp-config.php

次に、編集のために構成ファイルを開きます。

vi wp-config.php

次の行で強調表示されている情報を変更して、WordPressデータベース接続を構成します。

wp-config.php

/** The name of the database for WordPress */
define('DB_NAME', '');

/** MySQL database username */
define('DB_USER', '');

/** MySQL database password */
define('DB_PASSWORD', '');

/** MySQL hostname */
define('DB_HOST', '');

ロードバランサーサーバーでTLS / SSL暗号化を使用するため、次の行を追加して、SSLを使用しているリバースプロキシの背後にあることをWordPressが認識するようにする必要があります。

define('FORCE_SSL_ADMIN', true);
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
      $_SERVER['HTTPS']='on';

また、キーとソルトを更新して、必要なときにCookieを無効にすることもできます。 ここでは説明しませんが、すべてのアプリケーションサーバーで同一であることを確認してください。

保存して終了。

これでWordPressが設定されましたが、そのファイルを適切な場所にコピーして、当社のWebサーバーソフトウェアで提供する必要があります。

アプリケーションファイルをドキュメントルートにコピーする

アプリケーションの構成が完了したので、それをApacheのドキュメントルートにコピーする必要があります。ここで、Webサイトの訪問者に提供できます。

ApacheのDocumentRootのデフォルトの場所は `+ / var / www / html +`であるため、この例で使用します。

最初に、デフォルトの `+ index.html`ファイルを削除します:

sudo rm /var/www/html/index.html

次に、rsyncを使用してWordPressファイルを + / var / www / html +`にコピーし、 `+ www-data +(Apacheを実行するユーザー)を所有者にします。

sudo rsync -avP ~/wordpress/ /var/www/html
sudo chgrp -R www-data /var/www/html/*

最初のアプリケーションサーバーapp1の準備ができました。 他のアプリケーションサーバーをセットアップします。

アプリケーションファイルを他のサーバーに複製する

さまざまなアプリケーションサーバー間でアプリケーションのファイルの一貫性を保つために、Webサーバーのドキュメントルートのファイル複製を設定する必要があります。 WordPressの場合、Webインターフェースを使用してファイルをアップロードし、プラグインをインストールすると、リクエストを処理する特定のサーバーにファイルが保存されます。 これらのファイルがすべてのアプリケーションサーバーにレプリケートされていない場合、一部のユーザーには、画像が欠落していてプラグインが破損しているページが提供されます。 PHPアプリケーションがWordPressではなく、そのデータを保存しない場合(例: アップロードされたファイルまたはダウンロードされたプラグイン)をアプリケーションサーバーに保存する場合、アプリケーションファイルを手動で1回コピーするだけです。 この場合、rsyncを使用して、アプリケーションファイルを* app1 から app2 *にコピーします。

GlusterFSを使用して、必要なファイルの複製ボリュームを作成できます。これは、このチュートリアルの* Webアプリケーションファイルの同期*セクションで説明されています:https://www.digitalocean.com/community/tutorials/how-to-use -haproxy-as-a-layer-4-load-balancer-for-wordpress-application-servers-on-ubuntu-14-04#synchronize-web-application-files [WordPressアプリケーションのロードバランサーとしてHAProxyを使用する方法サーバー]。 指示に従って(ホストファイルの編集の場所をスキップし、DNSが処理します)、* app1 app2 *間のレプリケーションをセットアップします。

レプリケーションを適切に設定したら、両方のアプリケーションサーバーを適切に構成する必要があります。 ロードバランサーを設定します。

Load Balancer Serverをセットアップする

ロードバランサーサーバーは、アプリケーションサーバーのリバースプロキシロードバランサーとして機能するHAProxyを実行します。 ユーザーは、 `+ https:// www.example.com +`などのURLを介してロードバランサーサーバー経由でアプリケーションにアクセスします。

このセクションでは、ロードバランサーサーバーをセットアップするために必要なすべての手順を説明しますが、次のチュートリアルで詳細に説明します。

SSL証明書をコピー

ロードバランサーサーバー* lb1 *でこれらの手順を実行します。

SSL証明書を含むディレクトリ(パート1の前提条件の1つ)で、証明書、中間CA証明書、および証明書のキーを単一の `+ .pem `ファイルに結合します。 たとえば(証明書は ` / root / certs +`にあります:

cd /root/certs
cat www.example.com.crt CAintermediate.ca-bundle www.example.com.key > www.example.com.pem

次に、pemファイルを `+ / etc / ssl / private +`にコピーします。

sudo cp www.example.com.pem /etc/ssl/private/

このファイルは、SSL終了のためにHAProxyによって使用されます。

HAProxyをインストールする

ロードバランサーサーバー* lb1 *で、HAProxyをインストールします。

sudo add-apt-repository ppa:vbernat/haproxy-1.5
sudo apt-get update
sudo apt-get -y install haproxy

それでは、HAProxyを設定しましょう。

HAProxy設定

HAProxyを適切な設定、SSL終了、適切なフロントエンドとバックエンドで構成して、アプリケーションサーバーで動作するようにする必要があります。

編集のためにHAProxy構成ファイルを開きます。

sudo vi /etc/haproxy/haproxy.cfg
HAProxy構成:一般設定

最初に行うことは、maxconnを適切な数に設定することです。 この設定は、HAProxyが許可する同時接続の数に影響を与えます。これにより、QoSに影響を与え、Webサーバーがクラッシュしてリクエストが多すぎないようにできます。 あなたの環境に合うものを見つけるために、それをいじる必要があります。 構成のグローバルセクションに次の行を(妥当と思われる値で)追加します。

haproxy.cfg-maxconn

  maxconn

生成される一時DHEキーの最大サイズを構成するには、次の行を追加します。

haproxy.cfg-tune.ssl.default-dh-param

  tune.ssl.default-dh-param 2048

次に、デフォルトセクションで、モードhttpと書かれている行の下に次の行を追加します。

haproxy.cfg

  option forwardfor
  option http-server-close

HAProxy統計ページを有効にする場合は、デフォルトセクションに次の行を追加します(ユーザーとパスワードを安全な値に置き換えます)。

haproxy.cfg

  stats enable
  stats uri /
  stats realm Haproxy\ Statistics
  stats auth :

これにより、/ stats(たとえば、 「https://www.example.com/stats%22[https://www.example.com/stats」])。

まだ構成ファイルを閉じないでください! 次にプロキシ設定を追加します。

HAProxy設定:プロキシ

最初に追加したいのは、着信HTTP接続を処理するフロントエンドです。 ファイルの最後に、www-httpというフロントエンドを追加しましょう。

frontend www-http
  bind :80
  reqadd X-Forwarded-Proto:\ http
  default_backend app-backend

このフロントエンドの目的は、HTTP接続を受け入れてHTTPSにリダイレクトできるようにすることです。

次に、受信HTTPS接続を処理するフロントエンドを追加します。 適切な `+ pem +`証明書を指定してください:

frontend www-https
  bind :443 ssl crt /etc/ssl/private/.pem
  reqadd X-Forwarded-Proto:\ https
  default_backend app-backend

フロントエンドの設定が完了したら、次の行を追加してバックエンドの追加を続けます。

backend app-backend
  redirect scheme https if !{ ssl_fc }
  server app1 :80 check
  server app2 :80 check

このバックエンドは、負荷分散トラフィックを送信するアプリケーションサーバーを指定します。 また、 `+ redirect scheme https +`行は、HTTP接続をHTTPSにリダイレクトするように指示します。

ここでhaproxy.cfgを保存して終了します。 HAProxyを開始する準備ができましたが、最初にロギングを有効にしましょう。

HAProxyロギングを有効にする

rsyslog構成ファイルを開きます。

sudo vi /etc/rsyslog.conf

次に、次の行を見つけてコメント解除し、UDP syslog受信を有効にします。 完了すると、次のようになります。

/etc/rsyslog.conf

$ModLoad imudp
$UDPServerRun 514
$UDPServerAddress 127.0.0.1

rsyslogを再起動して、新しい構成を有効にします。

sudo service rsyslog restart

HAProxyロギングが有効になりました! HAProxyが開始されると、ログファイルは `+ / var / log / haproxy.log +`に作成されます。

HAProxyを再起動します

HAProxyを再起動して、変更を有効にします。

sudo service haproxy restart

これでロードバランサーがセットアップされました。

次に、アプリケーションのインストールスクリプトを実行する必要があります。

WordPressをインストールする

使用する前に、データベースを使用できるように準備するWordPressインストールスクリプトを実行する必要があります。

Webブラウザーでサイトを開きます。

Open in a Web Browserhttps:///wp-admin/install.php

これにより、WordPressインストール画面が表示されます。 フォームに記入し、[WordPressのインストール]ボタンをクリックします。

WordPressのインストール後、アプリケーションを使用する準備が整います。

結論

これで、アプリケーションを構成するサーバーがセットアップされ、アプリケーションを使用する準備が整いました。 adminユーザーとしてログインし、ユーザーは適切なドメイン名を介してHTTPS経由でサイトにアクセスできます。

先に進む前に、必ずアプリケーションをテストし、期待どおりに機能することを確認してください。

次のチュートリアルに進んで、実稼働アプリケーションのセットアップのリカバリプランの作業を開始してください:https://www.digitalocean.com/community/tutorials/building-for-production-web-applications-recovery-planning Webアプリケーション-回復計画]。

Related