XREA で Laravel 8.x を導入する方法

カテゴリー
Laravel

レンタルWEBサーバの XREA (エクスリア)や CoreServer に Laravel 8.x をインストールする方法を解説していきます。

ご注意

:warning: 2020年現在、XREA では Laravel を公式にサポートしていないようです。
※サーバのコントロールパネルからワンクリックで導入したりはできない模様。

:warning: レンタルWEBサーバ上での運用は自己責任で。WEBサイトの動作に関する不具合が発生した場合も自己解決でお願いします。

:warning: この記事自体も不備がある可能性があります。もし何かありましたらご指摘いただけましたら幸いです。

導入の流れ

  1. WEBサーバのコンパネからSSH接続IP許可
  2. SSHでサーバにログイン
  3. インストールに必要なディレクトリ作成
  4. Composerをインストール
  5. Laravel8.xをインストール
  6. npmをインストール
  7. publicへのシンボリックリンク作成

導入方法

※ 新コンパネで解説していきます。

1. WEBサーバのコンパネからSSH接続IP許可

  • 左側のメニューから、
    サイト設定->ツール/セキュリティーを選択してください。
xrea001.png
サイト設定

xrea002.png
サブメニューの一番下のツール/セキュリティ
  • 「注意点」を読んで、SSH接続IP許可の項目でボタンをクリックし、IPが一致しているなら許可します。

2. SSHでサーバにログイン

SSH で XREA のサーバーに接続します。
Windows の場合は Teraterm などのツールを使用するか、WSLでコマンドラインで。Macでも同様のアプリを導入して接続しましょう。

接続情報はFTPの項目に表示されるユーザーIDとパスワードを使用します。

  • サイト設定 -> FTP設定を開いて、接続に必要な情報を確認します。
  • SSHクライアントに入力してサーバにログインします。
    ※ SSH接続IP許可の反映には5分かかるため、接続できない場合は焦らず待ちましょう。

3. インストールに必要なディレクトリを作成

目標とするディレクトリ構成は次の通りです。
~/laravel/hoge.s999.xrea.comは後述のLaravelインストール時に作成するため、作らないでください。
hoge.s999.xrea.comは目的に合わせて書き換えてください。

~/
├─ /laravel
│   └─ /hoge.s999.xrea.com <- Laravel本体ディレクトリ
│
└─ /public_html
    └─ /hoge.s999.xrea.com <- 公開部分ディレクトリ

※ 公開部分ディレクトリが本来のLaravelルート下の/publicに相当します。
※ この構成になっているのは、ドメインWEBで複数のLaravelを一つのサーバで運用するためです。
※単一サイトで運用する場合、~/public_html/hoge.s999.xrea.com~/public_html に読み替えてください。

  • 下記のようにSSHでコマンドを入力しディレクトリ作成を行います。
mkdir laravel
mkdir public_html/hoge.s999.xrea.com

4. Composerをインストール

※ 最新のインストール方法は Composer/Download で公開されています。

  • まず、自分のホームディレクトリに移動します。
cd ~/
  • 次にインストーラをとってきます。PHPのバージョンに注意してください。
php73cli -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
  • ハッシュを照合して改ざんされていないかチェックします。
php73cli -r "if (hash_file('sha384', 'composer-setup.php') === 'c31c1e292ad7be5f49291169c0ac8f683499edddcfd4e42232982d0fd193004208a58ff6f353fde0012d35fdd72bc394') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

※ composerのバージョンが公式サイトで更新されている場合、一致しないことがあります。出来るだけ公式の最新のダウンロード方法(英語)を使用してください。

  • composerのインストールを実行します。
php73cli composer-setup.php

※ Laravel 8.xではなく、Laravel 6.x 以前のバージョンなどで、同様の操作が上手くいかない場合は Composerのリリースタグ を参照し、–version=1.10.7 などのオプションを追加してversion1でインストールしてみてください。

※ 既にインストールしている場合は composer.phar のあるディレクトリで php73cli composer.phar self-update --1 してみてください。デグレードされます。

  • 最後にセットアップファイルを削除。これでComposer本体は準備完了です。
php73cli -r "unlink('composer-setup.php');"

Laravelをインストール

:warning: XREAのサーバでは、Apacheで register_argc_argv オプションがオフになっています。
このため、-d register_argc_argv=1のオプションをつけて有効化する必要があります。
:warning: ジョブの実行時間が3分間までのため、途中でKilledと表示された場合は再実行しましょう。出来るだけ深夜早朝のサーバーが軽い時間を狙うとおススメです。
:warning: php_unitが依存関係の問題で容易にインストールできないため、必要に応じてdev版の依存関係からもオミットしましょう。

  • インストール実施
php73cli -d register_argc_argv=1 ~/composer.phar create-project laravel/laravel hoge.s999.xrea.com --prefer-dist --no-dev

:warning: --no-devを付けていない場合、phpunitの依存関係が解決できないためエラーになります。

  • composerの依存関係を修正

XREAサーバー上には phpunit に必要な ext-xmlwriter が入っていないためテストが使用できません。
しかし、クローズドにして複数人で開発するときのお手軽環境として使いたい場合などもあります。そんなときにdevに記述した依存関係を使用したい場合は、Laravelのディレクトリで下記のコマンドを実行してcomposer.jsonからphpunitの指定を除去してください。

php73cli ~/composer.phar remove --dev phpunit/phpunit

これでLaravel本体の設置は完了です。

npm インストール

  • 下記コマンドを実行します。こちらも時間制限でkillされる場合、機能ごとにインストールするか何回か再実行してください。
npm install

※ 必要に応じて npm update

シンボリックリンク作成

laravelのpublicディレクトリのシンボリックリンクを作ります。

  • ~/はユーザーのホームディレクトリを指します。/virtual/ユーザー名/を指しています。
  • サーバーの仕様が変わったり、パスによって上手くいかない場合は/virtual/ユーザー名/に読み替えて作業してみてください。
ln -s ~/laravel/hoge.s999.xrea.com/public  ~/public_html/hoge.s999.xrea.com
  • public_html 直下で運用する場合、下記コマンドのようにLaravel の public 下で使用するファイルと、ディレクトリにシンボリックリンクを張ります。
  • web.config はIIS用なのでリンクを張っていません。
  • public_html 自体を消してシンボリックリンクを張るのは、コンソールからのドメイン設定や、パーミッションで支障をきたしがちため、このやり方にしています。
ln -s ~/laravel/public/index.php ~/public_html/index.php
ln -s ~/laravel/public/.htaccess ~/public_html/.htaccess
ln -s ~/laravel/public/js ~/public_html/js
ln -s ~/laravel/public/css ~/public_html/css
ln -s ~/laravel/public/img ~/public_html/img
ln -s ~/laravel/public/mix-manifest.json ~/public_html/mix-manifest.json
ln -s ~/laravel/public/robots.txt ~/public_html/robots.txt
ln -s ~/laravel/public/favicon.ico  ~/public_html/favicon.ico

以上で、Laravelの諸々の設定(.envとかkeyの生成とか、npm run devとか)を行えば実行できるようになるはずです。

トラブルシューティング

404になってしまう

404が Laravel のお洒落な画面か、Webサーバ標準の画面かで話が変わってきます。前者の場合はrouterの設定ミスとかキャッシュとかその辺です。
しかし、後者の場合は.htaccessがあるべき場所に無いか、AllowOverrideディレクティブが効いていないか、.htaccessの設定にミスがあります。
今回の場合、特に .htaccess のシンボリックリンクの設置がおかしくないか疑ってみてください。

500になっていてLaravel自体が動作していないが、エラーが分からない

XREAの仕様です。エラーはログなどには吐き出されません。
あまり良くないけどお手軽な方法として次の方法が。

.htaccessで下記のように記述し、自分のIPだけ見れるように制限した上で、

<RequireAll>Require all denied
Require ip ココに自分のIP
</RequireAll>

Laravelの public/index.php に下記のようにエラー出力指定を記述するなどしてエラーの内容を確認することが出来ます。
※ Freeのサーバーの場合、一般公開して広告を表示することが利用条件ですので、常にIP制限した状態で運用するのはBANされる原因になるのでしないでください。

確認したらセキュリティ的に良くないのでphpの追加分を消しておきましょう。
※もっといい方法があるので確認中デス..

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
/**
 * Laravel - A PHP Framework For Web Artisans
 *
 * @package  Laravel
 * @author   Taylor Otwell <taylor@laravel.com> */

artisanコマンドが実行できない

こちらもcomposer同様に、Laravelのディレクトリで下記のようにphp73cliからのコマンドで実行すれば可能です。

php73cli artisan --help

参考記事やドキュメント