Ubuntu18.04でLEMPを使用してSymfony4アプリケーションを本番環境にデプロイする方法
著者は、 Write for DOnations プログラムの一環として寄付を受け取るために、 Software in the Public InterestIncを選択しました。
序章
Symfony は、エレガントな構造を備えたオープンソースのPHPフレームワークであり、サイズに関係なくプロジェクトを開始するのに適したフレームワークであるという評判があります。 再利用可能なコンポーネントのセットとして、その柔軟性、アーキテクチャ、および高性能により、非常に複雑なエンタープライズアプリケーションを構築するための最良の選択肢となっています。
このチュートリアルでは、Ubuntu 18.04でLEMPスタック(Nginx、MySQL、PHP)を使用して、既存の標準のSymfony 4アプリケーションを本番環境にデプロイします。これにより、サーバーとフレームワークの構造の構成を開始できます。 Nginxは、リバースプロキシサポートなどの追加機能を備えた、人気のあるオープンソースの高性能HTTPサーバーです。 それは評判が良く、インターネット上で最大かつ最もトラフィックの多いサイトのいくつかをホストしています。 代わりに独自のSymfonyアプリケーションをデプロイすることを選択した場合、アプリケーションの既存の構造によっては、追加のステップを実装しなければならない場合があります。
前提条件
このチュートリアルを完了するには、次のものが必要です。
- Ubuntu18.04初期サーバーセットアップガイドに従ってセットアップされた1つのUbuntu18.04サーバー。
sudo
アクセスとファイアウォール。 - Nginx、MySQL、およびPHPは、 Ubuntu 18.04にLinux、Nginx、MySQL、PHP(LEMPスタック)をインストールする方法に従ってインストールされます。
- Ubuntu18.04にComposerをインストールして使用する方法の手順1と2に従ってComposerをインストールしました。
- Ubuntu18.04にGitをインストールする方法に従ってGitをインストールします。
ステップ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 'blog-admin'@'localhost' IDENTIFIED BY 'password';
次の出力が表示されます。
OutputQuery OK, 0 rows affected (0.00 sec)
現在、ユーザーblog-adminにはアプリケーションデータベースに対する適切な権限がありません。 実際、 blog-admin が自分のパスワードでログインしようとしても、MySQLシェルに到達することはできません。
ユーザーは、データベースにアクセスしたり、データベースで特定のアクションを実行したりする前に、適切な権限が必要です。 次のコマンドを使用して、blog-adminユーザーのblogデータベースへの完全なアクセスを許可します。
- GRANT ALL PRIVILEGES ON blog.* TO 'blog-admin'@'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 blog-admin -p
ユーザーが次の方法でデータベースにアクセスできることを確認します。
- SHOW DATABASES;
が表示されます blog
出力のテーブル:
Output+--------------------+
| Database |
+--------------------+
| information_schema |
| blog |
+--------------------+
2 rows in set (0.00 sec)
最後に、MySQLクライアントを終了します。
- quit;
これで、デモアプリケーションのユーザーであるデータベースが正常に作成され、新しく作成されたユーザーにデータベースにアクセスするための適切な権限が付与されました。 これで、デモアプリケーションをセットアップする準備が整いました。
ステップ2—デモアプリケーションのセットアップ
このチュートリアルを簡単にするために、Symfonyで構築されたブログアプリケーションをデプロイします。 このアプリケーションを使用すると、認証されたユーザーがブログ投稿を作成してデータベースに保存できます。 さらに、アプリケーションユーザーは、作成者に関連付けられているすべての投稿と詳細を表示できます。
このチュートリアルでデプロイするブログアプリケーションのソースコードは、GitHubのです。 Git を使用して、GitHubからアプリケーションのソースコードをプルし、新しいディレクトリに保存します。
まず、アプリケーションのルートディレクトリとして機能するディレクトリを作成します。 したがって、コンソールから次のコマンドを実行して、という名前の新しいディレクトリを作成します symfony-blog
:
- sudo mkdir -p /var/www/symfony-blog
root以外のユーザーアカウントを使用してプロジェクトファイルを操作するには、次のコマンドを実行してフォルダーの所有者とグループを変更する必要があります。
- sudo chown sammy:sammy /var/www/symfony-blog
sammyをsudoの非rootユーザー名に置き換えます。
これで、親ディレクトリに移動して、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
次の行をファイルに追加して、実稼働アプリケーション環境を構成します。
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
次のコンテンツをファイルに追加します。これにより、データベースに簡単に接続して適切に操作できるようになります。 直後に追加できます APP_DEBUG=0
内の行 .env
ファイル:
...
DATABASE_URL=mysql://blog-admin:password@localhost:3306/blog
Symfonyフレームワークは、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
次のコンテンツを新しいサーバーブロック構成ファイルに追加します。 必ず交換してください your_server_ip
サーバーIPアドレスを持つサーバーブロック内:
server {
listen 80;
listen [::]:80;
server_name blog your_server_ip;
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;
}
}
まず、 listen
Nginxのディレクティブ。デフォルトではポートにあります 80
、次に、サーバーのIPアドレスの要求に一致するようにサーバー名を設定します。 次に、 root
プロジェクトのドキュメントルートを指定するディレクティブ。 The symfony-blog
アプリケーションはに保存されます /var/www/symfony-blog
、ただし、ベストプラクティスに準拠するために、Webルートを次のように設定します。 /var/www/symfony-blog/public
だけとして /public
サブディレクトリはインターネットに公開する必要があります。 最後に、PHP処理を処理するようにlocationディレクティブを構成しました。
コンテンツを追加したら、ファイルを保存してエディターを終了します。
注:ファイルを作成した場合 example.com
前提条件の記事「Ubuntu18.04にLinux、Nginx、MySQL、PHP(LEMPスタック)をインストールする方法」で、Ubuntu18.04からLinux、Nginx、MySQL、PHP(LEMPスタック)を削除します。 sites-enabled
ディレクトリと sudo rm /etc/nginx/sites-enabled/example.com
したがって、この新しいファイルと競合することはありません。
新しく作成されたサーバーブロックを有効にするには、にある新しいサーバーブロック構成ファイルからシンボリックリンクを作成する必要があります。 /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
これで、Symfony4アプリケーションを正常にデプロイするために必要な最後のステップが完了しました。 サーバーブロックを作成してWebサーバーを構成し、WebアプリケーションにアクセスできるようにWebルートを適切に設定しました。
最後に、アプリケーションを実行してテストできます。 訪問 http://your_server_ip
お気に入りのブラウザで:
次の画像は、サーバーのIPアドレスに表示されるSymfonyブログアプリケーションのスクリーンショットです。
結論
Symfonyは、それを使用してソフトウェアを構築する開発者がWeb開発を楽しくするアーキテクチャを備えた機能豊富なPHPフレームワークです。 Symfonyは機能豊富なWeb開発フレームワークであり、開発者にWebアプリケーションを構築するための強力なツールを提供します。 柔軟性があるため、エンタープライズアプリケーションに適していると見なされることがよくあります。 典型的なSymfonyアプリケーションをデプロイする手順は、セットアップ、複雑さ、およびアプリケーションの要件によって異なります。
このチュートリアルでは、LEMPを実行しているUbuntu18.04サーバー上の本番環境にSymfony4アプリケーションを手動でデプロイしました。 これで、この知識を独自のSymfonyアプリケーションのデプロイに適用できます。