WSL(Windows10)のUbuntuにLaravelインストール
Windows10ではWindows Subsystem for Linux(WSL)を利用することでLinuxをインストールすることができ、そのLinux上にLaravelをインストールすることが可能です。Windows10にインストールしたUbuntuでLaravelを動作させるためにはPHPのインストールなどいくつか設定があるので一つ一つ詳細に説明を行っていきます。Dockerを利用したLaravel Sailの設定ではないので注意してください。
Ubuntuのバージョンは、18.04。PHPのバージョンは7.2。Laravelバージョンは6.3と5.8の環境で行っています。
目次
Windows上へのLinuxのインストール
WSLを使ったUbuntuのインストールについては下記の文書を参考にしてください。
Ubuntuの設定
Ubuntuのインストール後、Ubuntuに接続していない場合は、Ubuntuに接続するためにコマンドプロンプトでwslコマンドを実行します。Ubuntuに接続後、cdコマンドでホームディレクトリに移動します。
PHPのインストール
WSLを使ってインストールしたUbuntuにはPHPがインストールされていないため、PHPのインストールを行う必要があります。また、Laravelのインストール要件が下記となっているので、モジュールに漏れがないようにPHPのインストールを行います。
- PHP >= 7.2.0
- BCMath PHP Extension
- Ctype PHP Extension
- JSON PHP Extension
- Mbstring PHP Extension
- OpenSSL PHP Extension
- PDO PHP Extension
- Tokenizer PHP Extension
- XML PHP Extension
PHPのバージョンは7.2をインストールしています。 Laravelの要件に必要なモジュールを一緒にインストールを行います。
$ sudo apt install php7.2 php7.2-mbstring php7.2-xml php7.2-bcmath
インストール後はPHPのバージョンとインストールしたモジュールを確認します。
$ php -v
PHP 7.2.19-0ubuntu0.18.04.2 (cli) (built: Aug 12 2019 19:34:28) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.19-0ubuntu0.18.04.2, Copyright (c) 1999-2018, by Zend Technologies
モジュールの確認はphp -mコマンドで行います。要件のモジュールがインストールされていることが確認できます。
$ php -m
[PHP Modules]
bcmath
・
ctype
・
json
・
mbstring
openssl
・
PDO
・
tokenizer
・
xml
・
Composerのインストール
LaravelをインストールするためにはComposerをインストールする必要があります。ComposerはPHPのパッケージ管理ツールで、Composerを使うとパッケージを効率よく管理することができます。
ComposerをインストールするためにComposerの公式ホームページにアクセスしてDownloadボタンをクリックします。
Composerをコマンドラインでインストールするため下記の赤枠にあるスクリプトをコピーします。
ターミナルにペーストして実行します。
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'a5c698ffe4b8e849a443b120cd5ba38043260d5c4023dbf93e1558871f1f07f58274fc6f4c93bcfd858c6bd0775cd8d1') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
実行すると実行したフォルダにcomposer.pharファイルが作成されます。
composer.phar -Vコマンドを実行してインストールしたComposerのバージョンを確認することができます。
$ ./composer.phar -V
Composer version 1.9.0 2019-08-02 20:55:32
composerコマンドを他のフォルダからも実行できるように/user/local/bin/フォルダの下に移動します。その際に名前はcomposerに変更します。
$ sudo mv composer.phar /usr/local/bin/composer
whichコマンドを実行してcomposerのパスが通っているか確認します。whichコマンド実行後にパスが表示されれたパスが通っているため、どこのフォルダからもcomposerコマンドを実行することができます。
$ which composer
/usr/local/bin/composer
zipコマンドのインストール
Laravelのインストールを行う際にunzipコマンドが必要になるため、zipコマンドのインストールを行います。インストール直後のUbuntuにはzipコマンドは入っていません。
$ sudo apt install zip
Laravel6.xのインストール
composerのインストールも完了したので、Laravelのインストールを行います。 下記を実行すると実行フォルダの下にlaravel6というフォルダが作成され、そのフォルダの中にLaravelに必要なファイルが保存されます。laravel6は任意の名前なので好きな名前を付けてください。
$composer create-project --prefer-dist laravel/laravel laravel6
Laravel5.8のインストール
composerのインストールも完了したので、Laravelのインストールを行います。下記を実行すると実行フォルダの下にlaravel5.8というフォルダが作成され、そのフォルダの中にLaravelに必要なファイルが保存されます。laravel5.8という名前は任意なので好きな名前を付けてください。
$composer create-project --prefer-dist laravel/laravel laravel5.8
インストールが完了したら、php artisan serveコマンドで開発用WEBサーバを起動してLaravelにアクセスできるか確認を行います。
Laravelのインストールフォルダであるlaravel5.8で実行してください。
$ cd laravel5.8
$ php artisan serve
Laravel development server started: &lgt;http://127.0.0.1:8000>
ブラウザでアクセスし、下記の画面が表示されたらLaravelのインストールは正常に完了しています。
sqlite3のインストール
本文書ではsqliteとMySQLデータベースのインストール方法と設定方法を説明しています。どちらかのデータベースを選択して、設定を行ってください。
Laravelにデータを保存するためにデータベースが必要になります。sqlite3データベースを利用するためapt installコマンドでsqlite3をインストールします。
$ sudo apt install sqlite3
またsqlite3データベースへ接続するためのPDOドライバも必要になるためインストールを行います。
$ sudo apt install php7.2-sqlite3
sqlite3のデータベースファイルの作成を行います。Laravelのインストールフォルダで実行してください。
$ touch database/database.sqlite
sqlite3データベースの設定
Laravelからsqliteのデータベースに接続するために.envファイルのDB_CONNECTIONの設定値をmysqlからsqliteに変更します。
DB_CONNECTION=sqlite
php artisan migrateコマンドでusersテーブルの作成を行います。下記のように表示されたらテーブルの作成は完了しています。
$ php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (0.01 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (0.01 seconds)
MySQLのインストール
WSLのUbuntuにMySQLをインストールして、Laravelのテーブルが作成できるか確認を行います。いくつか途中でエラーが発生していますが、対処方法も記述しています。
まず、apt installコマンドでmysql-serverパッケージのインストールを行います。
$ sudo apt install mysql-server
インストールされたmysqlのバージョンを確認します。5.7がインストールされていることが確認できます。
$ mysql --version
mysql Ver 14.14 Distrib 5.7.27, for Linux (x86_64) using EditLine wrapper
次にLaravelからMySQLに接続用のドライバーをインストールします。
8$ sudo apt install php7.2-mysql
MySQLの起動
インストール後MySQLの起動を行うとエラーが発生しました。エラーが発生しますが、MySQLは起動しています。
$ sudo service mysql start
No directory, logging in with HOME=/sqld
mysqlユーザのディレクトリが下記のように nonexistentになっているため変更を行う必要があります。
$ grep mysql /etc/passwd
mysql:x:111:116:MySQL Server,,,:/nonexistent:/bin/false
変更するためには起動したMySQLを一度停止する必要があります。
$ sudo service mysql stop
* Stopping MySQL database server mysqld
停止後にmysqlユーザのディレクトリを変更します。
$ sudo usermod -d /var/lib/mysql/ mysql
変更後はエラーなしでmysqlが起動します。
$ sudo service mysql start
* Starting MySQL database server mysqld [ OK ]
Laravel用データベースの作成
データベースを作成するためには、MySQLにログインする必要があります。下記のコマンドで接続を行います。
$ sudo mysql -u root
MySQLへの接続後文字コードの確認を行います。下記のコマンドを実行するとcharacter_set_databaseとcharacter_set_serverの文字コードがlatin1になっているのでutf8へ変更します。
mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
変更は/etc/mysql/mysql.confの下にあるmysqld.cnfファイルで行います。ファイルを開いて一番再度に下記の設定を追加してください。
character-set-server=utf8
追加後はMySQLに変更を反映させるためmysqlのサービスの再起動を行います。
$ sudo service mysql restart
* Stopping MySQL database server mysqld [ OK ]
* Starting MySQL database server mysqld [ OK ]
mysqlのサービスを再起動後に再度MySQLに接続して、文字コードがutf8に変更されていることを確認します。
mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
接続後create databaseコマンドでLaravel用のデータベースを作成します。
mysql> create database laravel58;
Query OK, 1 row affected (0.01 sec)
データベースが作成されているか確認します。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| laravel58 |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
LaravelでMySQLに接続する際にport番号も必要になるので確認を行っておきます。port番号は3306だということがわかります。
mysql> show variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 3306 |
+---------------+-------+
1 row in set (0.00 sec)
MySQLの準備は完了したのでLaravel側の設定に移ります。
Laravelの.envファイルを開きデータベース接続に関するパラメータを以下のように変更します。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel58
DB_USERNAME=root
DB_PASSWORD=
.envファイルの更新が完了したら、Laravelのテーブルを作成するためにphp artisan migrateコマンドを実行します。
$ php artisan migrate
しかし、SQLSTATE[HY000] [1698] Access denied for user ‘root’@’localhost’のエラーが発生してテーブルを作成することができません。
これはMySQLに接続する際にsudoを使ってアクセスしなければならないことと同じ問題でアクセスすることができません。原因は、rootユーザの認証方式です。
MySQLに接続して、rootの認証方式を確認します。
mysql> SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| root | localhost | auth_socket |
| mysql.session | localhost | mysql_native_password |
| mysql.sys | localhost | mysql_native_password |
| debian-sys-maint | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
4 rows in set (0.00 sec)
rootのpluginを確認するとauto_socketになっています。MySQLにログインする際にLinuxのログインユーザの名前と一致するかチェックを行っているためMysqlのrootユーザにパスワードを設定していたとしても有効にならず接続することができません。sudoを使用せずにログインするためにこのpluginを変更する必要があります。
下記のコマンドでpluginとパスワードを設定します。パスワードは’’で引き続きブランクにしています。パスワードを設定したい場合はBYの後の”の中にパスワード文字列を入力してください。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';
Query OK, 0 rows affected (0.01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
実行後pluginが変更されているか確認します。pluginがauth_socketからmysql_native_passwordに変更されていることが確認できます。
mysql> SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| root | localhost | mysql_native_password |
| mysql.session | localhost | mysql_native_password |
| mysql.sys | localhost | mysql_native_password |
| debian-sys-maint | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
4 rows in set (0.00 sec)
sudoをつけることなくmysqlコマンドでMySQLに接続できれば設定は反映されています。
$ mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
再度php artisan migrareコマンドを実行します。問題なくテーブルが作成されることを確認することができます。
$ php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (0.03 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (0.03 seconds)
npmのインストール
フロントエンドにvue.js等のJavaScriptを利用する場合はコンパイルが必要となるので、npm(node package manager)をインストールする必要があります。npmのインストールは下記のコマンドを実行します。
$ sudo apt install npm
インストールに失敗した場合は、apt-get updateを実行して再度npmのインストールを行ってください。
$ sudo apt-get update
・
・
$ sudo apt install npm
認証機能の追加(6.xの場合)
ログインの認証機能を使用するためには、laravel/uiパッケージをインストールする必要があります 。
$ composer require laravel/ui
次にphp artisan ui vue –authコマンドを実行するとログイン機能とvue.jsの設定も一緒にインストールされます。
$ php artisan ui vue --auth
Vue scaffolding installed successfully.
Please run "npm install && npm run dev" to compile your fresh scaffolding.
Authentication scaffolding generated successfully.
認証機能とvueをインストールしたらnpmコマンドを利用してJavaScriptライブラリのインストールとコンパイルを実行します。
$ npm install && npm run dev
実行後、ユーザの登録をブラウザ上から行うことができます。
認証機能の追加(5.8の場合)
ユーザの認証機能を追加するためにphp artisan authコマンドを実行します。実行後、ユーザの登録をブラウザ上から行うことができます。
$ php artisan make:auth
Authentication scaffolding generated successfully.
エクスプローラーでフォルダを開く
Laravelのインストールフォルダを開くためには、explorer.exeコマンドを実行します。インストールフォルダの中で下記のコマンドを実行するとエクスプローラーでフォルダの中身を確認することができます。
$ explorer.exe .
WSLのパスも確認することができます。
\\wsl$\Ubuntu\home\ユーザ名