Closed24

Laravel を Xserverで動作させる

fsefasfsefas
fsefasfsefas

ちなみに上記の記事はあくまでLaravelプロジェクトの公開を目的としているのでGitを使用していないので注意。
もしローカルで開発したプロジェクトをGitを使用してXserverで公開したいならXserver内のGitのバージョンを最新にして... などの設定が必要。
詳しくはみていないが以下を参考にすればできそう。
【Git】Laravel×Vue.jsアプリをXserverにデプロイする方法!500エラー解決

fsefasfsefas

動作環境

バージョン
MacOS BigSur(11.7.1)
PHP 8.0.25
Laravel 8.83.26
MariaDB(Xserver) 10.5
fsefasfsefas

Xserverのサービスの登録は以下の記事がわかりやすい
【エックスサーバー】新規申し込みのやり方 | チグサウェブ

Xserverの操作は基本的にサーバーパネルで行うことになる。
サーバーパネル - ログイン | レンタルサーバーならエックスサーバー

【完全版】エックスサーバにLaravel8インストール、公開方法まで一挙公開! | アールエフェクトのサーバーパネルのデザインが違うためデザインを切り替えると進めやすい。
Image from Gyazo

fsefasfsefas

SSH設定(Mac)

1.1 Xserver側でのSSH設定はそのまま進める。ホスト名は要確認(サーバー番号.xserver.jpという形式。1.2 Windows側でのSSH設定に埋もれていたので見つけるのに時間がかかった)。
ちなみに私は1.3 Mac側でのSSH設定の設定がうまくできなかった。代わりにエックスサーバーにssh接続する方法(ターミナル利用) - Qiitaを参考にして設定が完了できた。
Qiitaのログインの簡略化の設定がうまくいくと以降のSSH接続がとてもラクなのでおすすめ。

fsefasfsefas

ちなみに
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").
fsefasfsefas

2 Laravelのインストール

2.1 PHPのバージョン変更

まずXserverのサーバーパネルからバージョンを変更する。
【完全版】エックスサーバにLaravel8インストール、公開方法まで一挙公開! | アールエフェクト

PHPのバージョン確認方法が書いてありましたがそのリンクを貼っておきます。
プログラム言語・コマンドパス | レンタルサーバーならエックスサーバー
プログラム言語・コマンドパス | 法人向けレンタルサーバー【Xserverビジネス】サポートサイト

fsefasfsefas

ちなみに/usr/bin/php7.4の方ではパスが通らなかったので/opt/php-7.4.4/bin/phpの方でパスを設定しました。

fsefasfsefas

2.2 Composerのインストール

ここは 2.2 Composerのインストール - 【完全版】エックスサーバにLaravel8インストール、公開方法まで一挙公開! | アールエフェクト を参考にして進めれば問題ありませんでした。

Composerのダウンロードリンクは以下になります。
Composer

fsefasfsefas

ちなみに 2.3 Laravelコマンドパッケージのインストール【完全版】エックスサーバにLaravel8インストール、公開方法まで一挙公開! | アールエフェクトではlaravelコマンドのインストールはできたものの、which laravelを実行すると/usr/bin/which: no laravel inとエラーが表示されました。ちょっと調べてみましたが原因を調べるのに時間がかかりそうだったので、Laravelコマンドをできるようにすることは諦めました。

fsefasfsefas

2.4 Laravelプロジェクトの作成

ここは 2.4 Laravelプロジェクトの作成 - 【完全版】エックスサーバにLaravel8インストール、公開方法まで一挙公開! | アールエフェクトとかなり違います。

composer create-project "laravel/laravel=8.*" プロジェクト名でプロジェクトを作成したいのですが問題点がある。

Laravel環境構築(Mac編) | ブログ | 株式会社Grune

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でライブラリインストール時にメモリエラーの解決法

http://サーバーID.xsrv.jp/にアクセスして以下のような画面が出ればok。
Image from Gyazo

https://サーバーID.xsrv.jp/では別の画面が表示されます。
Image from Gyazo

fsefasfsefas

2.5 公開のための設定

ここは問題なく進めることができた。
2.5 公開のための設定 - 【完全版】エックスサーバにLaravel8インストール、公開方法まで一挙公開! | アールエフェクト

ただし既存の.htaccessの中身を書き換えるのは怖かったので既存のコードはコメントアウトして参考記事をコピペした。

変更すると自動で反映されるのでhttp://サーバーID.xsrv.jp/にアクセスするとLaravelの初期ページが表示されるようになった。

.htaccess
# 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>
fsefasfsefas

4 JetStreamのインストール

4 JetStreamのインストール - 【完全版】エックスサーバにLaravel8インストール、公開方法まで一挙公開! | アールエフェクト
プロジェクトルートでCOMPOSER_MEMORY_LIMIT=-1 composer require laravel/jetstreamを実行する。
問題なければそのままphp artisan jetstream:install livewire --teamsを実行。
インストールできればok。

fsefasfsefas

ちなみに最初は以下のエラーが出て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ブログ

fsefasfsefas

もし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)を実行すればインストールできる。

fsefasfsefas

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
========================================
fsefasfsefas

ちなみに以下のようなメッセージが出た場合はローカル端末で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").
fsefasfsefas

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。
あとは参考どおりにすすめればいける。

fsefasfsefas

8以降の設定などについて

基本的に7までできていれば公開はできている。
8以降の説明に関してはしなくても良い。

  • 8 Xserverのエラーログ
  • 9 Xserverのアクセスログ
  • 10 Cronの設定(定期的なジョブの登録)
  • 11 SUPERVISORのインストール
  • 12 エラー
fsefasfsefas

https化(常時SSL化)について(補足)

これに関しては最初に設定しておいた方がよいかも(ずっとhttpのままになっていた)。
設定は簡単でSSL設定から簡単に設定できる。
無料独自SSL設定 | レンタルサーバーならエックスサーバー
以下の部分から設定を進める。
Image from Gyazo

後からSSL化するとうまくいかない場合があるため以下を参考にシンボリックリンクを貼りなおせばSSL化される(はず)。
【Git】Laravel×Vue.jsアプリをXserverにデプロイする方法!500エラー解決

このスクラップは2022/12/05にクローズされました