Ubuntu 20.04(LEMP)でNginxを使用してLaravelをインストールおよび構成する方法
序章
Laravel は、最新のPHPアプリケーションを構築するための一連のツールとリソースを提供するオープンソースのPHPフレームワークです。 完全なエコシステムに組み込まれた機能を活用することで、Laravelの人気はここ数年で急速に高まり、多くの開発者が合理化された開発プロセスのフレームワークとして採用しています。
このガイドでは、Ubuntu 20.04サーバーに新しいLaravelアプリケーションをインストールして構成し、 Composer を使用してフレームワークの依存関係をダウンロードおよび管理し、Nginxを使用してアプリケーションを提供します。 終了すると、MySQL8データベースからコンテンツをプルする機能的なLaravelデモアプリケーションができあがります。
前提条件
このガイドを完了するには、最初にUbuntu20.04サーバーで次のタスクを実行する必要があります。
- sudoユーザーを作成し、ufwを有効にします。 これを設定するには、 Ubuntu20.04の初期サーバー設定ガイドに従ってください。
- MySQL8でLEMPスタックをインストールします。 これをまだ設定していない場合は、 Ubuntu 20.04 にNginx、MySQL、およびPHPをインストールする方法に関するガイドのステップ1から3に従うことができます。
- Composerをインストールします。 Composer を使用して、Laravelとその依存関係をインストールします。 Ubuntu 20.04にComposerをインストールする方法のガイドに従って、Composerをインストールできます。
ステップ1—必要なPHPモジュールをインストールする
Laravelをインストールする前に、フレームワークに必要ないくつかのPHPモジュールをインストールする必要があります。 apt
を使用して、php-mbstring
、php-xml
、およびphp-bcmath
PHPモジュールをインストールします。 これらのPHP拡張機能は、文字エンコード、XML、および高精度数学を処理するための追加のサポートを提供します。
このセッションでapt
を初めて使用する場合は、最初にupdate
コマンドを実行して、パッケージマネージャーのキャッシュを更新する必要があります。
- sudo apt update
これで、必要なパッケージを次のコマンドでインストールできます。
- sudo apt install php-mbstring php-xml php-bcmath
これで、システムはComposerを介してLaravelのインストールを実行する準備ができましたが、実行する前に、アプリケーション用のデータベースが必要になります。
ステップ2—アプリケーション用のデータベースを作成する
Laravelの基本的なインストールと使用法を示すために、 travel list アプリケーションを作成して、ユーザーが旅行したい場所のリストと、ユーザーがすでに訪れた場所のリストを表示します。 これは、 Places テーブルに保存できます。このテーブルには、 name と呼ぶ場所のフィールドと、visitedまたはnotとしてマークする別のフィールドがあります。訪問済み、これを訪問済みと呼びます。 さらに、各エントリを一意に識別するためのidフィールドを含めます。
Laravelアプリケーションからデータベースに接続するには、専用のMySQLユーザーを作成し、このユーザーにtravellist
データベースに対する完全な権限を付与します。
この記事の執筆時点では、ネイティブMySQLPHPライブラリmysqlnd
は、MySQL8のデフォルトの認証方法であるcaching_sha2_authentication
をサポートしていません。 PHPからMySQLデータベースに接続できるようにするには、mysql_native_password
認証方式でデータベースユーザーを設定する必要があります。
開始するには、次のコマンドを使用してrootデータベースユーザーとしてMySQLコンソールにログインします。
- sudo mysql
新しいデータベースを作成するには、MySQLコンソールから次のコマンドを実行します。
- CREATE DATABASE travellist;
これで、新しいユーザーを作成し、作成したカスタムデータベースに対する完全な権限をユーザーに付与できます。 この例では、 travellist_userという名前のユーザーをパスワードpassword
で作成していますが、これを選択した安全なパスワードに変更する必要があります。
- CREATE USER 'travellist_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
次に、travellist
データベースに対するこのユーザー権限を付与する必要があります。
- GRANT ALL ON travellist.* TO 'travellist_user'@'%';
これにより、 travellist_userユーザーにtravellist
データベースに対する完全な権限が与えられ、このユーザーがサーバー上で他のデータベースを作成または変更することはできなくなります。
これに続いて、MySQLシェルを終了します。
- exit
これで、MySQLコンソールに再度ログインして、新しいユーザーが適切な権限を持っているかどうかをテストできます。今回は、カスタムユーザーのクレデンシャルを使用します。
- mysql -u travellist_user -p
このコマンドの-p
フラグに注意してください。これにより、travellist_userユーザーの作成時に使用されるパスワードの入力を求められます。 MySQLコンソールにログインした後、travellist
データベースにアクセスできることを確認します。
- SHOW DATABASES;
これにより、次の出力が得られます。
Output+--------------------+
| Database |
+--------------------+
| information_schema |
| travellist |
+--------------------+
2 rows in set (0.01 sec)
次に、travellist
データベースにplaces
という名前のテーブルを作成します。 MySQLコンソールから、次のステートメントを実行します。
- CREATE TABLE travellist.places (
- id INT AUTO_INCREMENT,
- name VARCHAR(255),
- visited BOOLEAN,
- PRIMARY KEY(id)
- );
次に、places
テーブルにサンプルデータを入力します。
- INSERT INTO travellist.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 travellist.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コマンドは通常、既存のフレームワークとコンテンツ管理システムに基づいて新しいアプリケーションをブートストラップするために使用されます。
このガイドでは、サンプルアプリケーションとしてtravellist
を使用しますが、これを別のアプリケーションに自由に変更できます。 travellist
アプリケーションは、ローカルMySQLサーバーから取得した場所のリストを表示します。これは、Laravelの基本構成を示し、データベースに接続できることを確認することを目的としています。
まず、ユーザーのホームディレクトリに移動します。
- cd ~
次のコマンドは、デフォルト設定に基づいて、ベアボーンLaravelアプリケーションを含む新しいtravellist
ディレクトリを作成します。
- composer create-project --prefer-dist laravel/laravel travellist
次のような出力が表示されます。
OutputInstalling laravel/laravel (v5.8.17)
- Installing laravel/laravel (v5.8.17): Downloading (100%)
Created project in travellist
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 80 installs, 0 updates, 0 removals
- Installing symfony/polyfill-ctype (v1.11.0): Downloading (100%)
- Installing phpoption/phpoption (1.5.0): Downloading (100%)
- Installing vlucas/phpdotenv (v3.4.0): Downloading (100%)
- Installing symfony/css-selector (v4.3.2): Downloading (100%)
...
インストールが完了したら、アプリケーションのディレクトリにアクセスし、Laravelのartisan
コマンドを実行して、すべてのコンポーネントが正常にインストールされたことを確認します。
- cd travellist
- php artisan
次のような出力が表示されます。
OutputLaravel Framework 7.11.0
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable 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
コマンドを使用できます。
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=travellist
DB_USERNAME=travellist_user
DB_PASSWORD=password
...
それに応じて変数を調整します。 編集が完了したら、ファイルを保存して閉じ、変更を保持します。 nano
を使用している場合は、CTRL+X
、Y
、Enter
の順に使用して確認できます。
これでLaravelアプリケーションがセットアップされましたが、ブラウザーからアクセスできるようにするには、Webサーバーを構成する必要があります。 次のステップでは、Laravelアプリケーションを提供するようにNginxを構成します。
ステップ5—Nginxを設定する
Laravelは、リモートユーザーのホームディレクトリのローカルフォルダーにインストールされています。これはローカル開発環境ではうまく機能しますが、パブリックインターネットに公開されているWebサーバーにはお勧めできません。 アプリケーションフォルダを/var/www
に移動します。これは、Nginxで実行されているWebアプリケーションの通常の場所です。
まず、mv
コマンドを使用して、アプリケーションフォルダーとそのすべての内容を/var/www/travellist
に移動します。
- sudo mv ~/travellist /var/www/travellist
次に、Webサーバーユーザーにstorage
およびcache
フォルダーへの書き込みアクセスを許可する必要があります。Laravelはアプリケーションで生成されたファイルを保存します。
- sudo chown -R www-data.www-data /var/www/travellist/storage
- sudo chown -R www-data.www-data /var/www/travellist/bootstrap/cache
これでアプリケーションファイルは正常になりましたが、コンテンツを提供するようにNginxを構成する必要があります。 これを行うには、/etc/nginx/sites-available
に新しい仮想ホスト構成ファイルを作成します。
- sudo nano /etc/nginx/sites-available/travellist
次の構成ファイルには、Nginx上のLaravelアプリケーションの推奨設定が含まれています。
server {
listen 80;
server_name server_domain_or_IP;
root /var/www/travellist/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/travellist
ファイルにコピーし、必要に応じて、強調表示された値を調整して、独自の構成に合わせます。 編集が完了したら、ファイルを保存して閉じます。
新しい仮想ホスト構成ファイルをアクティブ化するには、sites-enabled
にtravellist
へのシンボリックリンクを作成します。
- sudo ln -s /etc/nginx/sites-available/travellist /etc/nginx/sites-enabled/
注:travellist
仮想ホストで使用されているのと同じserver_name
に対して以前に構成された別の仮想ホストファイルがある場合は、削除して古い構成を非アクティブ化する必要があります。 /etc/nginx/sites-enabled/
内の対応するシンボリックリンク。
構成に構文エラーが含まれていないことを確認するには、次を使用できます。
- 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
このファイルには、デフォルトで次の内容が含まれています。
<?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つのクエリを実行し、結果をフィルタリングします。 結果をtravellist
という名前のビューに返します。これを次に作成します。 このコンテンツをroutes/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('travellist', ['visited' => $visited, 'togo' => $togo ] );
});
編集が完了したら、ファイルを保存して閉じます。 次に、データベースの結果をユーザーに表示するビューを作成します。 resources/views
内に新しいビューファイルを作成します。
- nano resources/views/travellist.blade.php
次のテンプレートは、変数visited
とtogo
に基づいて場所の2つのリストを作成します。 このコンテンツを新しいビューファイルにコピーします。
<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 20.04サーバーで実行されるLEMPスタック(Linux、Nginx、MySQL、PHP)の上に新しいLaravelアプリケーションをセットアップしました。 また、データベースコンテンツをクエリし、結果をカスタムビューに表示するように、デフォルトルートをカスタマイズしました。
ここから、アプリケーションに必要な追加ページの新しいルートとビューを作成できます。 ルート、ビュー、およびデータベースサポートの詳細については、Laravelの公式ドキュメントを確認してください。 本番環境にデプロイする場合は、最適化セクションで、アプリケーションのパフォーマンスを向上させるためのいくつかの異なる方法も確認する必要があります。