Ubuntu 18.04でLEMPを使用してSymfony 4アプリケーションを本番環境にデプロイする方法

_著者はhttps://www.brightfunds.org/organizations/software-in-the-public-interest-inc [公益事業会社のソフトウェア]を選択してhttps://do.co/の一部として寄付を受け取りましたw4do-cta [DOnationsの書き込み]プログラム。

前書き

https://symfony.com [Symfony]は、エレガントな構造と、サイズに関係なくプロジェクトを開始するのに適したフレームワークであるという評判を持つ、オープンソースのPHPフレームワークです。 再利用可能なコンポーネントのセットとして、その柔軟性、アーキテクチャ、および高性能により、非常に複雑なエンタープライズアプリケーションを構築するための最高の選択肢となっています。

このチュートリアルでは、既存の標準Symfony 4アプリケーションを、Ubuntu 18.04のLEMPスタック(Nginx、MySQL、およびPHP)で本番環境にデプロイします。これにより、サーバーとフレームワークの構造の構成を開始できます。 Nginxは、リバースプロキシサポートなどの追加機能を備えた、人気のあるオープンソースの高性能HTTPサーバーです。 評判が高く、インターネット上で最大かつ最もトラフィックの多いサイトをホストしています。 代わりに独自のSymfonyアプリケーションをデプロイすることを選択した場合、アプリケーションの既存の構造に応じて追加の手順を実装する必要があります。

前提条件

このチュートリアルを完了するには、次のものが必要です。

手順1-アプリケーションのユーザーとデータベースの作成

前提条件の指示に従うことにより、アプリケーションのインストールに必要なすべての基本的なサーバーの依存関係が得られます。 すべての動的Webアプリケーションにはデータベースが必要なので、このセクションでユーザーを作成し、アプリケーションのデータベースを適切に構成します。

アプリケーションとそれに関連付けられたユーザーのMySQLデータベースを作成するには、MySQLルートアカウントを使用してMySQLクライアントにアクセスする必要があります。

mysql -u root -p

適切なパスワードを入力します。これは、 `+ mysql_secure_installation +`の実行時に使用したものと同じパスワードにする必要があります。

次に、次を使用してアプリケーションデータベースを作成します。

CREATE DATABASE blog;

コンソールに次の出力が表示されます。

OutputQuery OK, 1 row affected (0.00 sec)

アプリケーションデータベースが正常に作成されました。 これで、MySQLユーザーを作成し、新しく作成したデータベースへのアクセスを許可できます。

次のコマンドを実行して、MySQLユーザーとパスワードを作成します。 必要に応じて、ユーザー名とパスワードをより安全なものに変更できます。

CREATE USER  @'localhost' IDENTIFIED BY ;

次の出力が表示されます。

OutputQuery OK, 0 rows affected (0.00 sec)

現在、ユーザー* blog-admin には、アプリケーションデータベースに対する適切な権限がありません。 実際、 blog-admin *がパスワードでログインしようとしても、MySQLシェルにアクセスできません。

ユーザーは、データベースで特定のアクションにアクセスしたり、特定のアクションを実行したりする前に、適切な許可が必要です。 * blog-admin ユーザーの blog *データベースへの完全なアクセスを許可するには、次のコマンドを使用します。

GRANT ALL PRIVILEGES ON blog.* TO @'localhost';

次の出力が表示されます。

OutputQuery OK, 0 rows affected (0.00 sec)
  • blog-admin には、 blog *データベース内のすべてのテーブルに対するすべての特権があります。 許可テーブルをリロードして変更を適用するには、flushステートメントを使用してflush-privilege操作を実行する必要があります。

FLUSH PRIVILEGES;

次の出力が表示されます。

OutputQuery OK, 0 rows affected (0.00 sec)

新しいユーザーの作成と特権の付与が完了しました。 順調に進んでいるかどうかをテストするには、MySQLクライアントを終了します。

quit;

そして、作成したばかりのMySQLユーザーの資格情報を使用して再度ログインし、プロンプトが表示されたらパスワードを入力します。

mysql -u  -p

以下を使用して、ユーザーがデータベースにアクセスできることを確認します。

SHOW DATABASES;

出力に `+ blog +`テーブルが表示されます。

Output+--------------------+
| Database           |
+--------------------+
| information_schema |
| blog               |
+--------------------+
2 rows in set (0.00 sec)

最後に、MySQLクライアントを終了します。

quit;

デモアプリケーションのユーザーであるデータベースを正常に作成し、新しく作成したユーザーにデータベースにアクセスするための適切な権限を付与しました。 これで、デモアプリケーションをセットアップする準備ができました。

手順2-デモアプリケーションのセットアップ

このチュートリアルをシンプルに保つために、Symfonyで構築されたブログアプリケーションをデプロイします。 このアプリケーションにより、認証されたユーザーはブログ投稿を作成し、データベースに保存できます。 さらに、アプリケーションユーザーは、作成者に関連付けられたすべての投稿と詳細を表示できます。

このチュートリアルでデプロイするブログアプリケーションのソースコードはhttps://github.com/yemiwebby/symfony-blog[on GitHub]です。 Gitを使用して、GitHubからアプリケーションのソースコードを取得し、新しいディレクトリに保存します。

最初に、アプリケーションのルートディレクトリとして機能するディレクトリを作成します。 そのため、コンソールから次のコマンドを実行して、 `+ symfony-blog +`という名前の新しいディレクトリを作成します。

sudo mkdir -p /var/www/symfony-blog

非ルートユーザーアカウントを使用してプロジェクトファイルを操作するには、次を実行してフォルダーの所有者とグループを変更する必要があります。

sudo chown : /var/www/symfony-blog
  • sammy *をsudoの非ルートユーザー名に置き換えます。

これで、親ディレクトリに移動して、GitHubでアプリケーションを複製できます。

cd /var/www
git clone https://github.com/yemiwebby/symfony-blog.git symfony-blog

次の出力が表示されます。

OutputCloning into 'symfony-blog'...
remote: Counting objects: 180, done.
remote: Compressing objects: 100% (122/122), done.
remote: Total 180 (delta 57), reused 164 (delta 41), pack-reused 0
Receiving objects: 100% (180/180), 167.01 KiB | 11.13 MiB/s, done.
Resolving deltas: 100% (57/57), done.

これでデモアプリケーションが設定されました。 次のステップでは、環境変数を構成し、プロジェクトに必要な依存関係をインストールします。

手順3-アプリケーションの環境変数の構成

アプリケーションを完全にセットアップするには、プロジェクトの依存関係をインストールし、アプリケーションパラメーターを適切に構成する必要があります。

デフォルトでは、Symfonyアプリケーションは開発モードで実行され、デバッグのために非常に詳細なログを提供します。 これは、このチュートリアルで行っていることには当てはまりません。また、本番環境での使用には適していません。処理が遅くなり、非常に大きなログファイルが作成される可能性があります。

symfonyは、実稼働環境でアプリケーションを実行していることを認識する必要があります。 これを設定するには、変数宣言を含む `+ .env `ファイルを作成するか、環境変数を直接作成します。 ` .env `ファイルを使用してこのアプリケーションのデータベース認証情報を設定することもできるため、これを行う方が理にかなっています。 作業ディレクトリをクローンプロジェクトに変更し、次のコマンドで ` .env +`ファイルを作成します。

cd symfony-blog
sudo nano .env

ファイルに次の行を追加して、運用アプリケーション環境を構成します。

env
APP_ENV=prod
APP_DEBUG=0

`+ APP_ENV `はアプリケーションが実稼働状態であることを指定する環境変数で、 ` APP_DEBUG +`はアプリケーションをデバッグモードで実行するかどうかを指定する環境変数です。 現時点ではfalseに設定しています。

ファイルを保存し、エディターを終了します。

次に、SymfonyアプリがXMLの処理に使用するPHP拡張機能をインストールします。

sudo apt install php7.2-xml

次に、プロジェクトの依存関係をインストールする必要があり、 `+ composer install`を実行します:

cd /var/www/symfony-blog
composer install

環境変数を正常に構成し、プロジェクトに必要な依存関係をインストールしました。 次に、データベースの資格情報を設定します。

手順4-データベース資格情報の設定

前に作成したアプリケーションのデータベースからデータを取得するには、必要なデータベース資格情報をSymfonyアプリケーション内からセットアップおよび構成する必要があります。

`+ .env +`ファイルを再度開きます:

sudo nano .env

ファイルに次のコンテンツを追加します。これにより、データベースに簡単に接続して適切に対話できるようになります。 `+ .env `ファイル内の ` APP_DEBUG = 0 +`行の直後に追加できます:

env
...
DATABASE_URL=mysql://:@localhost:3306/blog

Symfonyフレームワークは、http://www.doctrine-project.org/ [Doctrine]と呼ばれるサードパーティのライブラリを使用してデータベースと通信します。 Doctrineはデータベースとのやり取りを簡単かつ柔軟にする便利なツールを提供します。

これで、Doctrineを使用して、クローンされたGithubアプリケーションのテーブルでデータベースを更新できます。 これを行うには、次のコマンドを実行します。

php bin/console doctrine:schema:update --force

次の出力が表示されます。

OutputUpdating database schema...
   4 queries were executed
[OK] Database schema updated successfully!

必要な資格情報を設定し、データベーススキーマを更新した後、データベースと簡単に対話できるようになりました。 いくつかのデータを使用してアプリケーションを開始するには、次のセクションでデータベースに一連のダミーデータをロードします。

ステップ5-Doctrine-Fixturesを使用してデータベースにデータを追加する

現時点では、新しく作成されたテーブルは空です。 doctrine-fixturesを使用してデータを取り込みます。 Doctrine-Fixturesの使用はSymfonyアプリケーションの前提条件ではなく、アプリケーションにダミーデータを提供するためにのみ使用されます。

次のコマンドを実行して、* author およびサンプル post *の詳細を含むテストデータをブログ用に作成されたデータベーステーブルに自動的にロードします。

php bin/console doctrine:fixtures:load

データベースが削除されるという警告が表示されます。 先に進み、「+ Y +」と入力します。

OutputCareful, database will be purged. Do you want to continue y/N ? y
 > purging database
 > loading App\DataFixtures\ORM\Fixtures

次のセクションでは、キャッシュをクリアしてウォームアップします。

ステップ6-キャッシュのクリアとウォームアップ

ユーザーがリクエストを行ったときにアプリケーションがより速くロードされるようにするには、展開中にキャッシュをウォームアップすることをお勧めします。 キャッシュをウォームアップすると、完全に新しいページを作成するのではなく、ページを生成して保存し、後で応答を高速化します。 幸いなことに、Symfonyにはキャッシュをクリアするコマンドがあり、ウォームアップもトリガーします。 そのために次のコマンドを実行します。

php bin/console cache:clear

次の出力が表示されます。

OutputClearing the cache for the prod environment with debug false
[OK] Cache for the "prod" environment (debug=false) was successfully cleared.

少しセットアップを完了します。 あとは、Webサーバーを構成するだけです。 次のセクションでそれを行います。

手順7-Webサーバーの構成とアプリケーションの実行

これで、ページを提供するNginxと、データを保存および管理するMySQLがインストールされました。 次に、デフォルトのブロックを編集する代わりに、新しいアプリケーションサーバーブロックを作成して、Webサーバーを構成します。

新しいサーバーブロックを開きます:

sudo nano /etc/nginx/sites-available/blog

新しいサーバーブロック構成ファイルに次のコンテンツを追加します。 サーバーブロック内の「++」をサーバーのIPアドレスに置き換えてください:

/ etc / nginx / sites-available / blog

server {
   listen 80;
   listen [::]:80;

   server_name blog ;
   root /var/www/symfony-blog/public;
   index index.php;
   client_max_body_size 100m;

   location / {
       try_files $uri $uri/ /index.php$is_args$args;
   }

   location ~ \.php {
       try_files $uri /index.php =404;
       fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param SCRIPT_NAME $fastcgi_script_name;
       fastcgi_split_path_info ^(.+\.php)(/.+)$;
       fastcgi_index index.php;
       include fastcgi_params;
     }

   location ~ /\.(?:ht|git|svn) {
       deny all;
   }
}

まず、デフォルトでポート「80」にある「+ listen 」ディレクティブをNginxに指定し、サーバーのIPアドレスのリクエストに一致するようにサーバー名を設定します。 次に、 ` root `ディレクティブを使用して、プロジェクトのドキュメントルートを指定しました。 ` symfony-blog `アプリケーションは ` / var / www / symfony-blog `に保存されますが、ベストプラクティスに準拠するために、Webルートを ` / var / www / symfony-blog / public `に設定します` / public +`サブディレクトリのみをインターネットに公開する必要があります。 最後に、PHP処理を処理するためにlocationディレクティブを構成しました。

コンテンツを追加したら、ファイルを保存してエディターを終了します。

新しく作成されたサーバーブロックを有効にするには、 `+ / etc / nginx / sites-available `ディレクトリにある新しいサーバーブロック設定ファイルから ` / etc / nginx / sites-enabled +`へのシンボリックリンクを作成する必要があります。次のコマンドを使用します。

sudo ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/

次を実行して、新しい構成ファイルの構文エラーを確認します。

sudo nginx -t

このコマンドは、エラーがあればコンソールに出力します。 エラーがなければ、次のコマンドを実行してNginxをリロードします。

sudo systemctl reload nginx

Symfony 4アプリケーションを正常にデプロイするために必要な最後の手順を完了しました。 サーバーブロックを作成してWebサーバーを構成し、WebアプリケーションにアクセスできるようにWebルートを適切に設定しました。

最後に、アプリケーションを実行してテストできます。 お気に入りのブラウザで「+ http:// +」にアクセスします。

次の画像は、サーバーのIPアドレスに表示されるSymfonyブログアプリケーションのスクリーンショットです。

image:https://assets.digitalocean.com/articles/symfony4-1804/EQQNuIv.png [Symfonyブログアプリケーションの代替スクリーンショット]

結論

symfonyは、Web開発をそれを使用してソフトウェアを構築する開発者にとって楽しいものにするアーキテクチャを備えた、機能が豊富なPHPフレームワークです。 symfonyは、開発者にWebアプリケーションを構築するための強力なツールを提供する機能豊富なWeb開発フレームワークです。 多くの場合、柔軟性があるため、エンタープライズアプリケーションに適した選択肢と考えられています。 典型的なSymfonyアプリケーションをデプロイする手順は、アプリケーションのセットアップ、複雑さ、および要件によって異なります。

このチュートリアルでは、LEMPを実行しているUbuntu 18.04サーバー上の実稼働環境にSymfony 4アプリケーションを手動でデプロイしました。 これで、この知識を独自のSymfonyアプリケーションのデプロイに適用できます。

Related