Ubuntu18.04でNginx(LEMP)を使用してLaravel8をインストールおよび構成する方法
序章
Laravel は、最新のPHPアプリケーションを構築するための一連のツールとリソースを提供するオープンソースのPHPフレームワークです。 完全なエコシステムに組み込まれた機能を活用することで、Laravelの人気はここ数年で急速に高まり、多くの開発者が合理化された開発プロセスのフレームワークとして採用しています。
このガイドでは、 Composer を使用してフレームワークの依存関係をダウンロードおよび管理し、PHP7.4を使用するUbuntu18.04サーバーに新しいLaravel8アプリケーションをインストールして構成します。 終了すると、MySQLデータベースからコンテンツをプルする機能的なLaravelデモアプリケーションができあがります。
前提条件
このガイドを完了するには、最初にUbuntu18.04サーバーで次のタスクを実行する必要があります。
- sudoユーザーを作成し、ufwを有効にします。 これを設定するには、 Ubuntu18.04の初期サーバー設定ガイドに従ってください。
- Nginxをインストールします。 これをまだ設定していない場合は、 Ubuntu18.04にNginxをインストールする方法の手順1および2に従うことができます。
- MySQLをインストールします。 これを設定するには、 Ubuntu18.04にMySQLをインストールする方法に関するガイドの手順1および2に従ってください。
- PHP7.4以降をインストールします。 これを実現するには、PHP7.4のインストール方法とUbuntu18.04でのローカル開発環境のセットアップ方法に関するガイドのステップ1に従うことができます。
- Composerをインストールします。 Composer を使用して、Laravelとその依存関係をインストールします。 Ubuntu18.04にComposerをインストールする方法に関するガイドに従ってComposerをインストールできます。
サーバーが現在使用しているPHPのバージョンを確認するには、次のコマンドを実行します。
php -v
outputPHP 7.4.22 (cli) (built: Jul 30 2021 13:07:59) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.22, Copyright (c), by Zend Technologies
出力をチェックして、サーバーにPHP7.4以降がインストールされていることを確認します。これはPHPの最新の安定したリリースであるためです。
ステップ1—PHP-FPMと必要なPHPモジュールのインストール
Laravelをインストールする前に、フレームワークに必要ないくつかのPHPモジュールをインストールする必要があります。 まだ設定していない場合は、PHP-FPMもインストールする必要があります。
Laravelには、php-mbstring
、php-xml
、およびphp-bcmath
PHPモジュールが必要です。 これらのPHP拡張機能は、文字エンコード、XML、および高精度数学を処理するための追加のサポートを提供します。 さらに、PHPコードを介してデータベースに接続できるようにするには、php-mysql
が必要です。
このセッションでapt
を初めて使用する場合は、最初にupdate
コマンドを実行して、パッケージマネージャーのキャッシュを更新する必要があります。
sudo apt update
sudo
権限を検証するために、ユーザーパスワードの入力を求められる場合があります。 アップデートが完了したら、次の方法で必要なパッケージをインストールできます。
sudo apt install php7.4-fpm php7.4-mysql php7.4-mbstring php7.4-xml php7.4-bcmath
これで、システムはComposerを介してLaravelのインストールを実行する準備ができましたが、実行する前に、アプリケーションのデータベースをセットアップする必要があります。
ステップ2—アプリケーション用のデータベースを作成する
Laravelの基本的なインストールと使用法を練習するために、サンプルの travel list アプリケーションを作成して、ユーザーが旅行したい場所のリストと、ユーザーがすでに訪れた場所のリストを表示します。 これは、 Places テーブルに保存できます。このテーブルには、 name と呼ぶ場所のフィールドと、visitedまたはnotとしてマークする別のフィールドがあります。訪問済み、これを訪問済みと呼びます。 さらに、 id フィールドを含めて、各エントリを一意に識別します。
Laravelアプリケーションからデータベースに接続するには、専用のMySQLユーザーを作成し、このユーザーにtravel_list
データベースに対する完全な権限を付与します。
開始するには、次のコマンドを使用してrootデータベースユーザーとしてMySQLコンソールにログインします。
sudo mysql
新しいデータベースを作成するには、MySQLコンソールから次のコマンドを実行します。
CREATE DATABASE travel_list;
これで、新しいユーザーを作成し、作成したカスタムデータベースに対する完全な権限をユーザーに付与できます。 この例では、 travel_userという名前のユーザーをパスワードpassword
で作成していますが、これを選択した安全なパスワードに変更する必要があります。
GRANT ALL ON travel_list.* TO 'travel_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
これにより、 travel_user ユーザーにtravel_list
データベースに対する完全な権限が与えられ、このユーザーがサーバー上で他のデータベースを作成または変更することはできなくなります。
これに続いて、MySQLシェルを終了します。
exit
これで、MySQLコンソールに再度ログインして、新しいユーザーが適切な権限を持っているかどうかをテストできます。今回は、カスタムユーザーのクレデンシャルを使用します。
mysql -u travel_user -p
このコマンドの-p
フラグに注意してください。これにより、travel_userユーザーの作成時に使用されるパスワードの入力を求められます。 MySQLコンソールにログインした後、travel_list
データベースにアクセスできることを確認します。
SHOW DATABASES;
これにより、次の出力が得られます。
Output+--------------------+ | Database | +--------------------+ | information_schema | | travel_list | +--------------------+ 2 rows in set (0.01 sec)
次に、travel_list
データベースにplaces
という名前のテーブルを作成します。 MySQLコンソールから、次のステートメントを実行します。
CREATE TABLE travel_list.places ( id INT AUTO_INCREMENT, name VARCHAR(255), visited BOOLEAN, PRIMARY KEY(id) );
次に、places
テーブルにサンプルデータを入力します。
INSERT INTO travel_list.places (name, visited) VALUES ("Tokyo", false), ("Budapest", true), ("Nairobi", false), ("Berlin", true), ("Lisbon", true), ("Denver", false), ("Moscow", false), ("Olso", false), ("Rio", true), ("Cincinnati", false), ("Helsinki", false);
データがテーブルに正常に保存されたことを確認するには、次のコマンドを実行します。
SELECT * FROM travel_list.places;
次のような出力が表示されます。
Output+----+-----------+---------+ | id | name | visited | +----+-----------+---------+ | 1 | Tokyo | 0 | | 2 | Budapest | 1 | | 3 | Nairobi | 0 | | 4 | Berlin | 1 | | 5 | Lisbon | 1 | | 6 | Denver | 0 | | 7 | Moscow | 0 | | 8 | Oslo | 0 | | 9 | Rio | 1 | | 10 | Cincinnati| 0 | | 11 | Helsinki | 0 | +----+-----------+---------+ 11 rows in set (0.00 sec)
テストテーブルに有効なデータがあることを確認したら、MySQLコンソールを終了できます。
exit
これで、アプリケーションを作成し、新しいデータベースに接続するように構成する準備が整いました。
ステップ3—新しいLaravelアプリケーションを作成する
次に、composer create-project
コマンドを使用して新しいLaravelアプリケーションを作成します。 このComposerコマンドは通常、既存のフレームワークとコンテンツ管理システムに基づいて新しいアプリケーションをブートストラップするために使用されます。
このガイドでは、サンプルアプリケーションとしてtravel_list
を使用しますが、これを別のアプリケーションに自由に変更できます。 travel_list
アプリケーションは、ローカルMySQLサーバーから取得した場所のリストを表示します。これは、Laravelの基本構成を示し、データベースに接続できることを確認することを目的としています。
まず、ユーザーのホームディレクトリに移動します。
cd ~
次のコマンドは、デフォルト設定に基づいて、ベアボーンLaravelアプリケーションを含む新しいtravel_list
ディレクトリを作成します。
composer create-project --prefer-dist laravel/laravel travel_list
次のような出力が表示されます。
OutputCreating a "laravel/laravel" project at "./travel_list" Installing laravel/laravel (v8.5.22) - Installing laravel/laravel (v8.5.22): Extracting archive Created project in /home/sammy/travel_list > @php -r "file_exists('.env') || copy('.env.example', '.env');" Loading composer repositories with package information Updating dependencies Lock file operations: 109 installs, 0 updates, 0 removals - Locking asm89/stack-cors (v2.0.3) - Locking brick/math (0.9.2) - Locking dflydev/dot-access-data (v3.0.0) - Locking doctrine/inflector (2.0.3) - Locking doctrine/instantiator (1.4.0) - Locking doctrine/lexer (1.2.1) … Package manifest generated successfully. 75 packages you are using are looking for funding. Use the `composer fund` command to find out more! > @php artisan key:generate --ansi Application key set successfully.
インストールが完了したら、アプリケーションのディレクトリにアクセスし、Laravelのartisan
コマンドを実行して、すべてのコンポーネントが正常にインストールされたことを確認します。
cd travel_list php artisan
次のような出力が表示されます。
OutputLaravel Framework 8.52.0 Usage: command [options] [arguments] Options: -h, --help Display help for the given command. When no command is given display help for the list command -q, --quiet Do not output any message -V, --version Display this application version --ansi|--no-ansi Force (or disable --no-ansi) ANSI output -n, --no-interaction Do not ask any interactive question --env[=ENV] The environment the command should run under -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug ...
この出力は、アプリケーションファイルが配置され、Laravelコマンドラインツールが期待どおりに機能していることを確認します。 ただし、データベースとその他のいくつかの詳細を設定するようにアプリケーションを構成する必要があります。
ステップ4—Laravelを設定する
Laravel構成ファイルは、アプリケーションのルートディレクトリ内のconfig
というディレクトリにあります。 さらに、ComposerでLaravelをインストールすると、環境ファイルが作成されます。 このファイルには、アプリケーションが実行されている現在の環境に固有の設定が含まれており、config
ディレクトリにある通常の構成ファイルで設定されている値よりも優先されます。 新しい環境にインストールするたびに、データベース接続設定、デバッグオプション、アプリケーションURLなど、アプリケーションが実行されている環境によって異なる可能性のある項目を定義するために、調整された環境ファイルが必要です。
警告:環境構成ファイルには、データベースの資格情報やセキュリティキーなど、サーバーに関する機密情報が含まれています。 そのため、このファイルを公に共有しないでください。
次に、.env
ファイルを編集して、現在のアプリケーション環境の構成オプションをカスタマイズします。
選択したコマンドラインエディタを使用して、.env
ファイルを開きます。 ここではnano
を使用します。
nano .env
このファイルには多くの構成変数がありますが、ここですべてを設定する必要はありません。 次のリストには、すぐに注意が必要な変数の概要が含まれています。
APP_NAME
:アプリケーション名。通知とメッセージに使用されます。APP_ENV
:現在のアプリケーション環境。APP_KEY
:ソルトとハッシュの生成に使用されます。この一意のキーは、Composerを介してLaravelをインストールするときに自動的に作成されるため、変更する必要はありません。APP_DEBUG
:クライアント側でデバッグ情報を表示するかどうか。APP_URL
:アプリケーションのベースURL。アプリケーションリンクの生成に使用されます。DB_DATABASE
:データベース名。DB_USERNAME
:データベースに接続するためのユーザー名。DB_PASSWORD
:データベースに接続するためのパスワード。
デフォルトでは、これらの値は、Laravelが提供するパッケージ済みのVagrantボックスであるHomesteadを使用するローカル開発環境用に構成されています。 サンプルアプリケーションの現在の環境設定を反映するように、これらの値を変更します。
Laravelを開発またはテスト環境にインストールする場合は、APP_DEBUG
オプションを有効のままにしておくことができます。これにより、アプリケーションのテスト中に重要なデバッグ情報が得られます。ブラウザから。 この場合、APP_ENV
変数はdevelopment
またはtesting
に設定する必要があります。
Laravelを本番環境環境にインストールする場合は、APP_DEBUG
オプションを無効にする必要があります。これは、アプリケーションに関する機密情報を最終的なユーザーに表示するためです。 この場合のAPP_ENV
はproduction
に設定する必要があります。
次の.env
ファイルは、開発のサンプルアプリケーションを設定します。
注:APP_KEY
変数には、Composerを介してLaravelをインストールしたときに自動生成された一意のキーが含まれています。 この値を変更する必要はありません。 新しいセキュアキーを生成する場合は、php artisan key:generate
コマンドを使用できます。
/var/www/travel_list/.env
APP_NAME=TravelList APP_ENV=development APP_KEY=APPLICATION_UNIQUE_KEY_DONT_COPY APP_DEBUG=true APP_URL=http://domain_or_IP LOG_CHANNEL=stack DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=travel_list DB_USERNAME=travel_user DB_PASSWORD=password ...
それに応じて変数を調整します。 編集が完了したら、ファイルを保存して閉じ、変更を保持します。 nano
を使用している場合は、CTRL+X
、Y
、Enter
の順に使用して確認できます。
これでLaravelアプリケーションがセットアップされましたが、ブラウザーからアクセスできるようにするには、Webサーバーを構成する必要があります。 次のステップでは、Laravelアプリケーションを提供するようにNginxを構成します。
ステップ5—Nginxを設定する
Laravelは、リモートユーザーのホームディレクトリのローカルフォルダーにインストールされています。これはローカル開発環境ではうまく機能しますが、パブリックインターネットに公開されているWebサーバーにはお勧めできません。 アプリケーションフォルダを/var/www
に移動します。これは、Nginxで実行されているWebアプリケーションの通常の場所です。
まず、mv
コマンドを使用して、アプリケーションフォルダーとそのすべての内容を/var/www/travel_list
に移動します。
sudo mv ~/travel_list /var/www/travel_list
次に、Webサーバーユーザーにstorage
およびcache
フォルダーへの書き込みアクセスを許可する必要があります。Laravelはアプリケーションで生成されたファイルを保存します。
sudo chown -R www-data.www-data /var/www/travel_list/storage sudo chown -R www-data.www-data /var/www/travel_list/bootstrap/cache
これでアプリケーションファイルは正常になりましたが、コンテンツを提供するようにNginxを構成する必要があります。 これを行うには、/etc/nginx/sites-available
に新しい仮想ホスト構成ファイルを作成します。
sudo nano /etc/nginx/sites-available/travel_list
次の構成ファイルには、Nginx上のLaravelアプリケーションの推奨設定が含まれています。
/ etc / nginx / sites-available / travel_list
server { listen 80; server_name server_domain_or_IP; root /var/www/travel_list/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; index index.html index.htm index.php; 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$ { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } }
このコンテンツを/etc/nginx/sites-available/travel_list
ファイルにコピーし、必要に応じて、強調表示された値を調整して、独自の構成に合わせます。 編集が完了したら、ファイルを保存して閉じます。
新しい仮想ホスト構成ファイルをアクティブ化するには、sites-enabled
にtravel_list
へのシンボリックリンクを作成します。
sudo ln -s /etc/nginx/sites-available/travel_list /etc/nginx/sites-enabled/
注:travel_list
仮想ホストで使用されているのと同じserver_name
に対して以前に構成された別の仮想ホストファイルがある場合は、削除して古い構成を非アクティブ化する必要があります。 /etc/nginx/sites-enabled/
内の対応するシンボリックリンク。 たとえば、/etc/nginx/sites-enabled/default
ファイルを削除して、次のNginxのデフォルトのウェルカムページを無効にすることができます。
sudo rm -f /etc/nginx/sites-enabled/default
構成に構文エラーが含まれていないことを確認するには、次を使用できます。
sudo nginx -t
次のような出力が表示されます。
Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
変更を適用するには、次のコマンドでNginxをリロードします。
sudo systemctl reload nginx
次に、ブラウザに移動し、構成ファイルのserver_name
ディレクティブで定義されているように、サーバーのドメイン名またはIPアドレスを使用してアプリケーションにアクセスします。
http://server_domain_or_IP
次のようなページが表示されます。
これにより、NginxサーバーがLaravelにサービスを提供するように適切に構成されていることが確認されます。 この時点から、デフォルトのインストールで提供されるスケルトンの上にアプリケーションを構築し始めることができます。
次のステップでは、アプリケーションのメインルートを変更して、LaravelのDB
ファサードを使用してデータベース内のデータをクエリします。
ステップ6—メインページのカスタマイズ
これまでにこのガイドのすべての手順を実行したとすると、動作するLaravelアプリケーションと、サンプルデータを含むplaces
という名前のデータベーステーブルが必要です。
次に、メインのアプリケーションルートを編集してデータベースをクエリし、コンテンツをアプリケーションのビューに返します。
メインルートファイルroutes/web.php
を開きます。
nano routes/web.php
このファイルには、デフォルトで次の内容が含まれています。
ルート/web.php
<?php /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', function () { return view('welcome'); });
ルートは、静的メソッドRoute::get
を使用してこのファイル内で定義されます。このメソッドは、パスとコールバック関数を引数として受け取ります。
次のコードは、メインルートのコールバック関数を置き換えます。 visited
フラグを使用してデータベースに2つのクエリを実行し、結果をフィルタリングします。 結果をtravel_list
という名前のビューに返します。これを次に作成します。 このコンテンツをroutes/web.php
ファイルにコピーし、すでに存在するコードを置き換えます。
ルート/web.php
<?php use Illuminate\Support\Facades\DB; Route::get('/', function () { $visited = DB::select('select * from places where visited = ?', [1]); $togo = DB::select('select * from places where visited = ?', [0]); return view('travel_list', ['visited' => $visited, 'togo' => $togo ] ); });
編集が完了したら、ファイルを保存して閉じます。 次に、データベースの結果をユーザーに表示するビューを作成します。 resources/views
内に新しいビューファイルを作成します。
nano resources/views/travel_list.blade.php
次のテンプレートは、変数visited
とtogo
に基づいて場所の2つのリストを作成します。 このコンテンツを新しいビューファイルにコピーします。
resources / views / travel_list / blade.php
<html> <head> <title>Travel List</title> </head> <body> <h1>My Travel Bucket List</h1> <h2>Places I'd Like to Visit</h2> <ul> @foreach ($togo as $newplace) <li>{{ $newplace->name }}</li> @endforeach </ul> <h2>Places I've Already Been To</h2> <ul> @foreach ($visited as $place) <li>{{ $place->name }}</li> @endforeach </ul> </body> </html>
完了したら、ファイルを保存して閉じます。 次に、ブラウザに移動して、アプリケーションをリロードします。 次のようなページが表示されます。
これで、MySQLデータベースからコンテンツをプルする機能的なLaravelアプリケーションができました。
結論
このチュートリアルでは、Ubuntu 18.04サーバーで実行されるLEMPスタック(Linux、Nginx、MySQL、PHP)の上に新しいLaravelアプリケーションをセットアップしました。 また、データベースコンテンツをクエリし、結果をカスタムビューに表示するように、デフォルトルートをカスタマイズしました。
ここから、アプリケーションに必要な追加ページの新しいルートとビューを作成できます。 ルート、ビュー、およびデータベースサポートの詳細については、Laravelの公式ドキュメントを確認してください。 本番環境にデプロイする場合は、最適化セクションで、アプリケーションのパフォーマンスを向上させるためのいくつかの異なる方法も確認する必要があります。
セキュリティを向上させるには、サーバーにTLS / SSL証明書をインストールして、HTTPS経由でコンテンツを提供できるようにすることを検討する必要があります。 To this end, you can follow our guide on [how to secure your Nginx installation with Let’s Encrypt on Ubuntu 18.04] (how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-18-04).
テクニカルトークやチュートリアルシリーズなど、このフレームワークに関するその他の学習資料については、Laravelタグページも確認してください。