【完全版】エックスサーバにLaravelインストール、公開方法まで一挙公開!
レンタルサーバーの【エックスサーバー】でLaravelを利用できる機会をもらったのでLaravel8をXserverにインストールをして動作確認をしていきます。初めてLaravelをサーバ上で動作させる人のために手順を省かずできるだけ詳細に説明を行っている完全版です。
Xserverの利用目的は間違いなくWordPressだと思いますが、コマンドラインを使えばLaravelのインストールも行うことができます。Xserverでコマンドラインを使えることを知らない人もいるかもしれませんのでLaravelのインストールだけではなくSSH設定の手順も含めて説明を行っています。Laravel8をインストールしますがLaravel5~Laravel7もインストールすることはできます。現在のLaravelの最新バージョンはLaravel10です。Laravel10でもXserverにインストールを行いサービスを公開できることは確認済みです。
本文書ではWindows10で設定を行いXserverへの接続にはTeraTermを利用します。MacからのSSHでの接続方法についても説明しています。
レンタルサーバなのでクラウドサービスのような面倒な設定も必要なく定額なので料金の不安もありません高速で安定稼働なのでインターネット上に自作のLaravelアプリケーションを公開したいならXserverはおすすめです。Xserverでは複数のドメインも設定できるのでブログを公開しながらLaravelアプリ公開も可能です。10日間無料お試しもあるのでLaravelの入門者の人でも勉強のために10日の間でLararavelアプリを構築を試すということもできます。10日以内でのLaravelアプリケーションの公開にチャレンジしてみてください。
目次
SSHの設定
Xserverでコマンドラインを実行するためにはSSHでXserverにログインする必要があります。SSHの設定方法についてはXserverのマニュアルにも記載されているのでその手順に沿って進めていきます。
Xserver側でのSSH設定
SSHの有効化はXserverのサーバパネルで行う必要があるためサーバパネルにログインします。XserverのサーバIDとパスワードを入力して”ログイン”ボタンをクリックしてください。
サーバパネル画面が表示されます。SSHの設定は中央左寄りのアカウントにあります。
SSH設定をクリックしてください
デフォルトではOFF(無効化)になっているのでSSH設定でOFFからONにします。
ON(有効化)の設定は完了です。
公開鍵認証用鍵ペアの生成をXserver上で行うことができます。鍵ペアの生成のためパスフレーズを入れて”確認画面へ進む”ボタンをクリックします。パスフレーズは後ほどTeraTermでSSH設定を行ってXserverに接続する際に利用します。
確認画面が表示されるのでそのまま”生成する”ボタンをクリックしてください。
生成ボタンをクリックすると鍵が作成されSSHで接続する際に利用する鍵の情報が入ったファイルがダウンロードできます。この鍵ファイルの情報を元にWindowsからXserverに接続を行います。
ダウンロードした鍵ファイルはSSH接続時に指定する必要があるので任意の場所に保存していください。これでXserver側でのSSHの設定は完了です。
Windows側でのSSH設定
Xserver側での設定が完了したらWindows側でSSHの設定を行います。接続にはTeraTermを利用します。インストールが必要な場合はインストールを行ってください。
TeraTermを起動し、設定メニューからSSH認証を設定してください。
SSHの認証設定画面が表示されるので、認証方式をRSA/DSA/ECDSA/ED25519鍵を使うを選択してXserverのサーバパネルからダウンロードしたキーファイル(XXX.key)ファイルを指定してください。指定したらOKボタンをクリックしてください。
次はTeraTermのファイルメニューから新しい接続を選択してください。
新しい接続の入力画面が表示されるのでホスト名に契約したXserverのサーバ名、TCPポートを22から10022に変更してください。
入力を行うと下記のようになるはずです。ホスト名はsvXXX.xserver.jpという形式です。svXXXが契約によって変わります。
セキュリティの警告画面が表示されますが続行ボタンをクリックしてください。
ユーザ名とパスフレーズで認証方式を設定する画面が表示されます。ユーザ名はサーバIDでパスフレーズはXserverのサーバパネルで鍵を生成する時に入力を行ったパスフレーズを入れてください。”OK”ボタンを押すとXserverとSSHでの接続が開始されます。
問題なく接続できればTeraTermの画面上には以下の画面が表示されます。これでWindows側でのSSHの設定は完了です。
Mac側でのSSH設定
MacでもXserverにSSH接続するためには鍵ファイルが必要となります。ターミナルを起動して、.sshディレクトリに鍵ファイルを保存してください。
鍵ファイルのパーミッションはchmod 600 鍵ファイル名で変更を行ってください。
あとはこの鍵ファイルを指定するsshコマンドを実行します。実行はユーザのホームディレクトリで実行しています。
ssh -i .ssh/XXX.key サーバID@ホスト名 -p 10022
XXX.keyはキーファイルを指定してください。サーバIDとホスト名はWindowsの時に利用したものと同じでユーザ名はサーバIDでホスト名はsvXXX.xserver.jpです。実行するとサーバパネルで鍵を生成する時に入力を行ったパスフレーズが聞かれるのでそれを入力してください。
※WindowsでもPower Shellなどを利用してコマンドラインでMACと同様に接続することができます。
Laravelのインストール
SSHでXserverの接続が完了したのでここからLaravelのインストールを開始していきます。ここからはコマンドラインを利用して実行していきます。
PHPのバージョン変更
LaravelのインストールするためのにはPHPのバージョンの制限があり、Laravel8では7.3以上が要件になっています。
XserverのPHPのバージョンの確認を行います。Xserverのデフォルトのバージョンは5.4.16なのでバージョンアップが必要となります。
$ php -v
PHP 5.4.16 (cli) (built: Nov 1 2019 16:04:20)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
with Zend OPcache v7.0.5, Copyright (c) 1999-2015, by Zend Technologies
XserverのPHPのバージョンはサーバパネルから確認、切替ができるので確認を行いましよう。
XserverのサーバパネルにログインしてPHPのPHP Ver.切替をクリックします。
Xserver上で管理するドメイン毎にPHPを選択することができるのでLaravelをインストールするドメインを選択してください。
PHPのバージョンがPHP7.3.16になっています。コマンドラインで表示されているPHPのバージョンとは異なることがわかりました。このバージョンがコマンドラインのPHPのバージョンではありません。
コマンドラインのバージョンを上げるためにはPHPの新しいバージョンを自分の手でインストールするのか??という疑問が出てきますが、Xserverのコマンドラインでも他のバージョンを利用することが可能です。Xserverのドキュメントの中にコマンドライン一覧があるので確認しておきましょう。
コマンドパス一覧によるとPHP7.4は/usr/binの中にあるようです。Xserverにした状態でlsコマンドを利用して確認してみましょう。マニュアル通り/usr/binの中にあるようです。今回利用したいphp7.4については/opt/php-7.4.4/bin/phpからシンボリックリンクが貼られています。
$ ls -la /usr/bin/php*
-rwxr-xr-x 1 root root 4618056 11月 2 2019 php
-rwxr-xr-x 1 root root 4596856 11月 2 2019 php-cgi
//略
lrwxrwxrwx 1 root root 23 5月 26 11:22 php7.3 -> /opt/php-7.3.16/bin/php
lrwxrwxrwx 1 root root 27 5月 26 11:22 php7.3-cgi -> /opt/php-7.3.16/bin/php-cgi
lrwxrwxrwx 1 root root 22 5月 26 11:22 php7.4 -> /opt/php-7.4.4/bin/php
lrwxrwxrwx 1 root root 26 5月 26 11:22 php7.4-cgi -> /opt/php-7.4.4/bin/php-cgi
/usr/bin/php7.4もしくは/opt/php-7.4.4/bin/phpを利用できるように設定を行う必要があります。
下記のように直接絶対パスを指定することで追加の設定を行うことなく実行することは可能です。
$ /usr/bin/php7.4 -v
PHP 7.4.4 (cli) (built: Apr 9 2020 20:23:01) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
/usr/bin/php7.4を上記のように絶対パスで実行するのではなくphp -Vと実行した際にPHP 7.4.4を利用できるように設定を行う必要があります。
ここで必要になるのがパスに関する知識です。
環境変数の$PATHにPHP7.4を実行できるパスを追加することでPHP7.4を利用できる環境を作ります。
環境変数$PATHが設定されている.bash_profileを確認します。.bash_profileの下に環境変数PATHの設定を確認することができます。
//略
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
上記の設定を参考に$HOME(ユーザのホームディレクトリを表す)の下にbinディレクトリを作成します。作成後にリンボクリックリンクを貼ります。
$ mkdir bin
$ ln -s /usr/bin/php7.4 $HOME/bin/php
$ ls -la $HOME/bin/
合計 0
drwxr-xr-x 2 user_name members 25 10月 9 13:54 .
drwx-----x 8 user_name members 177 10月 9 13:53 ..
lrwxrwxrwx 1 user_name members 15 10月 9 13:54 php -> /usr/bin/php7.4
シンボリックリンクの設定が完了したら、作業は終わりではありません。.bash_profileでのパスの順番は$PATHに設定されている/user/bin/phpが先に実行されるためphpコマンドを実行してもホームディレクトリの下に作成したphpが実行されることはありません。.bash_profileを下記のように更新します。$PATHと$HOME/binを逆にしています。これで$HOME/binにあるphpが実行されます。
//略
# User specific environment and startup programs
PATH=$HOME/bin:$PATH
export PATH
更新した.bash_profileを再読み込みするとphp -vのバージョンが7.4.4に更新されていることがわかります。
$ source .bash_profile
$ php -v
PHP 7.4.4 (cli) (built: Apr 9 2020 20:23:01) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
ここまでの手順が理解できればパスとは何か、パスの設定方法、シンボリックリンクの設定方法が理解できたかと思います。
これでPHPの設定は完了です。
パスを設定する方法は一つではないので.bash_profileに下記のように記述しても問題ありません。PHPのバージョンが8.1.2の場合です。
PATH=/opt/php-8.1.2/bin:$HOME/bin:$PATH
export PATH
Xserverでは定期的にPHPのバージョンがアップした場合に連絡が来るのでPHPのバージョンアップに対応したPHPを利用したい場合はパスの設定変更が必要となります。.bash_profileの更新を行ったらsource .bash_profileで再読み込みを行いパスの設定が正しく行われているか確認を行なってください。
Composerのインストール
Laravelをインストールするためには、PHPのパッケージ管理ツールであるComposerが必要となるのでインストールを行います。
Composerのインストールや設定についてはLaravelの公式ドキュメントを参考に行っています。
composerの公式ホームページにアクセスします。画面のDownloadボタンをクリックしてください。
移動したダウンロードページにはインストールスクリプトが記述されているのでコピー&ペーストしてユーザのホームディレクトリで実行してください。
実行すると実行ディレクトリにはcompoer.pharが作成されます。
composer.pharをcomposerという名前にして.config/composer/vendor/bin/の下に保存します。
$ mkdir -p .config/composer/vendor/bin/
$ mv composer.phar .config/composer/vendor/bin/composer
.config/composer/vendor/bin/にはパスが通っていないためパスを設定する必要があります。設定方法は先ほどのphpの場合と同じなのでPHPのパスの設定方法が理解できていれば自分で設定ができるはずです。もしここでどうするかわからない場合はパスの設定の理解を再度確認してみてください。
方法は.bash_profileに新たなパスの追加を行います。
//略
# User specific environment and startup programs
PATH=$HOME/.config/composer/vendor/bin:$HOME/bin:$PATH
保存後に.bash_profileの再読み込みを行い、composerコマンドが実行できることを確認しダウンロードした最新バージョンのcomposerであることを確認します。
$ source .bash_prfoile
$ composer -V
Composer version 2.5.5 2023-03-21 11:50:05
これでcomposerのインストールと設定は完了です。
Laravelコマンドパッケージのインストール
これは必須ではありませんが、Laravelのプロジェクトを作成(インストール)を行うのにLaravelコマンドパッケージを入れるとプロジェクトの作成が楽になります(コマンドが短い)。
“laravel new プロジェクト名”でLaravelのプロジェクトを作成することができます。
composerコマンドでlaravelコマンドのインストールを行います。
$ composer global require laravel/installer
Changed current directory to /home/user_name/.config/composer
//略
先ほどcomposerを保存した場所にlaravelコマンドは保存されます。whichコマンドを実行するとlaravelコマンドの保存場所が確認できます。
$ which laravel
~/.config/composer/vendor/bin/laravel
composerのインストールの際にパスの設定を行っているためlaravelコマンドはインストール直後に実行することができます。
これでLaravelプロジェクトを作成(インストール)するための環境は整いました。
Laravelプロジェクトの作成
laravelコマンドの実行形式は下記となります。プロジェクト名に指定した文字列のディレクトリが実行ディレクトリ内に作成され、Laravelに必要なパッケージがすべてのその下に保存されます。
$ laravel new プロジェクト名
今回laravelコマンドを実行するのはホームディレクトリではなくホームディレクトリの下にあるドメイン名のディレクトリの下です。Xserverでドメインを管理している場合はホームディレクトリの下にそのドメイン名のディレクトリが存在するはずです。例えばサーバIDがuser_nameであれば/home/user_name/ドメイン名(XXX.co.jpなど)になります。現在のカレントディレクトリはpwdコマンドを利用して確認することができます。
今回はgroupwareというプロジェクト名にしています。ブログを構築したい場合はblogなど自分がわかりやすい任意の名前を設定してください。ここまでの設定が完了していたらlaravelコマンドを実行するとプロジェクトの作成は問題なく完了するはずです。作成されるプロジェクトの場所は/home/user_name/ドメイン名/groupwareになります。
$ laravel new groupware
//略
Package manifest generated successfully.
73 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
> @php artisan key:generate --ansi
Application key set successfully.
Application ready! Build something amazing.
インストールが完了しましたが、https://自分のドメイン名でアクセスを行ってもXserverのデフォルトのhtmlファイルの内容が表示されるかpublic_htmlの下に置いたindex.html(もし自分で更新していれば)の内容が表示されるはずです。
公開のための設定
Xserverの公開ディレクトリはpublic_htmlなのでLaravelの公開ディレクトリであるpublicのシンボリックリンクをその下に作成します。
下記がシンボリックリンクのコマンドですが、user_nameは各環境に合わせて設定を行ってください。またXXXX.co.jpがドメイン名なのでこれも各自の環境に合わせて変更を行ってください。もし自分の環境のパスを知りたい場合はホームディレクトリ直下のドメイン名のディレクトリからpwdコマンドを実行してください。
$ ln -s /home/user_name/XXXX.co.jp/groupware/public /home/user_name/XXXX.co.jp/public_html/public
シンボリックリンクを設定して終わりではなくhttps://XXXXにアクセスした際にLaravelプロジェクトであるpublicの下にアクセスができるようにpublic_htmlディレクトリの下にある.htaccessに以下を記述します。.htaccessファイルはデフォルトで存在しているの作成ではなく追加を行います。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [QSA,L]
</IfModule>
ブラウザでアクセスしてみましょう。Laravel8であれば下記の画面が表示されていればXserverでのLaravelのインストールは成功しています。
Laravelは日々更新が続けられているので数日経過するとバージョンが更新されます。インストール直後のバージョンを確認しておきましょう。プロジェクトディレクトリに移動してphp artisan -Vコマンドを実行します。
$ php artisan -V
Laravel Framework 8.9.0
MySQLの設定
Laravelのインストールが完了したら次はデータを保存するMySQLとの接続を行います。
Laravelではマイグレーションファイルと呼ばれるデータベーステーブルの構成を記述したファイルがデフォルトで作成されるのでphp artisan migrateコマンドを実行するとデータベースにテーブルが作成されます。
Laravelのプロジェクトディレクトリに移動してphp artisan migrateコマンドを実行してください。ここまでの設定ではデータベースの作成、Laravelからの接続を設定を行っていないので下記のエラーが発生します。
$ php artisan migrate
Illuminate\Database\QueryException
SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: NO) (SQL: select * from information_schema.tables where table_schema = groupware and table_name = migrations and table_type = 'BASE TABLE')
データベースの作成を行います。
データベースの作成
Xserverではデータベースの作成はサーバパネルから行うことができます。データベースのMySQL設定をクリックしてください。
サーバパネルの
MySQL一覧の情報が表示されますが、データベースが未作成の場合は現在MySQLデータベースはありませんと表示されます。下記にあるMySQL5.7 IPアドレスはLaravelからの接続に利用します。
MySQL追加タブからMySQLのデータベースの追加を行うことができます。任意の名前をつけてください。ここではgroupwareにしています。先頭にはサーバ名_が自動で付与されます。この名前はLaravelからMySQLへの接続情報として必要となります。確認画面へ進むボタンを押して確認を行い追加してください。
追加が完了すると以下の画面が表示されます。次はMySQLユーザの作成を行うのでMySQLユーザ一覧のタブをクリックしてください。
MySQLユーザの追加を行います。データベース名と同様に先頭にサーバIDが付与されます。8文字以上の名前は付与できないのでlaravelという名前をつけて作成します。MySQLユーザIDだけでなくパスワードもLaravelからMySQLの接続情報で必要となります。入力が完了したら確認画面へ進むボタンをクリックしてください。
追加が完了したら下記の画面が表示されます。
作成したユーザに作成したデータベースへのアクセス権を付与する必要があります。MySQL一覧をクリックしてください。
作成したデータベースにはアクセス権所有ユーザがいないのでプルダウンメニューから先ほど作成したMySQLユーザを選択してください。
アクセス権の設定が完了すると下記のようにアクセス権所有ユーザMySQLにユーザ名が表示されます。
以上でデータベースの作成は完了です。データベース中に設定したMySQLデータベース名、MySQLユーザ名、パスワードを利用してLaravelからMysqlに接続を行います。
接続設定
データベースの接続設定についてはプロジェクトディレクトリの直下にある環境変数のファイル.envファイルに記述します。
.envファイルを開いてDBの環境変数に関する箇所を更新してください。DB_HOSTにはXserverのサーバパネルのMySQLの設定でMySQL5.7 IPアドレスに表示されていたIPアドレスを設定してください。DB_DATABASEには作成したMySQLデータベース名、DB_USERNAMEにはMySQLユーザ名、DB_PASSWORDにはMySQLユーザを作成した時のユーザ名を指定してください。先頭にはサーバID_が必要です。
DB_CONNECTION=mysql
DB_HOST=1XX.1XX.XX.XXX
DB_PORT=3306
DB_DATABASE=XXXXX_groupware
DB_USERNAME=XXXXX_laravel
DB_PASSWORD=password
これでデータベースへの接続情報の設定は完了です。
先ほど失敗したphp artisan migrateコマンドを実行してください。今度はテーブルの作成が成功するはずです。
$ php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (8.94ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (7.86ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (7.97ms)
データベースの作成ができることが確認できました。
Xserverではphpmyadminをサーバパネルから利用することができます。データベースの中身をみるためのGUIのツールなので動作確認をしておいてください。
接続にはMySQLのユーザIDとパスワードを利用します。
テーブルの作成は動作確認のため実施したのでphp artisan migrate:rollbackコマンドでテーブルを削除しておきます。
ここまでの作業でLaravelとデータベースの接続が完了したのでLaravel上で生成するデータをデータベースに保存することができます。ユーザのログイン認証が必要でない場合はここから各自オリジナルのアプリケーションの作成をはじめてください。
JetStreamのインストール
Laravel8では認証機能を利用するためにJetstream, Breeze, laravel/uiを利用することができます。JetStreamを利用しない場合は次の章のLaravel/Breezeのインストールに進んでください。
Laravel8から認証にJetstreamが追加され、インストール時にlivewireかinertiaを選択することができます。
※認証にはLaravel7までのlaravel/uiをインストールすることも可能です。
JetSreamについて詳細な動作確認は現時点では行っていないため説明は省略させてもらいますが、認証に関する機能を持っています。
JetStreamパッケージのインストールはcomposerコマンドで行います。
$ composer require laravel/jetstream
パッケージのインストールが完了したら、Jetstremが使えるようにphp artisanコマンドを実行します。Jetstreamではlivewireかinertiaを選択する必要があります。
今回はLivewireを利用しユーザをチームで管理することができるteam機能も追加します。実行後、npmコマンドでJavaScript関連のファイルとビルドのためにnpmコマンドを実行します。
$ php artisan jetstream:install livewire --teams
//略
Livewire scaffolding installed successfully.
Please execute the "npm install && npm run dev" command to build your assets.
インストールメッセージ通りにnpm install && npm run devの実行します。しかし、npmコマンドが見つからないとメッセージが表示されます。
$ npm install && npm run dev
-bash: npm: コマンドが見つかりません
Laravel Breeze
Inertia, Livewireなどの利用を考えていない場合シンプルな認証機能にLaravel Breezeがあります。laravel/breezeパッケージをインストールすることで利用することができます。パッケージをインストール後にphp artisanコマンドでインストールを行います。
$ composer require laravel/breeze
$ php artisan breeze:install
[commen]Laravelのバージョンがアップして現在はBreezeではフロントエンドにInertis.js + VueまたはInertsia.js + Reactを選択して一緒にインストールすることができます。VueやReactを利用したい場合はbreeze:installの後ろにvueまたはreactを追加して実行してください。[/comment]
インストール完了後、npmコマンドを実行してJavaScriptのライブラリのインストールとビルドを行います。
$ npm install && npm run dev
Laravel Breezeのインストールが完了するとLaravelのトップ画面の右上にLoginとRegisterのリンクが表示されます。
nodeのインストール
nodejsのインストールを行っていない場合は”コマンドが見つかりません”とエラーが表示されます。nodeはサーバ再度でJavaScriptを実行することができるためJavaScriptファイルを扱うために必要となります。
古いバージョンを利用している場合には下記のようなエラーが発生する場合があるのでその時はnodebrewで新しいバージョンのnodeをインストールして新しいバージョンへの変更を行ってください。
Error: You are using an unsupported version of Node. Please update to at least Node v12.14
nodebrewのインストール
nodeをインストールする必要がありますが、nodeにはさまざまなバージョンがあり更新も頻繁に行われます。nodeのバージョンの切替が簡単に行うことができるnodebrewをインストールします。
wgetコマンドでnodebrewのファイルをダウンロードします。
実行したディレクトリのnodebrewファイルが保存されます。perlを利用してsetupを行います。
$ perl nodebrew setup
Fetching nodebrew...
Installed nodebrew in $HOME/.nodebrew
========================================
Export a path to nodebrew:
export PATH=$HOME/.nodebrew/current/bin:$PATH
========================================
実行後、ホームディレクトリ下に.nodebrewが作成されるのでメッセージにしたがって環境変数のPATHの追加を行います。
3回目の.bash_profileの登場です。bash_profileのPATHに追加を行ってください。
PATH=$HOME/.nodebrew/current/bin:$HOME/.config/composer/vendor/bin:$HOME/bin:$PATH
設定後.bash_profileを再読み込みしてnodebrew lsコマンドを実行します。not installedとcurrent:noneと表示されます。nodeがインストールされていない、現在利用しているnodeのバージョンはないという意味です。
$ nodebrew ls
not installed
current: none
この状態ではnodebrewが実行できてもnode, npmコマンドを実行することができません。
$ node
-bash: node: コマンドが見つかりません
$ npm
-bash: npm: コマンドが見つかりません
nodeのインストール
node.jsにはさまざまバージョンがあり、ホームページで現在の安定版と最新版を確認することができます。
安定版が12.19.0で最新版は14.13.1であることがわかります。安定版をインストールしてみましょう。nodebrew installの引数にバージョンを指定します。
$ nodebrew install v12.19.0
Fetching: https://nodejs.org/dist/v12.19.0/node-v12.19.0-linux-x64.tar.gz
######################################################################## 100.0%
Installed successfully
node lsコマンドを実行するとインストールしたバージョンが表示されます。バージョンは表示されていますが、currentはnoneのままです。
$ nodebrew ls
v12.19.0
current: none
どのバージョンを利用するかの指定はuseオプションを利用します。
$ nodebrew use v12.19.0
use v12.19.0
nodeのバージョンを18にすると下記のエラーが発生します。エラーが発生した場合はバージョンを下げてください。バージョン16, 17であればエラーは発生しません。nodebrewを利用しているのでバージョンの切り替えも簡単に行うことができます。
$ node -v
node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by node)
node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node)
npmコマンドが使えるようになったか確認しておきましょう。先ほどまで出力していたエラーが消えてバージョンが表示されます。
$ npm -version
6.14.8
nodeのインストールが完了したのでLaravelのプロジェクトディレクトリでnpmコマンドを実行します。JavaScriptライブラリのインストールとビルドが行われます。
$ npm install && npm run dev
ompiled successfully in 18620ms 18:24:15
Asset Size Chunks Chunk Names
/css/app.css 4.35 MiB /js/app [emitted] /js/app
/js/app.js 594 KiB /js/app [emitted] /js/app
ビルドが完了したのでブラウザからアクセスを行うと以下の画面が表示されます。
エラーが発生しますが、これはテーブルが作成されていないためです。php aritsan migrateコマンドを実行してテーブルを作成してください。
MySQL設定した後に実行したよりも作成されているテーブルが増えていることが確認できます。増えたテーブルについてはすべてJetstreamに関係するテーブルです。
$ php artisan migrate
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (26.46ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (23.67ms)
Migrating: 2014_10_12_200000_add_two_factor_columns_to_users_table
Migrated: 2014_10_12_200000_add_two_factor_columns_to_users_table (8.12ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (7.59ms)
Migrating: 2019_12_14_000001_create_personal_access_tokens_table
Migrated: 2019_12_14_000001_create_personal_access_tokens_table (11.92ms)
Migrating: 2020_05_21_100000_create_teams_table
Migrated: 2020_05_21_100000_create_teams_table (40.67ms)
Migrating: 2020_05_21_200000_create_team_user_table
Migrated: 2020_05_21_200000_create_team_user_table (8.85ms)
Migrating: 2020_10_09_085212_create_sessions_table
Migrated: 2020_10_09_085212_create_sessions_table (18.63ms)
Migrated: 2020_10_09_085212_create_sessions_table (277.94ms)
ここまでの作業が完了して再度ブラウザでアクセスするとLaravelの初期画面が表示されますが、右上には認証を行うためのLoginとRegisterのリンクが表示されます。
ここまでの設定でXserverでLaravel8を構築するための準備は完了しました。ようやくスタートラインについたのでオリジナルのアプリケーションの構築を開始してください。
mysqlコマンドによりDBへの接続
.envファイルの設定によりLaravelからデータベースへの接続を行うことができました。ここではsshでログイン後にmysqlコマンドでデータベースへの接続方法を確認していきます。
接続に必要な情報はMySQL5.7IPアドレス(or MySQL5.7ホスト名、MySQLデータベース名、MySQLユーザID, ユーザのパスワードです。
上記の値はすべてLaravelからデータベースに接続した際に設定した.envファイルに記述されています。
$ mysql -h XXX.XXX.XXX.XXX -u laravel_user_name -p
XXX.XXX.XXX.XXXはIPアドレスで.envファイルのDB_HOSTです。laravel_user_nameは.envファイルのDB_USERNAMEの値です。
実行後パスワードを聞かれるので.envファイルのDB_PASSWORDの値を入力してください。
ログインが完了するとconnectコマンドを利用してデータベースへの接続を行います。データベースの名前には.envファイルのDB_DATABASEの値を指定してください。
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 2881025
Server version: 5.7.29 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> connect laravel_db
接続後select * from migrationsコマンドを実行してテーブルのmigrationsの一覧が表示されれば正常に接続が行われています。
Xserverのエラーログ
Laravelはログ設定を行うことでログの出力する場所を変更することができます。
Xserverのエラーログにログを出力したい場合は、loggin.phpファイルstackでerrorlogを設定してください。
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['single','errorlog'],
'ignore_exceptions' => false,
],
Xserverは管理画面上のアクセス解析のメニューからエラーログを取得することが可能ですがファイルはダウンロードする必要があります。ダウンロードされるファイルの名前はドメイン名.error.logです。
Xserverのアクセスログ
Xserverのアプリケーションを公開すると数日以内に外部から脆弱性を狙ったアクセスが必ず行われます。アプリケーション公開後にアクセスログを確認してみてください。エラーログと同様にアクセスログも管理者画面のアクセス解析のメニューから確認することができます。下記は一例ですがWordPressを想定した不審なアクセスを確認することができます。wlwmanifest.xmlというファイルにアクセスを試みているようです。
ドメイン名 46.105.45.118 - - [15/Aug/2020:05:32:56 +0900] "GET / HTTP/1.1" 302 370 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4240.193 Safari/537.36"
ドメイン名 46.105.45.118 - - [15/Aug/2020:05:32:57 +0900] "GET /login HTTP/1.1" 200 6319 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4240.193 Safari/537.36"
ドメイン名 46.105.45.118 - - [15/Aug/2020:05:32:58 +0900] "GET /login/wp-includes/wlwmanifest.xml HTTP/1.1" 302 370 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4240.193 Safari/537.36"
ドメイン名 46.105.45.118 - - [15/Aug/2020:05:32:59 +0900] "GET /login/xmlrpc.php?rsd HTTP/1.1" 403 2843 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4240.193 Safari/537.36"
ドメイン名 46.105.45.118 - - [15/Aug/2020:05:32:59 +0900] "GET /login HTTP/1.1" 200 6319 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4240.193 Safari/537.36"
ドメイン名 46.105.45.118 - - [15/Aug/2020:05:33:01 +0900] "GET /login/blog/wp-includes/wlwmanifest.xml HTTP/1.1" 302 370 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4240.193 Safari/537.36"
//略
ドメイン名 46.105.45.118 - - [15/Aug/2020:05:33:17 +0900] "GET /login/sito/wp-includes/wlwmanifest.xml HTTP/1.1" 302 370 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4240.193 Safari/537.36"
Cronの設定(定期的なジョブの登録)
XserverでもCronの設定を行うことができます。Cronの設定はサーバパネルから行うことができます。CronはWindowsでいえばタスクスケジュールです。
Cron設定画面が表示されますが何も登録されていない場合は下記のように表示されます。Cronの設定を行うので設定追加ボタンをクリックしてください。
XserverでのCronの追加方法に一点注意があるので右上にある”関連マニュアル”からCron設定をクリックしてください。コマンドパスを適切に設定する必要があります。
コマンドパスについてはサーバーパネル「サーバー情報」の「コマンドパス一覧」から確認できるので確認しておきます。今回は/user/bin/php7.4を利用します。
Laravelのドキュメントにあるように下記のように設定を行う必要があります。
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
Xserverでは下記のように設定しています。Laravelのプロジェクトは各自の設定により異なるので適切なパスを設定してください。SSHで接続している場合はcdコマンドでLaravelのプロジェクトフォルダに移動してpwdコマンドを実行してください。設定するパスが表示されます。。
* * * * * cd /home/ユーザ名/ドメイン名/Laravelプロジェクト名 && /usr/bin/php7.4 artisan schedule:run >> /dev/null 2>&1
上記の設定はOSのコマンドラインcrontab -lを実行した時に表示される内容です。XserverではサーバパネルからGUIで行うの実際の設定は下記のようになります。
SSHで接続している場合であればcrontab -lコマンドが利用できるので登録した内容も確認することができます。
[XXXXX@sv10XXX ~]$ crontab -l
#Laravel Schedule
* * * * * cd /home/ユーザ名/ドメイン名/Laravelプロジェクト名 && /usr/bin/php7.4 artisan schedule:run >> /dev/null 2>&1
これでCronの設定は完了です。cronが実際に動作確認するかを試したい場合は下記の文書を参考にしてみてください。
SUPERVISORのインストール
LaravelではQueueに入れたJobを実行するためにはWorkerを起動してQueueの中のJobを処理させる必要があります。
Workerはphp artisan queue:workコマンドでWorkerを起動することができますが何かの要因でWorkerプロセスが停止してしまう可能性があるのでWorkerプロセスを監視する必要があります。その監視に利用するのがsupervisorです。
Xserverでは下記の手順でsupervisorをインストールすることができます。supervisorのインストールはPHPでもリオ利用したユーザのホームディレクトリ(/home/ユーザ名/)の下のbinに行います。
まず環境変数のPYTHONPATHを設定します。設定しないとインストールに失敗します。
% export PYTHONPATH=$PYTHONPATH:/home/ユーザ名/bin
※ユーザ名は各環境で異なります。
PYTHONPATHが設定できたら、binフォルダに移動してeasy_installコマンドを実行してください。
% easy_install --install-dir=/home/ユーザ名/bin supervisor
Searching for supervisor
Reading https://pypi.python.org/simple/supervisor/
Best match: supervisor 4.2.2
Downloading https://files.pythonhosted.org/packages/d3/7f/c780b7471ba0ff4548967a9f7a8b0bfce222c3a496c3dfad0164172222b0/supervisor-4.2.2.tar.gz#sha256=5b2b8882ec8a3c3733cce6965cc098b6d80b417f21229ab90b18fe551d619f90
Processing supervisor-4.2.2.tar.gz
Writing /tmp/easy_install-SQrM8a/supervisor-4.2.2/setup.cfg
Running supervisor-4.2.2/setup.py -q bdist_egg --dist-dir /tmp/easy_install-SQrM8a/supervisor-4.2.2/egg-dist-tmp-0O9TEo
warning: no previously-included files matching '*' found under directory 'docs/.build'
Adding supervisor 4.2.2 to easy-install.pth file
Installing echo_supervisord_conf script to /home/user_name/bin
Installing pidproxy script to /home/user_name/bin
Installing supervisorctl script to /home/user_name/bin
Installing supervisord script to /home/user_name/bin
Installed /home/user_name/bin/supervisor-4.2.2-py2.7.egg
Processing dependencies for supervisor
Finished processing dependencies for supervisor
インストールが完了したらbinフォルダの下には以下のファイルが作成されます。
% ls
easy-install.pth echo_supervisord_conf pidproxy site.py site.pyc supervisorctl supervisord php
supervisorのconfigファイルを作成します。supervisord.confファイルが作成されます。
% echo_supervisord_conf > supervisord.conf
supservisord.confファイルを開いて下記のコードを追加します。supservisord.confの中でphp artisan queue:workを実行することになるのでcommandの値は各自の環境に合わせたパスを設定してください。artisanファイルが存在するLaravelのインストールフォルダになります。ログファイルの場所も適切なパスを設定してください。Workderの処理のログが保存されます。
//略
process_name=%(program_name)s_%(process_num)02d
command=php /home/laravel_install_directory/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=red0410
numprocs=2
redirect_stderr=true
stdout_logfile=/home/laravel_install_directory/worker.log
Workerの起動は下記のコマンドで行います。
% ./supervisord -c ./supervisord.conf
Unlinking stale socket /tmp/supervisor.sock
supervisord.confの設定に問題がなければstatusコマンドで起動しているWorkerプロセスの状態を確認することができます。
% ./supervisorctl status
laravel-worker:laravel-worker_00 RUNNING pid 88045, uptime 0:00:15
laravel-worker:laravel-worker_01 RUNNING pid 88046, uptime 0:00:15
Workerプロセスを起動・停止は以下のコマンドで行います。
% ./supervisorctl stop laravel-worker:* //停止の場合
% ./supervisorctl start laravel-worker:* //停止の場合
supervisord -c ./supervisord.confを停止したい場合はps -auxコマンドをsupservisoerのプロセスIDを見つけてkill -SIGTERM PIDを実行してください。
$ ps -x | grep supervisor | grep -v grep
42475 ? Ss 0:00 /usr/bin/python ./supervisord -c ./supervisord.conf
/tmp/supservisord.pidの中にも起動しているPIDが保存されています。
$ more /tmp/supervisord.pid
42475
Workerプロセスのみpsコマンドで見たい場合はqueueでgrepすると見つけることができます。
$ ps -x | grep queue
31340 pts/1 S+ 0:00 grep --color=auto queue
47773 ? S 0:00 php /home/.../artisan queue:work --sleep=3 --tries=3
69045 ? S 0:00 php /home/.../artisan queue:work --sleep=3 --tries=3
supervisorにWorkerプロセスは監視されているのでkill -9コマンドなどでWorkerプロセスを強制停止すると自動で再起動が行われます。
エラー
ブラウザからデプロイしたLaravelにアクセスするとComposer detected issues in your platform: Your Composer dependencies require a PHP version “>= 7.3.0”.と表示される場合があります。表示されるバージョン番号の7.3.0は利用しているLaravelのバージョンによって異なります。この場合はXserverの管理画面からPHPのバージョン切り替え機能で表示されているPHPのバージョンよりも高いPHPに切り替える必要があります。
Gitの利用
XserverではデフォルトでもGitがインストールされていますがバージョンが古いため新たに最新のバージョンをインストールしたいという要望もあるかと思います。ここでは最新のGitのインストール方法について説明を行っています。
gitコマンドによりXserverでデフォルトでインストールされているバージョンは1.8.3.1であることがわかります。またwhichコマンドによりgitコマンドは/user/binフォルダの中に保存されています。
% git --version
git version 1.8.3.1
% which git
/usr/bin/git
上記に表示されているgitをアップグレードするのではなくユーザのホームディレクトリの下にあるbinディレクトリにgitの実行ファイルを保存します。binディレクトリとしていますが本文書ではPHPの設定時にユーザのホームディレクトリの下にbinを作成したのでそれを利用します。PATHの設定を行うことでコマンドが利用できるようになるため名前はoptでもなんでも構いません。任意の名前をつけてください。
これからgitのインストールを行いますが途中に何度もエラーが発生します。どのようなエラーが発生しどのような対応をしたかも説明しています。
Gitのソースコードのダウンロード
インストールするgitはソースコードを利用して行います。ダウンロードしたファイルを保存するためにホームディレクトリの下に任意の名前のフォルダを作成します。ここではtmpとします。
% mkdir tmp
% cd tmp
ダウンロードするファイルはGitHubのgitのページから取得します。現在の最新バージョンであるv.2.40.0を確認することができます。
tar.gzのリンク先がhttps://github.com/git/git/archive/refs/tags/v2.40.0.tar.gzであることがわかるのでXserver上でwgetコマンドを利用してダウンロードを行います。wgetを利用すると指定したURLからファイルをダウンロードすることができます。
% wget https://github.com/git/git/archive/refs/tags/v2.40.0.tar.gz
tmpフォルダにはv2.40.0.tar.gzというファイルが保存されます。tarコマンドを利用して解凍と展開を行います。
% tar -zxvf v2.40.0.tar.gz
実行するとgit-2.40.0ディレクトリが作成されます。git-2.40.0ディレクトリに移動します。
$ ls
git-2.40.0 v2.40.0.tar.gz
gitのソースコードのダウンロードとインストールを行うための前準備は完了しました。
Gitのインストール
configureという名前のスクリプトファイルを作成するためgit-2.40.0ディレクトリに移動してmake configureコマンドを実行します。
$ cd git-2.40.0
$ make configure
GIT_VERSION = 2.40.0
GEN configure
実行するとディレクトリ内にconfigureファイルが作成されます。スクリプトファイルのconfigureを実行しますが–prefixでgitをインストールする場所を指定します。ここでは環境変数で$HOMEを指定しています。環境変数ではなく/home/ユーザ名というように直接ユーザのホームディレクトリを指定することもできます。–prefixで指定した$HOMEのbinディレクトリの下にインストールしたgitファイルが保存されます。$HOME/binとした場合には$HOME/bin/binの下にファイルが保存されます。
$ ./configure --prefix=$HOME
configureを実行した後にmake allコマンドを実行すると下記のエラーが発生します。
$ make all
* new build flags
CC oss-fuzz/fuzz-commit-graph.o
In file included from ./commit-graph.h:4:0,
from oss-fuzz/fuzz-commit-graph.c:1:
./git-compat-util.h:14:2: エラー: #error "Required C99 support is in a test phase. Please see git-compat-util.h for more details."
#error "Required C99 support is in a test phase. Please see git-compat-util.h for more details."
エラーメッセージに記載されている通り詳細はgit-compat-util.hファイルと記載されているのでgit-compat-util.hの中身を確認します。
//
#if __STDC_VERSION__ - 0 < 199901L
/*
* Git is in a testing period for mandatory C99 support in the compiler. If
* your compiler is reasonably recent, you can try to enable C99 support (or,
* for MSVC, C11 support). If you encounter a problem and can't enable C99
* support with your compiler (such as with "-std=gnu99") and don't have access
* to one with this support, such as GCC or Clang, you can remove this #if
* directive, but please report the details of your system to
* git@vger.kernel.org.
*/
#error "Required C99 support is in a test phase. Please see git-compat-util.h for more details."
#endif
ファイルの途中にある-std=gnu99をCFLAGSに指定して再度configureを行います。
$./configure --prefix=$HOME CFLAGS="-std=gnu99"
make allを実行します。実行すると処理がかなり進んだ後に先ほどとは異なりmsgfmtのコマンドが見つかりませんというエラーメッセージが表示されます。
$make all
//略
/bin/sh: msgfmt: コマンドが見つかりません
make: *** [po/build/locale/pt_PT/LC_MESSAGES/git.mo] エラー 127
gettextのインストール
msgfmtコマンドをインストールするためにmsgfmtコマンドを含むgettextのインストールを行います。gettextも同様にGitHubページ(https://github.com/autotools-mirror/gettext/tags)の最新バージョンをインストールします。wgetコマンドはtmpディレクトリの中で実行します。gettextについては下記の手順通りに進めればエラーもなくインストールできます。gitと同様に$HOMEをprefixで指定しているのでインストールが完了すると$HOME/binの下にファイルが保存されます。
% wget https://ftp.gnu.org/pub/gnu/gettext/gettext-0.21.1.tar.gz
% ls
gettext-0.21.1.tar.gz git-2.40.0 v2.40.0.tar.gz
% tar -zxvf gettext-0.21.1.tar.gz
% cd gettext-0.21.1
% ./configure --prefix=$HOME
% make
% make install
$HOME/binディレクトリでlsコマンドを実行すると下記のファイルが保存されます。msgfmtファイルも確認できます。
% ls
autopoint gettextize msgcomm msgfilter msgmerge recode-sr-latin
envsubst msgattrib msgconv msgfmt msgunfmt xgettext
gettext msgcat msgen msggrep msguniq
gettext.sh msgcmp msgexec msginit ngettext
本文書でPATHを設定している人であれば.bash_profileで$HOME/binのPATHは設定済みなので何も実行する必要はありません。
//略
PATH=$HOME/.nodebrew/current/bin:$HOME/.config/composer/vendor/bin:$HOME/bin:$PATH
export PATH
gitだけのインストールだけでればnodebrewやcomposerへのPATHは関係ないので以下のように設定することでPATHが設定できます。optに保存している場合は$HOME/opt/binとなります。
//略
PATH=$HOME/bin:$PATH
export PATH
gettextインストール後のmake all
gettextのインストールが完了したので再度git-2.40.0に戻りmake allコマンドを実行します。さらに別のエラーが発生します。
% make all
//略
MSGFMT po/build/locale/pt_PT/LC_MESSAGES/git.mo
msgfmt: "po/build/locale/pt_PT/LC_MESSAGES/git.mo" に書き込もうとしてエラーが発 生しました: 許可がありません
make: *** [po/build/locale/pt_PT/LC_MESSAGES/git.mo] エラー 1
このエラーに対応するためにNO_GETTEXT=1をつけて実行します。
% make all NO_GETTEXT=1
make installコマンドを実行する際にもNO_GETTEXT=1をつけて実行します。
% make install NO_GETTEXT=1
実行後インストールが完了すると$HOME/binディレクトリにgitファイルが作成されます。パスもユーザディレクトリの下のbinの下にあることがわかります。
$ git --version
git version 2.40.0
$ which git
~/bin/git
最新版のgitがXserverで利用できるようになりました。
GitHubへのSSH接続
XserverからGitHubへSSH接続するための設定を行います。まずXserver側でキーの作成が必要となります。ユーザのホームディレクトリ直下の.sshディレクトリに移動してssh-keygenコマンドでキーを作成します。パスフレーズを聞かれますが空白にすることも可能です。公開鍵と秘密鍵の保存場所を聞かれますがそのまま.sshディレクトリに保存します。
$ ssh-keygen -t ecdsa -b 521
Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/user_name/.ssh/id_ecdsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user_name/.ssh/id_ecdsa.
Your public key has been saved in /home/user_name/.ssh/id_ecdsa.pub.
The key fingerprint is:
SHA256:+nYARJIc8TGLO7TXuIYtvlhGH92LNJTeFyh5OIKPFXE user_name@svXXXXX.xserver.jp
The key's randomart image is:
+---[ECDSA 521]---+
| .+=*.E |
| o=.* + . |
| +.= B o . |
| . *.B * . |
| * =.S o . |
| . * =.o o |
| = * ... |
| = o .. . |
| . o. ... |
実行が完了すると.sshディレクトリにはid_ecdsa, id_ecdsa.pubファイルが作成されます。公開鍵は拡張子にpub(public)がついたid_ecdsa.pubです。
GitHubにアクセスを行い、画面右上のプロファイルをクリックして表示されるメニューのSettingをクリックします。
SSH keysの”New SSH key”ボタンをクリックしてください。Titleを入力してKeyの中には.sshディレクトリのid_ecdsa.pubファイルの中身をコピーしてください。コピーしたらAdd SSH keyボタンをクリックしてください。
GitHub側での設定は完了です。
GitHubにあるリポジトリをgitを利用してcloneすることが可能になります。gitとGitHubを利用してアプリケーションの開発を行うことができます。