Laravel を Xserverで動作させる
基本的には以下を参考に進める
【完全版】エックスサーバにLaravel8インストール、公開方法まで一挙公開! | アールエフェクト
ちなみに上記の記事はあくまでLaravelプロジェクトの公開を目的としているのでGitを使用していないので注意。
もしローカルで開発したプロジェクトをGitを使用してXserverで公開したいならXserver内のGitのバージョンを最新にして... などの設定が必要。
詳しくはみていないが以下を参考にすればできそう。
【Git】Laravel×Vue.jsアプリをXserverにデプロイする方法!500エラー解決
動作環境
バージョン | |
---|---|
MacOS | BigSur(11.7.1) |
PHP | 8.0.25 |
Laravel | 8.83.26 |
MariaDB(Xserver) | 10.5 |
Xserverのサービスの登録は以下の記事がわかりやすい
【エックスサーバー】新規申し込みのやり方 | チグサウェブ
Xserverの操作は基本的にサーバーパネルで行うことになる。
サーバーパネル - ログイン | レンタルサーバーならエックスサーバー
【完全版】エックスサーバにLaravel8インストール、公開方法まで一挙公開! | アールエフェクトのサーバーパネルのデザインが違うためデザインを切り替えると進めやすい。
SSH設定(Mac)
1.1 Xserver側でのSSH設定
はそのまま進める。ホスト名は要確認(サーバー番号.xserver.jp
という形式。1.2 Windows側でのSSH設定
に埋もれていたので見つけるのに時間がかかった)。
ちなみに私は1.3 Mac側でのSSH設定
の設定がうまくできなかった。代わりにエックスサーバーにssh接続する方法(ターミナル利用) - Qiitaを参考にして設定が完了できた。
Qiitaのログインの簡略化
の設定がうまくいくと以降のSSH接続がとてもラクなのでおすすめ。
もし自分が作成したプロジェクトを使用するならXserver上で以下の設定を行う必要がある。
- Gitのバージョンの最新アップデート
- GitHubとXserverのSSH接続
ちなみに
SSHでログインした後に以下のようなメッセージが表示される場合は、SSHでサーバに繋いで"perl: warning: Setting locale failed."が出てきたときの対処法 - NotFoundsのにっきを参考にしてローカル端末の/etc/ssh/ssh_config
の設定を変更すると表示されなくなる。
/etc/profile.d/lang.sh: 行 19: 警告: setlocale: LC_CTYPE: ロケールを変更できません (UTF-8): そのようなファイルやディレクトリはありません
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_CTYPE = "UTF-8",
LANG = "ja_JP.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
2 Laravelのインストール
2.1 PHPのバージョン変更
まずXserverのサーバーパネルからバージョンを変更する。
【完全版】エックスサーバにLaravel8インストール、公開方法まで一挙公開! | アールエフェクト
PHPのバージョン確認方法が書いてありましたがそのリンクを貼っておきます。
プログラム言語・コマンドパス | レンタルサーバーならエックスサーバー
プログラム言語・コマンドパス | 法人向けレンタルサーバー【Xserverビジネス】サポートサイト
ちなみに/usr/bin/php7.4
の方ではパスが通らなかったので/opt/php-7.4.4/bin/php
の方でパスを設定しました。
2.2 Composerのインストール
ここは 2.2 Composerのインストール - 【完全版】エックスサーバにLaravel8インストール、公開方法まで一挙公開! | アールエフェクト を参考にして進めれば問題ありませんでした。
Composerのダウンロードリンクは以下になります。
Composer
ちなみに 2.3 Laravelコマンドパッケージのインストール【完全版】エックスサーバにLaravel8インストール、公開方法まで一挙公開! | アールエフェクトではlaravelコマンドのインストールはできたものの、which laravel
を実行すると/usr/bin/which: no laravel in
とエラーが表示されました。ちょっと調べてみましたが原因を調べるのに時間がかかりそうだったので、Laravelコマンドをできるようにすることは諦めました。
2.4 Laravelプロジェクトの作成
ここは 2.4 Laravelプロジェクトの作成 - 【完全版】エックスサーバにLaravel8インストール、公開方法まで一挙公開! | アールエフェクトとかなり違います。
composer create-project "laravel/laravel=8.*" プロジェクト名
でプロジェクトを作成したいのですが問題点がある。
composer create-project "laravel/laravel=8.*" プロジェクト名
を実行すると
PHP Fatal error: Allowed memory size of xxx bytes exhausted
というエラーが発生します。
このエラーはphp.iniに設定されているメモリ上限をオーバーした際に出るエラー
らしいです。Xserverはユーザーが変更できる権限範囲が狭いらしい。
そのためCOMPOSER_MEMORY_LIMIT=-1
をつけて
COMPOSER_MEMORY_LIMIT=-1 composer create-project "laravel/laravel=8.*" プロジェクト名
を実行するとプロジェクトを作成できる。
【XServer】composerでライブラリインストール時にメモリエラーの解決法
2.5 公開のための設定
ここは問題なく進めることができた。
2.5 公開のための設定 - 【完全版】エックスサーバにLaravel8インストール、公開方法まで一挙公開! | アールエフェクト
ただし既存の.htaccess
の中身を書き換えるのは怖かったので既存のコードはコメントアウトして参考記事をコピペした。
変更すると自動で反映されるのでhttp://サーバーID.xsrv.jp/
にアクセスするとLaravelの初期ページが表示されるようになった。
# SetEnvIf Request_URI ".*" Ngx_Cache_NoCacheMode=off
# SetEnvIf Request_URI ".*" Ngx_Cache_AllCacheMode
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [QSA,L]
</IfModule>
3 MySQLの設定
3 MySQLの設定 - 【完全版】エックスサーバにLaravel8インストール、公開方法まで一挙公開! | アールエフェクト
3.1 データベースの作成
、3.2 接続設定
は説明通りにすすめていけば設定できる。
4 JetStreamのインストール
4 JetStreamのインストール - 【完全版】エックスサーバにLaravel8インストール、公開方法まで一挙公開! | アールエフェクト
プロジェクトルートでCOMPOSER_MEMORY_LIMIT=-1 composer require laravel/jetstream
を実行する。
問題なければそのままphp artisan jetstream:install livewire --teams
を実行。
インストールできればok。
ちなみに最初は以下のエラーが出てJetStreamのインストールができなかった。
原因はパスの記述ミスによるcomposerのバージョンが違ったことが原因でした。
$ COMPOSER_MEMORY_LIMIT=-1 composer require laravel/jetstream
# Your requirements could not be resolved to an installable set of packages.
#
# Problem 1
# - Conclusion: remove laravel/framework v8.83.26
# - Conclusion: don't install laravel/framework v8.83.26
# - laravel/jetstream 2.x-dev conflicts with laravel/framework[v8.83.26].
# - laravel/jetstream v2.12.0 conflicts with laravel/framework[v8.83.26].
# - laravel/jetstream v2.12.1 conflicts with laravel/framework[v8.83.26].
# - laravel/jetstream v2.12.2 conflicts with laravel/framework[v8.83.26].
# - laravel/jetstream v2.12.3 conflicts with laravel/framework[v8.83.26].
# - laravel/jetstream v2.12.4 conflicts with laravel/framework[v8.83.26].
# - laravel/jetstream v2.12.5 conflicts with laravel/framework[v8.83.26].
# - Installation request for laravel/framework (locked at v8.83.26, required as ^8.75) -> satisfiable by laravel/framework[v8.83.26].
# - Installation request for laravel/jetstream ^2.12 -> satisfiable by laravel/jetstream[2.x-dev, v2.12.0, v2.12.1, v2.12.2, v2.12.3, v2.12.4, v2.12.5].
#
#
# Installation failed, reverting ./composer.json to its original content.
調べてみると
Error when trying to install laravel/jetstream
にWhat laravel version? If 8, that should work. Clear composer cache and do a composer selfupdate.
と書いてあったので
COMPOSER_MEMORY_LIMIT=-1 composer self-update
を実行すると[Symfony\Component\Console\Exception\CommandNotFoundException] Command "self-update" is not defined.
というエラーが発生した。
エラーを元に調べるとcomposer self-update がnot defined になってしまう - 最新版を別インストールするの記事が見つかった。
で、再度いろいろ確認してみたらcomposerの.bash_profile
のパス設定がおかしかった。
パス設定を直す前はcomposerのバージョンが1.x
だったが、設定を直したあとは2.x
になった(多分これが原因)。元々入っていたcomposerを参照していたっぽい。
これは別パッケージだが同じような現象がのっていた
【Laravel】 composer require laravel/uiでエラー | Zakkuriブログ
もしphp artisan jetstream:install livewire --teams
を実行して以下のような
Your requirements could not be resolved to an installable set of packages.
Problem 1
- laravel/jetstream[v2.12.0, ..., 2.x-dev] require illuminate/console ^9.21 -> found illuminate/console[v9.21.0, ..., 9.x-dev] but these were not loaded, likely because it conflicts with another require.
- Root composer.json requires laravel/jetstream ^2.12 -> satisfiable by laravel/jetstream[v2.12.0, ..., 2.x-dev].
You can also try re-running composer require with an explicit version constraint, e.g. "composer require laravel/jetstream:*" to figure out if any version is installable, or "composer require laravel/jetstream:^2.1" if you know which you need.
Installation failed, reverting ./composer.json and ./composer.lock to their original content.
みたいなエラーが発生したら、if you know which you need.
の前のコマンド(ここではcomposer require laravel/jetstream:^2.1
)を実行すればインストールできる。
5 Laravel Breeze
5 Laravel Breeze は今回使用しないためスキップ。
6 nodeのインストール
6.1 nodebrewのインストール
6 nodeのインストール -【完全版】エックスサーバにLaravel8インストール、公開方法まで一挙公開! | アールエフェクト
記事上のコマンド(perl nodebrew setup
)では以下のように表示されインストールできなかった。
perl nodebrew setup
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_CTYPE = "UTF-8",
LANG = "ja_JP.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
Can't open perl script "nodebrew": No such file or directory
代わりにXserverにNode.jsをインストールする方法(nodebrew) – 修ちゃんの技術資料を参考にしてダウンロードした。
curl -L git.io/nodebrew | perl - setup
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
100 26039 100 26039 0 0 13710 0 0:00:01 0:00:01 --:--:-- 13710
Fetching nodebrew...
Installed nodebrew in $HOME/.nodebrew
========================================
Export a path to nodebrew:
export PATH=$HOME/.nodebrew/current/bin:$PATH
========================================
ちなみに以下のようなメッセージが出た場合はローカル端末でLaravel を Xserverで動作させる を参考に設定を変更したのち、再度Xserverにログインしなおせば表示されなくなる。
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_CTYPE = "UTF-8",
LANG = "ja_JP.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
6.2 nodeのインストール
6.2 nodeのインストール - 【完全版】エックスサーバにLaravel8インストール、公開方法まで一挙公開! | アールエフェクト
現時点で最新安定版(18.12.1)をインストールして使いたかったが以下のようのエラーが表示された。
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)
nodeのv18を使ったらエラーになった(CentOS7) - ITのプロへにも書いてあるがダウングレードすればよい。
16の最新は16.18.1(Index of /download/release/latest-v16.x/)だったのでインストールする。
とりあえずok。
あとは参考どおりにすすめればいける。
7 mysqlコマンドによりDBへの接続
現状MySQLではなくMariaDBになっているがコマンドは問題なく使える。
7 mysqlコマンドによりDBへの接続 - 【完全版】エックスサーバにLaravel8インストール、公開方法まで一挙公開! | アールエフェクト
8以降の設定などについて
基本的に7までできていれば公開はできている。
8以降の説明に関してはしなくても良い。
- 8 Xserverのエラーログ
- 9 Xserverのアクセスログ
- 10 Cronの設定(定期的なジョブの登録)
- 11 SUPERVISORのインストール
- 12 エラー
https化(常時SSL化)について(補足)
これに関しては最初に設定しておいた方がよいかも(ずっとhttp
のままになっていた)。
設定は簡単でSSL設定から簡単に設定できる。
無料独自SSL設定 | レンタルサーバーならエックスサーバー
以下の部分から設定を進める。
後からSSL化するとうまくいかない場合があるため以下を参考にシンボリックリンクを貼りなおせばSSL化される(はず)。
【Git】Laravel×Vue.jsアプリをXserverにデプロイする方法!500エラー解決