序章

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とその依存関係をインストールします。 Ubuntu 18.04にComposerをインストールする方法のガイドに従って、Composerをインストールできます。

サーバーが現在使用しているPHPのバージョンを確認するには、次のコマンドを実行します。

  1. php -v
output
PHP 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-mbstringphp-xml、およびphp-bcmathPHPモジュールが必要です。 これらのPHP拡張機能は、文字エンコード、XML、および高精度数学を処理するための追加のサポートを提供します。 さらに、PHPコードを介してデータベースに接続できるようにするには、php-mysqlが必要です。

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

  1. sudo apt update

sudo権限を検証するために、ユーザーパスワードの入力を求められる場合があります。 アップデートが完了したら、次の方法で必要なパッケージをインストールできます。

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

  1. sudo mysql

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

  1. CREATE DATABASE travel_list;

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

  1. GRANT ALL ON travel_list.* TO 'travel_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

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

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

  1. exit

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

  1. mysql -u travel_user -p

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

  1. SHOW DATABASES;

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

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

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

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

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

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

  1. exit

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

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

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

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

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

  1. cd ~

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

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

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

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

  1. cd travel_list
  2. php artisan

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

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

  1. 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_ENVproductionに設定する必要があります。

次の.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+XYEnterの順に使用して確認できます。

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

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

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

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

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

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

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

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

  1. 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-enabledtravel_listへのシンボリックリンクを作成します。

  1. 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のデフォルトのウェルカムページを無効にすることができます。

  1. sudo rm -f /etc/nginx/sites-enabled/default

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

  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

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

Laravel splash page

これにより、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つのクエリを実行し、結果をフィルタリングします。 結果を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内に新しいビューファイルを作成します。

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

次のテンプレートは、変数visitedtogoに基づいて場所の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>

完了したら、ファイルを保存して閉じます。 次に、ブラウザに移動して、アプリケーションをリロードします。 次のようなページが表示されます。

Demo Laravel Application

これで、MySQLデータベースからコンテンツをプルする機能的なLaravelアプリケーションができました。

結論

このチュートリアルでは、Ubuntu 18.04サーバーで実行されるLEMPスタック(Linux、Nginx、MySQL、PHP)の上に新しいLaravelアプリケーションをセットアップしました。 また、データベースコンテンツをクエリし、結果をカスタムビューに表示するように、デフォルトルートをカスタマイズしました。

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

セキュリティを向上させるには、サーバーにTLS / SSL証明書をインストールして、HTTPS経由でコンテンツを提供できるようにすることを検討する必要があります。 この目的のために、[Ubuntu18.04でLet’sEncryptを使用してNginxインストールを保護する方法]( ../how-to-secure-nginx- with-let-s-encrypt-on-ubuntu-18-04 )。

テクニカルトークやチュートリアルシリーズなど、このフレームワークに関するその他の学習資料については、Laravelタグページも確認してください。