エックスサーバーでLaravel8アプリケーションを公開する方法!

今回はエックスサーバーでLaravelアプリケーションを公開するっていうことをやっていきたい。何かLaravelで作ったものがあってエックスサーバーで公開したいって思いがあれば参考にしてみてください。

エックスサーバーを使ってやっていくから契約していない人はエックスサーバーから詳細を確認しておくといいです。プランは一番安いやつで十分!ではやっていこう。

エックスサーバーで使えるPHPやWebサーバー

Laravelアプリケーションを公開する前にエックスサーバーで使えるものを確認しておこう。

使えるPHPのバージョン

プログラミング言語・コマンドパス

エックスサーバーではPHPが一番サポートされているみたいですね。バージョンもいくつかあって管理画面からバージョンを切り替えることができる。

簡単に切り替えられていいですね。

使えるmysqlのバージョン

MySQLかMariaDBかを使えるけど、バージョンの変更って管理画面からできないですね。

MySQLのバージョン5.7とかでやろうと思ったけど、MariaDBでやります。MariaDBはMySQLの派生したもので互換性もある。MariaDB良い感じですね。

MariaDBとは?MySQLとの違いや、特徴・強みなどをご紹介

データベースとPHPはエックスサーバーにあるものを使えるからそれらを使ってLaravelアプリケーションを公開できそうです。

OS・Webサーバー

OSはLinuxでwebサーバーはApacheとNginxって書かれているけど、両方?

ここら辺はどうなっているのか謎だけどまあやっていこう。

公開するLaravelアプリケーション

エックスサーバーでLaravelアプリケーションを公開していくんだけど、公開するアプリケーションがないとダメですよね。なのでちょっと適当に作ります。

これでいいですか、、とりあえずエックスサーバーで動かすことが目的なのでいいですよね。。

本当に雑なページだけど、まあいいでしょう。画像はpubicフォルダに突っ込んだやつを表示して、下の文言はDBから取得したものを表示しています。ちなみにDockerで作成したんだけど、環境としてはこんな感じです。

  • Webサーバー・・・nginx
  • データベース・・・mysql5.7
  • phpのimage・・・php:8-fpm
  • Laravel・・・8.74.0

今回はこんな環境で作ったやつをエックスサーバーで公開していきたい。これがちゃんとエックスサーバーに対応して動いてくれるものか見ものですね。

エックスサーバーでLaravelアプリケーションを動くようにする

ここからエックスサーバでLaravelアプリケーション動かそうとしていくんだけど、初めてやるので手探り状態です。Laravel久々に触りました。

無駄な点とかあるかもしれないけど、最終的に動くことは確認できたので参考にできる部分は参考にしてみてください。

作成したLaravelアプリケーションにに必要なPHPバージョンに切り替える

今回はLaravel8でアプリケーションを作成したので、それに伴うPHPのバージョンが必要です。Laravel8で必要なPHPの最低バージョンが7.3.0なので確認しましょう。

PHPのバージョンは現状7.4.25が使われていますね。7.3以上だからこれでも要件は満たしているけどできるだけ開発した環境に合わせたいのでPHP8.0.12にしておきます。

DBの確認

今回のアプリケーションはDB接続が必要になってくるからDB設定もしないといけない。MySQL設定から確認することができる。

既存のデータベース汚したくないので、MySQLデータベースを追加してやろうと思います。データベース名を好きな名前で作成。ユーザも欲しいので追加します。

そしたらユーザーにアクセス権を付与したいのでMySQL一覧からアクセス権を与えます。これはMySQLの設定を見てみると良いですよ。

これでPhpMyAdminに作成したユーザー名とパスワードでログインできるか確認しましょう。

ユーザー名とパスワードが聞かれるけど、さっき作成したユーザー名とパスワードを入力すればログインできるはず。ログインするとこんな画面になる。

これでとりあえずDBはOK。また後でLaravelからDBに接続するっていうことをやるよ。

SSH接続する

エックスサーバーにLaravelアプリケーションが動くようにしないといけないから、SSH接続してそこから色々必要なものを入れよう。SSH設定からSSHで接続するための秘密鍵を取得する。

パスフレーズを良い感じに設定して生成する。

生成されるとかってに秘密鍵がダウンロードされるから、それを使ってエックスサーバーにSSH接続します。

$ chmod 600 ダウンロードした秘密鍵
$ ssh -i ダウンロードした秘密鍵へのパス サーバーID@ホスト名 -p 10022

コマンドを実行するとEnter passphrase for keyという風にパスフレーズが聞かれるから、設定したパスフレーズを入力すればOKです。サーバーIDとホスト名はそれぞれサーバーパネルトップとサーバー情報から確認することができる。

接続したらやっとエックスサーバーの中だ。ここからLaravelが使えるように色々インストールしていく。

PHPのバージョンを変更する

SSH接続してPHPのバージョン確認してみると5.4.16ですね。

さっきエックスサーバーの管理画面で変更したPHPのバージョンは一体なんなんだ?っていうところなんだけど・・・

うーーん画面から変更したPHPのバージョンはまた別のところなのかな。SSHで中入って確かめると5.4.16です。どんなphpのバージョンがあるのか確認してみよう。

php8.0もありますね。ただ今のままだとコマンドラインでPHPコマンド使った時に5.4.16が使われてしまってちょっときついです。シンボリックリンク貼ってPHPコマンドを使ったときに8.0が使われるようにします。

$ cd
$ mkdir bin
$ ln -s /usr/bin/php8.0

これでphp8.0へのシンボリックリンクは貼れたので、.bash_profileを次はいじる。

$ cd
$ vi .bash_profile

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$HOME/bin:$PATH
#↑これにする。

export PATH

#読み込ませます
$ source .bash_profile

これでphp -vとしてみるとphp8.0.12になりました。

8.0.12なのは8.0のリンク先がそうなっているからかな。

これでコマンドライン上でも8.0が使えるようになった。

Composerのインストール

Composerも入れておくか。ComposerのダウンロードはComposerのページに書かれているからそれを参考に進めよう。書かれているコードを実行すると、composer.pharというものが配下にできる。

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '906a84df04cea2aa72f40b5f787e49f22d4c2f19492ac310e8cba5b96ac8b64115ac402c8cd292b8a03482574915d1a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

そしたらこれを移動させる。

$ mkdir -p .config/composer/vendor/bin/
$ mv composer.phar .config/composer/vendor/bin/composer

pathを通さないと実行しづらいので.bash_profileをいじろう。

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$HOME/.config/composer/vendor/bin:$HOME/bin:$PATH
#↑これ
export PATH

記述したら以下コマンドで反映。

$source .bash_profile

composer -vとやってComposerと出てきたらOK。

FTPでローカルのプロジェクトをエックスサーバーに突っ込む

さあローカルで作成したLaravelアプリケーションをエックスサーバーに配置しましょう。FTPソフトを使ってローカルで作ったLaravelアプリケーションをエックサーバーで公開したいドメインの配下に置きます。

これはCyberduckを使って移行する画面。公開したいドメインの直下に突っ込んでおく。srcっていう名前になっちゃてるけど、これlaravelのアプリケーションです。。

突っ込むとこんな感じで〇〇.xsrv.jpドメイン配下に入りました。公開したいドメインの配下に入れるといいと思います。

シンボリックリンクの作成

エックスサーバーではpublic_html配下のindex.htmlがアクセスすると表示されるんだけど、それをLaravelアプリケーションの画面にしないといけません。なのでシンボリックリンクを貼ってLaravelアプリケーションを表示されるようにします。

$ ln -s /home/〇〇/〇〇.xsrv.jp/src/public /home/〇〇/〇〇.xsrv.jp/public_html/public

そしたらアクセスしてくれるように,htaccessをいじろう。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [QSA,L]
</IfModule>

これでアクセス!トップページは変えていないんですよね、Laravelのデフォルトの画面が表示されました。

今回/drinksページでDBからデータを取得する処理をしているので、このままアクセスするとこけます。DB接続情報を与えていないからですね、設定しないといけない。

DB接続情報を書き換える

.envでDBの接続情報を管理しているので、.envの記述を変えます。

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=作成したデータベース名
DB_USERNAME=作成したユーザー名
DB_PASSWORD=設定したパスワード

これでmigrateすると実行できましたね。テーブルもできたので、データを突っ込んで表示を確かめてみましょう。

phpmyadminからデータを適当に入れる。

そしてページを表示してみると・・・ちゃんと表示されました。

なかなかここまでしんどかった。が、まあとりあえず公開することはできたので良しとしましょう。

まとめ

うーん試してみた感じこれ結構しんどいですね、レンタルサーバーにそこまで慣れていないだけだろうか。エックスサーバーで公開することができるのはいいけど、そこまでこだわりがないなら他の選択肢で公開してもいい気がする。

  • heroku
  • gae
  • ecs
  • ・・・

レンタルサーバーだと運用も大変だろうし、AWSやGCPなんかをやっぱり使いたくなってしまうよ。今回はDockerで構築したからDocker使える環境だと良いなあ・・・とかね。

herokuは無料でできるから無料でデプロイしたい!っていう人には良いんじゃないかな。(ちょっとやりづらい部分はあると思うけど)

それとやっぱりHTML/CSS/JavaScriptで完結しないものはデプロイも面倒ですね。今までGoとかRailsとかReactとか使って色々ネットに公開してきたけど、バックエンド絡むものはしんどいなあ。