前書き
Laravelは、最新のPHPアプリケーションを構築するためのツールとリソースのセットを提供するオープンソースのPHPフレームワークです。 組み込み機能を活用するcomplete ecosystemにより、Laravelの人気は過去数年で急速に高まり、多くの開発者が合理化された開発プロセスのフレームワークとして採用しています。
このガイドでは、Composerを使用してフレームワークの依存関係をダウンロードおよび管理し、Ubuntu18.04サーバーに新しいLaravelアプリケーションをインストールして構成します。 完了すると、MySQLデータベースからコンテンツをプルする機能的なLaravelデモアプリケーションが作成されます。
前提条件
このガイドを完了するには、まずUbuntu 18.04サーバーで次のタスクを実行する必要があります。
-
Create a
sudo
user and enableufw
。 これを設定するには、Initial Server Setup with Ubuntu 18.04ガイドに従うことができます。 -
Install a LEMP stack。 これをまだ設定していない場合は、How to Install Nginx, MySQL and PHP on Ubuntu 18.04に関するガイドに従うことができます。
-
Install Composer。 Composerを使用してLaravelとその依存関係をインストールします。 How to Install Composer on Ubuntu 18.04に関するガイドに従って、Composerをインストールできます。
[[step-1 -—- installing-required-php-modules]] ==ステップ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 -—-アプリケーション用のデータベースの作成]] ==ステップ2—アプリケーション用のデータベースの作成
Laravelの基本的なインストールと使用法を示すために、サンプルのtravel listアプリケーションを作成して、ユーザーが旅行したい場所のリストと、ユーザーがすでに訪れた場所のリストを表示します。 これは、nameと呼ぶ場所のフィールドと、それらをvisitedまたはnot visitedとしてマークする別のフィールドを持つ単純なplacesテーブルに格納できます。 visitedを呼び出します。 さらに、各エントリを一意に識別するためのidフィールドを含めます。
Laravelアプリケーションからデータベースに接続するには、専用のMySQLユーザーを作成し、このユーザーにtravel_list
データベースに対する完全な権限を付与します。
開始するには、次のコマンドを使用してrootデータベースユーザーとしてMySQLコンソールにログインします。
sudo mysql
新しいデータベースを作成するには、MySQLコンソールから次のコマンドを実行します。
CREATE DATABASE travel_list;
これで、新しいユーザーを作成し、作成したカスタムデータベースに対する完全な権限を付与できます。 この例では、パスワードpassword
でtravel_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_ENV
はproduction
に設定する必要があります。
次の.env
ファイルは、developmentのサンプルアプリケーションを設定します。
[.note]#Note: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+X
、次にY
、Enter
を使用して確認できます。
これで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]#Note:travel_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
次のようなページが表示されます。
これにより、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
を使用してこのファイル内で定義されます。このメソッドは、引数としてpathとcallback functionを受け取ります。
次のコードは、メインルートコールバック関数を置き換えます。 visited
フラグを使用してデータベースに2つのクエリを実行し、結果をフィルタリングします。 結果をtravel_list
という名前のビューに返します。これは、次に作成します。 このコンテンツをroutes/web.php
ファイルにコピーし、すでに存在するコードを置き換えます。
routes/web.php
$visited, 'togo' => $togo ] );
});
編集が完了したら、ファイルを保存して閉じます。 次に、データベース結果をユーザーに表示するビューを作成します。 resources/views
内に新しいビューファイルを作成します。
nano resources/views/travel_list.blade.php
次のテンプレートは、変数visited
とtogo
に基づいて場所の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
完了したら、ファイルを保存して閉じます。 ブラウザに移動して、アプリケーションをリロードします。 次のようなページが表示されます。
これで、MySQLデータベースからコンテンツをプルする機能的なLaravelアプリケーションができました。
結論
このチュートリアルでは、Ubuntu 18.04サーバーで実行されるLEMPスタック(Linux、Nginx、MySQL、PHP)の上に新しいLaravelアプリケーションを設定しました。 また、データベースコンテンツを照会し、カスタムビューで結果を表示するようにデフォルトルートをカスタマイズしました。
ここから、アプリケーションに必要な追加ページの新しいルートとビューを作成できます。 routes、views、およびdatabase supportの詳細については、Laravelの公式ドキュメントを確認してください。 本番環境にデプロイする場合は、optimization sectionをチェックして、アプリケーションのパフォーマンスを向上させるいくつかの異なる方法を確認する必要があります。
セキュリティを強化するには、サーバーにTLS / SSL証明書をインストールし、HTTPS経由でコンテンツを提供できるようにすることを検討する必要があります。 この目的のために、how to secure your Nginx installation with Let’s Encrypt on Ubuntu 18.04に関するガイドに従うことができます。