開発者ドキュメント

Ubuntu 20.04(LEMP)でNginxを使用してLaravelをインストールおよび構成する方法

序章

Laravel は、最新のPHPアプリケーションを構築するための一連のツールとリソースを提供するオープンソースのPHPフレームワークです。 完全なエコシステムに組み込まれた機能を活用することで、Laravelの人気はここ数年で急速に高まり、多くの開発者が合理化された開発プロセスのフレームワークとして採用しています。

このガイドでは、Ubuntu 20.04サーバーに新しいLaravelアプリケーションをインストールして構成し、 Composer を使用してフレームワークの依存関係をダウンロードおよび管理し、Nginxを使用してアプリケーションを提供します。 終了すると、MySQL8データベースからコンテンツをプルする機能的なLaravelデモアプリケーションができあがります。

前提条件

このガイドを完了するには、最初にUbuntu20.04サーバーで次のタスクを実行する必要があります。

ステップ1—必要なPHPモジュールをインストールする

Laravelをインストールする前に、フレームワークに必要ないくつかのPHPモジュールをインストールする必要があります。 aptを使用して、php-mbstringphp-xml、およびphp-bcmathPHPモジュールをインストールします。 これらのPHP拡張機能は、文字エンコード、XML、および高精度数学を処理するための追加のサポートを提供します。

このセッションでaptを初めて使用する場合は、最初にupdateコマンドを実行して、パッケージマネージャーのキャッシュを更新する必要があります。

  1. sudo apt update

これで、必要なパッケージを次のコマンドでインストールできます。

  1. 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コンソールにログインします。

  1. sudo mysql

新しいデータベースを作成するには、MySQLコンソールから次のコマンドを実行します。

  1. CREATE DATABASE travellist;

これで、新しいユーザーを作成し、作成したカスタムデータベースに対する完全な権限をユーザーに付与できます。 この例では、 travellist_userという名前のユーザーをパスワードpasswordで作成していますが、これを選択した安全なパスワードに変更する必要があります。

  1. CREATE USER 'travellist_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

次に、travellistデータベースに対するこのユーザー権限を付与する必要があります。

  1. GRANT ALL ON travellist.* TO 'travellist_user'@'%';

これにより、 travellist_userユーザーにtravellistデータベースに対する完全な権限が与えられ、このユーザーがサーバー上で他のデータベースを作成または変更することはできなくなります。

これに続いて、MySQLシェルを終了します。

  1. exit

これで、MySQLコンソールに再度ログインして、新しいユーザーが適切な権限を持っているかどうかをテストできます。今回は、カスタムユーザーのクレデンシャルを使用します。

  1. mysql -u travellist_user -p

このコマンドの-pフラグに注意してください。これにより、travellist_userユーザーの作成時に使用されるパスワードの入力を求められます。 MySQLコンソールにログインした後、travellistデータベースにアクセスできることを確認します。

  1. SHOW DATABASES;

これにより、次の出力が得られます。

Output
+--------------------+ | Database | +--------------------+ | information_schema | | travellist | +--------------------+ 2 rows in set (0.01 sec)

次に、travellistデータベースにplacesという名前のテーブルを作成します。 MySQLコンソールから、次のステートメントを実行します。

  1. CREATE TABLE travellist.places (
  2. id INT AUTO_INCREMENT,
  3. name VARCHAR(255),
  4. visited BOOLEAN,
  5. PRIMARY KEY(id)
  6. );

次に、placesテーブルにサンプルデータを入力します。

  1. INSERT INTO travellist.places (name, visited)
  2. VALUES ("Tokyo", false),
  3. ("Budapest", true),
  4. ("Nairobi", false),
  5. ("Berlin", true),
  6. ("Lisbon", true),
  7. ("Denver", false),
  8. ("Moscow", false),
  9. ("Olso", false),
  10. ("Rio", true),
  11. ("Cincinnati", false),
  12. ("Helsinki", false);

データがテーブルに正常に保存されたことを確認するには、次のコマンドを実行します。

  1. 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コンソールを終了できます。

  1. exit

これで、アプリケーションを作成し、新しいデータベースに接続するように構成する準備が整いました。

ステップ3—新しいLaravelアプリケーションを作成する

次に、composer create-projectコマンドを使用して新しいLaravelアプリケーションを作成します。 このComposerコマンドは通常、既存のフレームワークとコンテンツ管理システムに基づいて新しいアプリケーションをブートストラップするために使用されます。

このガイドでは、サンプルアプリケーションとしてtravellistを使用しますが、これを別のアプリケーションに自由に変更できます。 travellistアプリケーションは、ローカルMySQLサーバーから取得した場所のリストを表示します。これは、Laravelの基本構成を示し、データベースに接続できることを確認することを目的としています。

まず、ユーザーのホームディレクトリに移動します。

  1. cd ~

次のコマンドは、デフォルト設定に基づいて、ベアボーンLaravelアプリケーションを含む新しいtravellistディレクトリを作成します。

  1. composer create-project --prefer-dist laravel/laravel travellist

次のような出力が表示されます。

Output
Installing 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コマンドを実行して、すべてのコンポーネントが正常にインストールされたことを確認します。

  1. cd travellist
  2. php artisan

次のような出力が表示されます。

Output
Laravel 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を使用します。

  1. nano .env

このファイルには多くの構成変数がありますが、ここですべてを設定する必要はありません。 次のリストには、すぐに注意が必要な変数の概要が含まれています。

デフォルトでは、これらの値は、Laravelが提供するパッケージ済みのVagrantボックスであるHomesteadを使用するローカル開発環境用に構成されています。 サンプルアプリケーションの現在の環境設定を反映するように、これらの値を変更します。

Laravelを開発またはテスト環境にインストールする場合は、APP_DEBUGオプションを有効のままにしておくことができます。これにより、アプリケーションのテスト中に重要なデバッグ情報が得られます。ブラウザから。 この場合、APP_ENV変数はdevelopmentまたはtestingに設定する必要があります。

Laravelを本番環境にインストールする場合は、APP_DEBUGオプションを無効にする必要があります。これは、アプリケーションに関する機密情報を最終的なユーザーに表示するためです。 この場合のAPP_ENVproductionに設定する必要があります。

次の.envファイルは、開発のサンプルアプリケーションを設定します。

APP_KEY変数には、Composerを介してLaravelをインストールしたときに自動生成された一意のキーが含まれています。 この値を変更する必要はありません。 新しいセキュアキーを生成する場合は、php artisan key:generateコマンドを使用できます。

/var/www/travellist/.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=travellist
DB_USERNAME=travellist_user
DB_PASSWORD=password

...

それに応じて変数を調整します。 編集が完了したら、ファイルを保存して閉じ、変更を保持します。 nanoを使用している場合は、CTRL+XYEnterの順に使用して確認できます。

これでLaravelアプリケーションがセットアップされましたが、ブラウザーからアクセスできるようにするには、Webサーバーを構成する必要があります。 次のステップでは、Laravelアプリケーションを提供するようにNginxを構成します。

ステップ5—Nginxを設定する

Laravelは、リモートユーザーのホームディレクトリのローカルフォルダーにインストールされています。これはローカル開発環境ではうまく機能しますが、パブリックインターネットに公開されているWebサーバーにはお勧めできません。 アプリケーションフォルダを/var/wwwに移動します。これは、Nginxで実行されているWebアプリケーションの通常の場所です。

まず、mvコマンドを使用して、アプリケーションフォルダーとそのすべての内容を/var/www/travellistに移動します。

  1. sudo mv ~/travellist /var/www/travellist

次に、Webサーバーユーザーにstorageおよびcacheフォルダーへの書き込みアクセスを許可する必要があります。Laravelはアプリケーションで生成されたファイルを保存します。

  1. sudo chown -R www-data.www-data /var/www/travellist/storage
  2. sudo chown -R www-data.www-data /var/www/travellist/bootstrap/cache

これでアプリケーションファイルは正常になりましたが、コンテンツを提供するようにNginxを構成する必要があります。 これを行うには、/etc/nginx/sites-availableに新しい仮想ホスト構成ファイルを作成します。

  1. sudo nano /etc/nginx/sites-available/travellist

次の構成ファイルには、Nginx上のLaravelアプリケーションの推奨設定が含まれています。

/ etc / nginx / sites-available / travellist
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-enabledtravellistへのシンボリックリンクを作成します。

  1. sudo ln -s /etc/nginx/sites-available/travellist /etc/nginx/sites-enabled/

travellist仮想ホストで使用されているのと同じserver_nameに対して以前に構成された別の仮想ホストファイルがある場合は、削除して古い構成を非アクティブ化する必要があります。 /etc/nginx/sites-enabled/内の対応するシンボリックリンク。

構成に構文エラーが含まれていないことを確認するには、次を使用できます。

  1. sudo nginx -t

次のような出力が表示されます。

  1. Output
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
  2. nginx: configuration file /etc/nginx/nginx.conf test is successful

変更を適用するには、次のコマンドでNginxをリロードします。

  1. sudo systemctl reload nginx

次に、ブラウザに移動し、構成ファイルのserver_nameディレクティブで定義されているように、サーバーのドメイン名またはIPアドレスを使用してアプリケーションにアクセスします。

http://server_domain_or_IP

次のようなページが表示されます。

これにより、NginxサーバーがLaravelにサービスを提供するように適切に構成されていることが確認されます。 この時点から、デフォルトのインストールで提供されるスケルトンの上にアプリケーションを構築し始めることができます。

次のステップでは、アプリケーションのメインルートを変更して、LaravelのDBファサードを使用してデータベース内のデータをクエリします。

ステップ6—メインページのカスタマイズ

これまでにこのガイドのすべての手順を実行したとすると、動作するLaravelアプリケーションと、サンプルデータを含むplacesという名前のデータベーステーブルが必要です。

次に、メインのアプリケーションルートを編集してデータベースをクエリし、コンテンツをアプリケーションのビューに返します。

メインルートファイルroutes/web.phpを開きます。

  1. 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つのクエリを実行し、結果をフィルタリングします。 結果をtravellistという名前のビューに返します。これを次に作成します。 このコンテンツを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('travellist', ['visited' => $visited, 'togo' => $togo ] );
});

編集が完了したら、ファイルを保存して閉じます。 次に、データベースの結果をユーザーに表示するビューを作成します。 resources/views内に新しいビューファイルを作成します。

  1. nano resources/views/travellist.blade.php

次のテンプレートは、変数visitedtogoに基づいて場所の2つのリストを作成します。 このコンテンツを新しいビューファイルにコピーします。

resources / views / travellist / 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 20.04サーバーで実行されるLEMPスタック(Linux、Nginx、MySQL、PHP)の上に新しいLaravelアプリケーションをセットアップしました。 また、データベースコンテンツをクエリし、結果をカスタムビューに表示するように、デフォルトルートをカスタマイズしました。

ここから、アプリケーションに必要な追加ページの新しいルートとビューを作成できます。 ルートビュー、およびデータベースサポートの詳細については、Laravelの公式ドキュメントを確認してください。 本番環境にデプロイする場合は、最適化セクションで、アプリケーションのパフォーマンスを向上させるためのいくつかの異なる方法も確認する必要があります。

モバイルバージョンを終了