ここにいる皆さんの多くは、Laravelアプリケーションを実稼働環境にデプロイする際に、汗をかき、足が濡れる感覚を経験したことがあると思います。私も同じ気持ちを経験したことがありますが、特に初めてアプリケーションを運用環境にデプロイするプロセスに参加する人の気持ちは理解できます。
そこで、今日はデプロイメントを行うために必要な基本的なサーバーのセットアップについて説明します。プロセスがよりシンプルかつスムーズになります。ガイドの内容には、次の基本セットアップのいくつかが含まれます:
- Nginxのセットアップ
- PHP FPMのセットアップ
- PhpmyAdminのセットアップ
- データベースの移行
- デプロイのテスト
要件に関しては、誰もがいくつかのLinuxインストールコマンド、アプリケーションにおけるNginxの役割、およびPHPFPMについて基本的に理解している必要があります。これ以上お待たせすることなく、アプリケーションに入る前に設定する必要があるコンポーネントについて説明します。
設定に入る前に、全員がsudo権限で実行する必要があります。
Nginxのセットアップ
まず、Nginxについて簡単に説明します。Nginxは、非同期テクノロジーを使用して負荷分散の問題を解決するWebサーバーおよびプロキシです。これにより、Nginxサーバーは高いパフォーマンスと安定性を実現できます。
Nginxの用途と役割をイメージできるように、私の理論をこのようにまとめました。ホームページhttps://www.nginx.com/で参照できるNginxの用途が数多くあります。Linux環境にnginxをインストールすると、デフォルトでNginx構成情報が/etc/nginx/ディレクトリに配置されます。ここにはさまざまなファイルやフォルダーが存在します。Nginxアプリケーションが動作するために最も重要なファイルはnginx.confです。このファイルには、Webアプリケーションが動作するように構成するために必要な構成情報が含まれています。基本的なnginx.confファイルには次のセクションが含まれています:
- 一般構成:ユーザー、ワーカープロセス、pid、イベントブロックなど。
- HTTPブロック構成:キープアライブ、タイムアウト、バッファーなど。
- マシン構成サーバーブロック:場所、SSL、…
以下の構成ファイル nginx.conf を参照できます:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
real_ip_header X-Forwarded-For;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 3000;
server_names_hash_bucket_size 128;
client_max_body_size 2048M;
server_tokens off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
}
構成する際に誰もが留意すべき nginx の重要な情報:
- 1 つ目は、worker_processes です。nginx が同時接続を処理するために使用するワーカー プロセスの数を決定します。worker_processes の計算は、Web サーバー上の CPU の数に基づいて行われます。ワーカー プロセスの数は通常 2 の倍数です。これは、nginx が非同期アーキテクチャを使用して、プロセス数を大幅に増やすことなく複数の同時接続を処理する方法に関係しています。
- 2 番目は http ブロックです。通常、http リクエストの処理方法を定義するために使用される構成の一部を指します。”http ブロック” には、nginx が Web リクエストを処理する方法をカスタマイズするための多くのパラメーターとディレクティブを含めることができます。
通常、nginx をデフォルトの Web サーバーとしてインストールした後、容量が 10 MB を超えるファイルをアップロードすると、nginx はすぐに「413 リクエスト エンティティが大きすぎます」というエラーを報告します。これを修正するには、client_max_body_size のサイズを増やす必要があります。上の例では、現在の構成は 2048m、つまり 2GB です。
さらに、アプリケーションのセキュリティ設定に関連する次のヘッダー情報の一部を追加する必要があることに全員が注意する必要があります:
- add_header x-frame-options Sameorigin”、このヘッダーは、クリックジャッキングなどの特定の攻撃から Web サイトを保護するのに役立ちます。クリックジャッキングでは、悪意のある Web サイトがフレーム内に別の Web サイトの一部を隠してユーザーを”詐欺”しようとします。
- add_header X-Content-Type-Options “nosniff”; このヘッダーは、ファイルの実際のコンテンツに基づいてリソース (JavaScript や CSS ファイルなど) のコンテンツ タイプをブラウザが推測するのを防ぐために使用されます。その主な機能は、”content-type”ヘッダーで指定された MIME タイプに従ってファイルのコンテンツを表示することをブラウザに要求することで、MIME タイプ スニッフィング攻撃を防ぐことです。
次に、nginx が各受信リクエストのパスを決定できるように、ブロック サーバーを設定する必要があります。以下は参照できる基本的な構成情報です:
server {
listen 80;
server_name example.com;
root /var/www/html/laravel-server/public;
index index.php index.html index.htm;
access_log /var/log/nginx/laravel-server-access.log;
error_log /var/log/nginx/laravel-server-error.log error;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param HTTPS 'on';
include fastcgi_params;
}
}
このファイルは、nginx.conf ディレクトリと同じレベルの conf.d ディレクトリに配置されます。上記の構成を簡単に説明します。最も重要な部分は、laravel アプリケーションのパブリック ディレクトリを指すように root を宣言し、場所を設定することです。デフォルトでは、ユーザーが laravel アプリケーションにアクセスするときは、nginx を介して上記の設定の場所を設定します。nginx は、ユーザーからのリクエストがあるとすぐには機能しません。 nginx を経由するアプリケーションに直接アクセスすると、nginx は、index.php ファイルをロードしてユーザーパラメータを渡すか、フロントエンドから API を呼び出すことによって、そのリクエストを処理する PHP サーバーを決定します。この URI が無効な場合、nginx は正しいパスを決定した後、これらのリクエストを php サーバーに転送してさらに処理します。
この部分に関しては、誰もが以下の重要な点に注意する必要があります:
- 1つ目はrootです。laravelのパブリックWebサイトのディレクトリを指すために使用されます。ここでは、php 職人コマンドを実行するためによく使用される最も外側のディレクトリではなく、全員が Web ソース内の正しいパブリック ディレクトリを指定する必要があります。
- 2 つ目はロケーションです。ロケーションの目的は、ユーザーからリクエストがあったときに nginx が特定の URL アドレスへのリクエストを処理することです。
位置情報の使用例をいくつか示します:
場所は URL のプレフィックスに基づきます:
location / {
#
}
Location dựa trên đuôi của URL:
location ~ \.php$ {
#
}
Location với biểu thức chính quy:
location ~* \.(jpg|jpeg|png)$ {
#
}
nginx の基本的な構成は次のとおりです。次の部分では、リクエストが nginx を通過した後、nginx が各 php サーバーへのリクエストを調整します。この段階では、サーバーはすぐには実行できませんが、コンパイラーを介して php サーバーを実行する必要があります。 Webサイト。現在最も人気のあるコンパイラーの 1 つは php fpm です。
PHP FPMのセットアップ
PHP-FPM は「fastcgi process manager」の略で、各 php ワーカー プロセスへのリクエストを調整するように設計された fastcgi プロセス マネージャーです。PHP-FPM は、php を実行している Web サーバーのパフォーマンスを向上させ、応答性を拡張するためによく使用されます。
まず、php fpm 設定ファイルを開く必要があります。通常は「/etc/php-fpm.d/www.conf」にあります。このファイルでは、php fpm が使用している環境で正しく動作するように、ユーザー、グループ、リッスンなどの重要なパラメーターを設定できます。
user = root
group = root
listen = 127.0.0.1:9000
ここで、「root」はphp fpmが使用するユーザーとグループであり、上記のnginxセクションで設定したfastcgi_pass情報に従って「listen」を宣言する必要があることに注意してください。
次に注意点です。変更する必要があるのは、pm.max_children 情報です。この情報は、php-fpm が作成できる php ワーカー プロセスの最大数を決定します。この制限は、システム リソースの過負荷を避けるために重要です。
pm.max_children の値を選択するには、サーバーのメモリ容量や php アプリケーションのリソース要件、サーバー構成などの要素を考慮する必要があります。
- メモリ容量: 各ワーカー プロセスは一定量のメモリを使用します。ワーカー プロセスが過負荷になると、過剰なメモリ消費が発生し、スワップやパフォーマンスの低下につながる可能性があります。
- アプリケーションのリソース要件: PHP アプリケーションが多くのリソースを必要とする場合 (データベースへの接続の確立と処理など)、システム リソースの過負荷を避けるために pm.max_children の値を減らす必要がある場合があります。
- サーバー構成: 場合によっては、サーバー構成と要件に基づいてワーカー プロセスの数を調整する必要があります。パフォーマンスのテストと監視は、最適な値を見つけるための重要なステップです。
pm.max_children を使用した php-fpm 設定の例は次のようになります:
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
max_children 情報を変更するときは、php fpm が子ワーカー プロセスを作成できるように、pm を動的形式に調整する必要があることに全員が注意する必要があります。もう 1 つ忘れてはいけないのは、構成を変更した後、全員が再起動する必要があることです。サーバーは最新の構成情報を受信できます。.
nginx をセットアップするときは、上で構成したサーバー ブロックに以下の構成 fastcgi_pass、fastcgi_param などを追加する必要があることに注意してください。
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
上記のコードでは、”fastcgi_pass: は、nginx がリクエストを転送するために使用する php fpm ソケットを指定する場所です。
“fastcgi_param” は、渡されたパラメータまたは呼び出し API をキー – 値 (例: ?id=1) の形式で渡します。
PhpmyAdminのセットアップ
次に、データベースをより簡単に管理するために、データベースを管理するために phpmyadmin をインストールして構成できます。これは、データベースを効果的に管理するのに役立ちます。
sudo apt install phpmyadmin
インストールプロセス中に、ログイン名、パスワード、その他の必要な情報などの入力を求められます。
インストールが完了したら、/etc/nginx/conf.d ディレクトリに移動し、以下の例に示すように構成を含む phpmyadmin.conf ファイルを作成します:
server {
listen 8080 default_server;
listen [::]:8080 default_server;
server_name _;
# Load configuration files.
location /phpMyAdmin {
root /usr/share/;
index index.php index.html index.htm;
location ~ ^/phpMyAdmin/(.+\.php)$ {
try_files $uri =404;
root /usr/share/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
location ~* ^/phpMyAdmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
root /usr/share/;
}
}
location /phpmyadmin {
rewrite ^/* /phpMyAdmin last;
}
}
インストールが完了したら、全員が「nginx -s reload」コマンドで nginx config を再起動し、Web アドレスに “/phpmyadmin” を追加し、インストール プロセスで設定した mysql アカウントでログインすることで phpmyadmin にアクセスできます。
データベースの移行
上記の手順がすべて完了したら、全員が laravel .env 移行構成プロセスに進み、アプリケーションに必要なデータベース テーブルを作成できます。
php artisan migrate
デプロイのテスト
最後に、展開が適切に行われたことを確認するために、Web サイトにアクセスして展開テストの手順を実行し、すべてが期待どおりに動作していることを確認します。
したがって、これらの基本的なセットアップ手順を使用すると、Laravel アプリケーションを運用環境にデプロイするプロセスがよりシンプルかつ効果的になります。
幸運を!