今回はエックスサーバーでLaravelアプリケーションを公開するっていうことをやっていきたい。
- エックスサーバーでPHPを使う方法
- エックスサーバーでMySQLを使う方法
- エックスサーバーでLaravelアプリを公開する方法
何かLaravelで作ったものがあってエックスサーバーで公開したいって思いがあれば参考にしてみてください。
エックスサーバーで使えるPHPやWebサーバー
Laravelアプリケーションを公開する前にエックスサーバーで使えるものを確認しておきます。
使えるPHPのバージョン
エックスサーバーではPHPが一番サポートされているみたいですね。バージョンもいくつかあって管理画面からバージョンを切り替えることができる。
簡単に切り替えられていいですね。(後で書きますが、ここでバージョン変更しても実際に使いたいPHPバージョンは変更されません)
使えるMySQLのバージョン
MySQLのバージョンも確認しておきます。
MySQLかMariaDBかを使えるけど、バージョンの変更って管理画面からできないですね。
MySQLのバージョン5.7とかでやろうと思ったけど、MariaDBでやります。MariaDBはMySQLの派生したもので互換性もある。MariaDB良い感じですね。
MariaDBとは?MySQLとの違いや、特徴・強みなどをご紹介
データベースとPHPはエックスサーバーにあるものを使えるからそれらを使ってLaravelアプリケーションを公開できそうです。
公開するLaravelアプリケーション
エックスサーバーでLaravelアプリケーションを公開していくんだけど、公開するアプリケーションがないとダメですよね。なのでちょっと適当に作ります。
適当にDBからデータを取得して表示するだけのアプリケーションです。
本当に雑なページだけど、まあいいでしょう。画像はpubicフォルダに突っ込んだやつを表示して、下の文言はDBから取得したものを表示しています。ちなみにDockerで作成したんだけど、環境としてはこんな感じです。
- Webサーバー・・・nginx
- データベース・・・mysql5.7
- phpのimage・・・php:8-fpm
- Laravel・・・8.74.0
今回はこんな環境で作ったやつをエックスサーバーで公開していきたい。これがちゃんとエックスサーバーに対応して動いてくれるものか見ものですね。
エックスサーバーでLaravelアプリケーションを動くようにする
ここからエックスサーバでLaravelアプリケーション動かそうとしていきます。
無駄な点とかあるかもしれないけど、最終的に動くことは確認できたので参考にできる部分は参考にしてみてください。
エックスサーバーをこれから契約して使う場合は以下の記事でおすすめのプラン等を紹介しているので、よかったら参考にしてみてください。
作成したLaravelアプリケーションにに必要なPHPバージョンに切り替える
今回はLaravel8でアプリケーションを作成したので、それに伴うPHPのバージョンが必要です。Laravel8で必要なPHPの最低バージョンが7.3.0なので確認しましょう。
変更するバージョンはできるだけアプリケーションのバージョンと合うようにしましょう。
DBの確認
今回のアプリケーションはDB接続が必要になってくるからDB設定もしないといけない。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 $HOME/bin/php
これで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からデータを適当に入れる。
そしてページを表示してみると・・・ちゃんと表示されました。
とりあえず公開することができましたね。
まとめ
エックスサーバーでLaravelアプリケーションを公開するっていうことをやってみましたが、今回やった流れとしては以下です。
- PHPのバージョン変更
- Composerのインストール
- ローカルのLaravelアプリケーションをエックスサーバーにアップロード
- .htaccessの編集
- アプリケーションのDB接続情報の書き換え
エックスサーバーは10日間無料で使うことができるので、今回の記事でやったようなことをその10日間で試してみるといいですよ。