Ubuntu22.04(LEMP)でNginxを使用してLaravelをインストールおよび構成する方法
序章
Laravel は、最新のPHPアプリケーションを構築するための一連のツールとリソースを提供するオープンソースのPHPフレームワークです。 完全なエコシステムに組み込まれた機能を活用することで、Laravelの人気はここ数年で急速に高まり、多くの開発者が合理化された開発プロセスのフレームワークとして採用しています。
このガイドでは、Ubuntu 22.04サーバーに新しいLaravelアプリケーションをインストールして構成し、 Composer を使用してフレームワークの依存関係をダウンロードおよび管理し、Nginxを使用してアプリケーションを提供します。 終了すると、MySQL8データベースからコンテンツをプルする機能的なLaravelデモアプリケーションができあがります。
前提条件
このガイドを完了するには、最初にUbuntu22.04サーバーで次のタスクを実行する必要があります。
- sudoユーザーを作成し、ufwを有効にします。 これを設定するには、 Ubuntu22.04の初期サーバー設定ガイドに従ってください。
- MySQL8でLEMPスタックをインストールします。 これをまだ設定していない場合は、 Ubuntu 22.04 にNginx、MySQL、およびPHPをインストールする方法に関するガイドのステップ1から3に従うことができます。
- Composerをインストールします。 Composer を使用して、Laravelとその依存関係をインストールします。 Ubuntu22.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 php-curl
これで、システムはComposerを介してLaravelのインストールを実行する準備ができましたが、実行する前に、アプリケーション用のデータベースが必要になります。
ステップ2—アプリケーション用のデータベースを作成する
Laravelの基本的なインストールと使用法を示すために、 travel list アプリケーションを作成して、ユーザーが旅行したい場所のリストと、ユーザーがすでに訪れた場所のリストを表示します。 これは、 Places テーブルに格納できます。このテーブルには、 name と呼ぶ場所のフィールドと、visitedまたはnotとしてマークする別のフィールドがあります。訪問済み、これを訪問済みと呼びます。 さらに、各エントリを一意に識別するためのidフィールドを含めます。
Laravelアプリケーションからデータベースに接続するには、専用のMySQLユーザーを作成し、このユーザーに travellist
データベース。
この記事の執筆時点では、ネイティブMySQLPHPライブラリ mysqlnd
はサポートしていません caching_sha2_authentication
、MySQL8のデフォルトの認証方法。 データベースユーザーを設定する必要があります mysql_native_password
PHPからMySQLデータベースに接続できるようにするための認証方法。
開始するには、次のコマンドを使用して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)
次に、という名前のテーブルを作成します places
の中に travellist
データベース。 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アプリケーションを作成する
次に、を使用して新しいLaravelアプリケーションを作成します composer create-project
指図。 このComposerコマンドは通常、既存のフレームワークとコンテンツ管理システムに基づいて新しいアプリケーションをブートストラップするために使用されます。
このガイド全体で、 travellist
サンプルアプリケーションとして、しかしあなたはこれを他のものに自由に変更することができます。 The travellist
アプリケーションは、ローカルMySQLサーバーから取得した場所のリストを表示します。これは、Laravelの基本構成を示し、データベースに接続できることを確認することを目的としています。
まず、ユーザーのホームディレクトリに移動します。
- cd ~
次のコマンドは、新しいを作成します travellist
デフォルト設定に基づくベアボーンLaravelアプリケーションを含むディレクトリ:
- composer create-project --prefer-dist laravel/laravel travellist
次のような出力が表示されます。
OutputCreating a "laravel/laravel" project at "./travellist"
Installing laravel/laravel (v9.1.5)
- Installing laravel/laravel (v9.1.5): Extracting archive
Created project in /home/sammy/travellist
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies
. . .
Package manifest generated successfully.
78 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
> @php artisan vendor:publish --tag=laravel-assets --ansi --force
No publishable resources for tag [laravel-assets].
Publishing complete.
> @php artisan key:generate --ansi
Application key set successfully.
. . .
インストールが完了したら、アプリケーションのディレクトリにアクセスしてLaravelを実行します artisan
すべてのコンポーネントが正常にインストールされたことを確認するコマンド:
- cd travellist
- php artisan
次のような出力が表示されます。
OutputLaravel Framework 9.8.1
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
このオプションを有効にすると、ブラウザからアプリケーションをテストするときに重要なデバッグ情報が得られます。 The APP_ENV
変数はに設定する必要があります development
また testing
この場合。
本番環境にLaravelをインストールする場合は、 APP_DEBUG
これは、アプリケーションに関する機密情報を最終ユーザーに表示するためです。 The 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/php8.1-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
ファイルを作成し、必要に応じて、強調表示された値を調整して、独自の構成に合わせます。 編集が完了したら、ファイルを保存して閉じます。
新しい仮想ホスト構成ファイルをアクティブ化するには、次のシンボリックリンクを作成します。 travellist
の sites-enabled
:
- sudo ln -s /etc/nginx/sites-available/travellist /etc/nginx/sites-enabled/
注:以前に同じように構成された別の仮想ホストファイルがある場合 server_name
で使用される travellist
仮想ホストの場合、内部の対応するシンボリックリンクを削除して、古い構成を非アクティブ化する必要がある場合があります /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
次に、ブラウザに移動し、サーバーのドメイン名またはIPアドレスを使用してアプリケーションにアクセスします。 server_name
構成ファイルのディレクティブ:
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
、パスとコールバック関数を引数として受け取ります。
次のコードは、メインルートのコールバック関数を置き換えます。 を使用してデータベースに2つのクエリを実行します visited
結果をフィルタリングするためのフラグ。 結果をという名前のビューに返します 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
次のテンプレートは、変数に基づいて場所の2つのリストを作成します visited
と togo
. このコンテンツを新しいビューファイルにコピーします。
<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 22.04サーバーで実行されるLEMPスタック(Linux、Nginx、MySQL、PHP)の上に新しいLaravelアプリケーションをセットアップしました。 また、データベースコンテンツをクエリし、結果をカスタムビューに表示するように、デフォルトルートをカスタマイズしました。
ここから、アプリケーションに必要な追加ページの新しいルートとビューを作成できます。 ルート、ビュー、およびデータベースサポートの詳細については、Laravelの公式ドキュメントを確認してください。 本番環境にデプロイする場合は、最適化セクションで、アプリケーションのパフォーマンスを向上させるためのいくつかの異なる方法も確認する必要があります。