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

前書き

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

このガイドでは、Composerを使用してフレームワークの依存関係をダウンロードおよび管理し、Ubuntu18.04サーバーに新しいLaravelアプリケーションをインストールして構成します。 完了すると、MySQLデータベースからコンテンツをプルする機能的なLaravelデモアプリケーションが作成されます。

前提条件

このガイドを完了するには、まずUbuntu 18.04サーバーで次のタスクを実行する必要があります。

[[step-1 -—- installing-required-php-modules]] ==ステップ1—必要なPHPモジュールのインストール

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

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

sudo apt update

これで必要なパッケージをインストールできます:

sudo apt install php-mbstring php-xml php-bcmath

これでシステムはComposerを介してLaravelのインストールを実行する準備ができましたが、実行する前に、アプリケーション用のデータベースが必要になります。

[[ステップ-2 -—-アプリケーション用のデータベースの作成]] ==ステップ2—アプリケーション用のデータベースの作成

Laravelの基本的なインストールと使用法を示すために、サンプルのtravel listアプリケーションを作成して、ユーザーが旅行したい場所のリストと、ユーザーがすでに訪れた場所のリストを表示します。 これは、nameと呼ぶ場所のフィールドと、それらをvisitedまたはnot visitedとしてマークする別のフィールドを持つ単純なplacesテーブルに格納できます。 visitedを呼び出します。 さらに、各エントリを一意に識別するためのidフィールドを含めます。

Laravelアプリケーションからデータベースに接続するには、専用のMySQLユーザーを作成し、このユーザーにtravel_listデータベースに対する完全な権限を付与します。

開始するには、次のコマンドを使用してrootデータベースユーザーとしてMySQLコンソールにログインします。

sudo mysql

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

CREATE DATABASE travel_list;

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

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),
("Oslo", false),
("Rio", true),
("Cincinati", 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 | Cincinati |       0 |
| 11 | Helsinki  |       0 |
+----+-----------+---------+
11 rows in set (0.00 sec)

テストテーブルに有効なデータがあることを確認したら、MySQLコンソールを終了できます。

exit

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

[[step-3 -—- creating-a-new-laravel-application]] ==ステップ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

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

OutputInstalling laravel/laravel (v5.8.17)
  - Installing laravel/laravel (v5.8.17): Downloading (100%)
Created project in travel_list
> @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 travel_list
php artisan

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

OutputLaravel Framework 5.8.29

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コマンドラインツールが期待どおりに機能していることを確認します。 ただし、データベースとその他のいくつかの詳細を設定するには、アプリケーションを構成する必要があります。

[[step-4 -—- configuring-laravel]] ==ステップ4—Laravelの設定

Laravel構成ファイルは、アプリケーションのルートディレクトリ内のconfigというディレクトリにあります。 さらに、Composerを使用してLaravelをインストールすると、environment fileが作成されます。 このファイルには、アプリケーションが実行されている現在の環境に固有の設定が含まれており、configディレクトリにある通常の構成ファイルで設定されている値よりも優先されます。 新しい環境での各インストールには、データベース接続設定、デバッグオプション、アプリケーションURLなど、アプリケーションが実行されている環境によって異なる可能性がある項目を定義するためのカスタマイズされた環境ファイルが必要です。

[.warning]#Warning:環境構成ファイルには、データベースの資格情報やセキュリティキーなど、サーバーに関する機密情報が含まれています。 そのため、このファイルを公に共有しないでください。

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

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

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

[.note]#NoteAPP_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、次にYEnterを使用して確認できます。

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

[[step-5 -—- setting-up-nginx]] ==ステップ5—Nginxの設定

リモートユーザーのホームディレクトリのローカルフォルダーにLaravelをインストールしました。これはローカル開発環境ではうまく機能しますが、パブリックインターネットに公開されているウェブサーバーにはお勧めできません。 アプリケーションフォルダを/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アプリケーションのrecommended設定が含まれています。

/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.2-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/

[.note]#Notetravel_list仮想ホストで使用されているのと同じ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

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

Laravel splash page

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

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

[[step-6 -—- customizing-the-main-page]] ==ステップ6—メインページのカスタマイズ

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

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

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

nano routes/web.php

このファイルには、デフォルトで次のコンテンツが含まれています。

routes/web.php

ルートは、静的メソッドRoute::getを使用してこのファイル内で定義されます。このメソッドは、引数としてpathcallback functionを受け取ります。

次のコードは、メインルートコールバック関数を置き換えます。 visitedフラグを使用してデータベースに2つのクエリを実行し、結果をフィルタリングします。 結果をtravel_listという名前のビューに返します。これは、次に作成します。 このコンテンツをroutes/web.phpファイルにコピーし、すでに存在するコードを置き換えます。

routes/web.php

 $visited, 'togo' => $togo ] );
});

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

nano resources/views/travel_list.blade.php

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

resources/views/travel_list/blade.php



    Travel List



    

My Travel Bucket List

Places I'd Like to Visit

    @foreach ($togo as $newplace)
  • {{ $newplace->name }}
  • @endforeach

Places I've Already Been To

    @foreach ($visited as $place)
  • {{ $place->name }}
  • @endforeach

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

Demo Laravel Application

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

結論

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

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

セキュリティを強化するには、サーバーにTLS / SSL証明書をインストールし、HTTPS経由でコンテンツを提供できるようにすることを検討する必要があります。 この目的のために、how to secure your Nginx installation with Let’s Encrypt on Ubuntu 18.04に関するガイドに従うことができます。

Related