[Laravel] インストールとMySQLの接続

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で下記のようなエラーが表示されました(背景は赤色)
これはインストール時にメモリーが足りないというエラーのようです。

[InvalidArgumentException]
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が出ていました。

Unable to load dynamic library ‘pdo_sqlite’ (tried: /usr/lib64/php/modules/pdo_sqlite

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がターミナルに表示されるので、それをブラウザで開くと表示されます。



Author: webmaster