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

エックスサーバーでLaravelアプリケーション公開したいんだけどできる?
やれないことはないですよ。

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

この記事で分かること
  • エックスサーバーでPHPを使う方法
  • エックスサーバーでMySQLを使う方法
  • エックスサーバーでLaravelアプリを公開する方法
    エックスサーバーは10日間無料
    エックスサーバーは最初の10日間無料で使うことができるから、実際に試してみるといいと思います。アプリケーションの公開ぐらいなら10日間あれば試すことができるでしょう。
    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なので確認しましょう。

    変更するバージョンはできるだけアプリケーションのバージョンと合うようにしましょう。

    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からデータを適当に入れる。

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

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

    まとめ

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

    • heroku
    • gae
    • ecs
    • ・・・

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

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

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

    10日間の無料期間あり