PHPのフレームワーク「Laravel」のインストールとセッティングについてです。データベースはMySQL8を利用します。
composerを使ってLaravelをインストール、その後DBの設定を記載し、開発用サーバーを起動します。
幾つかエラーが出やすい点があったので、エラー回避方法をメモしておきます。
[環境]
PHP 2.4.x
CentOS 7.x
MySQL 8.x
Laravel 5.5
Composerのインストール
Composerは、PHPパッケージの管理システムで、インストールするパッケージに必要なファイルを自動にダウンロード(インストール)してくれます。
$ yum install composer $ mv composer.phar /usr/local/bin/composer $ composer / ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/ Composer version 1.10.1 2020-03-13 20:34:27
Composerをインストールし、
「$ mv composer.phar /usr/local/bin/composer」
でパスを設定(ファイルを移動してパスを有効化)
$composerで大きな文字とバージョンが表示されたらインストール成功です。
なおcomposerのバージョンを最新にするには以下のコマンドを使います。
# composer self-update
Laravelのインストール
$ composer global require "laravel/installer" $ yum -y install --enablerepo=remi-php73 php-xml $ composer create-project --prefer-dist laravel/laravel [任意のプロジェクト名] "5.7.*"
※最後にバージョンを付けないと最新バージョンのものがインストールされます。 2020年4月では version7.5.2でした。
Laravelのバージョン確認は「$ php artisan -V」です。これはプロジェクトをインストールしたディレクトリで行わないと表示されません。
インストール時のエラー対処
create-projectで下記のようなエラーが表示されました(背景は赤色)
これはインストール時にメモリーが足りないというエラーのようです。
Project directory “/var/www/html/example.net/sample” is not empty.
php.iniでmemory_limitを増やすか、スワップ関係を調整するかの対処になるようですが、VPSサーバーを利用しており、メモリーを1GBに増やしてもダメ、スワップは変更できないようになっていて困りました。
できる限りメモリーを開放する作戦で、httpdとmysqlをストップして再度実行したところうまくインストールされました。
$ systemctl stop httpd $ systemctl stop mysqld
サーバーの立ち上げ
$ php artisan serve --host xxx.xxx.xxx.xxx
警告
pdo_sqliteが使えないというwarningが出ていました。
sqliteを使わない場合は問題ないようです。
MySQLの設定
$ cd /var/www/html/example.com/プロジェクト名 $ vi .env DB_CONNECTION=mysql DATABASE_URL=mysql: DB_HOST=xxx.xxx.xxx.xxx DB_PORT=3306 DB_DATABASE=MySQLデータベース名 DB_USERNAME=MySQLユーザー名 DB_PASSWORD=MySQLユーザーパスワード
Laravelの日本語化
$ cd /var/www/html/example.com/プロジェクト名 $ vi config/app.php 'timezone' => 'Asia/Tokyo', 'locale' => 'ja',
マイグレーションの実行
MySQLの設定が終わったら、マイグレーションを実行します。
$ php artisan migrate
Illuminate\Database\QueryException : SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client (SQL: select * from information_schema.tables where table_schema = sample and table_name = migrations) at /var/www/html/example.net/sample/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664 660| // If an exception occurs when attempting to run a query, we'll format the error 661| // message to include the bindings with SQL, which will make this exception a 662| // lot more helpful to the developer instead of just the database's errors. 663| catch (Exception $e) { > 664| throw new QueryException( 665| $query, $this->prepareBindings($bindings), $e 666| ); 667| } 668| Exception trace:
これはMySQL8.0.4からログイン認証方式が変更された影響でエラーがでています。
LaravelとMySQLの接続は新方式に対応していないので、旧タイプの認証方式に戻します。
新認証方式 : caching_sha2_password
旧認証方式 : mysql_native_password
変更の仕方はここの記事が参考になります。
MySQL8.0 認証方式を変更する(Laravel5)
今後新規のユーザーは旧認証方式にする場合
/etc/my.confに以下を記述します。
[mysqld] default_authentication_plugin=mysql_native_password
これらのエラー対処を行い、もう一度サーバーを起動します
$ php artisan serve --host xxx.xxx.xxx.xxx
http://XXX.XXX.XXX.XXX:8000 というURLがターミナルに表示されるので、それをブラウザで開くと表示されます。