XSERVER

エックスサーバーでLaravel9アプリを公開する方法を紹介します。

エックスサーバーでLaravelアプリ公開したいんだけど・・・

やってみましょう。

この記事ではエックスサーバーでLaravelアプリケーションを公開する方法を書いていきます。

この記事で分かること

  • エックスサーバーの環境
  • エックスサーバーでLaravelアプリを公開する方法

デプロイする上で色々作業しなくてはならないところがあるけど、やっていきましょう。

エックスサーバーにLaravelアプリを公開しますよ。

エックスサーバーの環境の確認

まずはエックスサーバーのサーバーがどんな環境なのかを確かめます。サーバーIDが14000代なので、この記事を書いている時点では割と新しめのはずです。

エックスサーバーの環境

  • Composer・・・Composer version 1.10.26が入っている
  • php・・・php -vでPHP 5.4.16 (cli)
  • laravel・・・入っていない

versionが1系だけど、Composerが入っているのは意外ですよね。古いバージョンだけど、これそのまま使ってしまえばLaravelのプロジェクト作るぐらいは簡単です。

実際に試してみるとできました。

$ composer create-project laravel/laravel --prefer-dist app
$ cd app
$ ls
app  artisan  bootstrap  composer.json  composer.lock  config  database  gulpfile.js  package.json  phpspec.yml  phpunit.xml  public  readme.md  resources  server.php  storage  tests

簡単じゃん。

作ることは簡単ですね、ただVersionも古いですし新しいComposer入れましょう。

エックスサーバーに入っている既存のComposerも使えるけど、古いので使うのはやめときます。PHPのバージョンも古いので新しくしたいです。

作成したLaravelアプリに合わせよう

ローカルで作成したLaravelアプリをエックスサーバーで公開する場合、バージョンの違いがあるとエラーの原因になります。

ローカルとエックスサーバー内のPHPやLaravelのバージョンは合わせるようにしましょう

エックスサーバーで公開するLaravelアプリの環境

今回エックスサーバーで公開するLaravelアプリの環境としては以下になります。

$ php artisan --version
Laravel Framework 9.30.1

$ composer -v
Composer version 2.1.14

$ php -v
PHP 8.1.0 (cli) (built: Nov 30 2021 06:20:01) (NTS)

$ mysql --version
mysql  Ver 15.1 Distrib 10.8.2-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

デプロイするアプリケーション

今回エックスサーバーにデプロイしてみるアプリケーションはこれです。

表示されているテキストはデータベースから取得しているので、データベースとの接続もやります。

エックスサーバーでLaravelを公開する手順

ローカルにあるLaravelアプリケーションをエックスサーバーに公開していきたいけど、手順としてはこんな感じでやります。

  • エックスサーバーのPHPをアップグレード
  • Composerのインストール
  • データベースの作成
  • 作成したデータベースとLaravelアプリケーションの紐付け
  • Laravelアプリケーションをエックスサーバーにアップロード
  • .envの作成
  • composer install
  • .htaccessの作成
  • ブラウザからアクセス!!

長いね。

そうですね、ちょっと面倒だね。。

PHPやComposerはできるだけローカルで使ったものと同じか近いものにしたいです。データベースもそうですね。エックスサーバーでLaravelの環境を整えたら、アップロードして設定して完了です。

ちょっと長いけどやっていきましょう。


作業にはエックスサーバーのサーバーにSSH接続してやっていくんだけど、もしやり方がわからなかったら以下の記事で書いているので参考にしてみてください。

XSERVER

エックスサーバーでSSH接続する方法を紹介します

2022/9/12  

この記事ではエックスサーバーでSSH接続する方法を書いていきます。 エックスサーバーを使っていて、自 ...

エックスサーバーのPHPをアップグレードする

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

$ php -v
PHP 5.4.16 (cli) (built: Apr  1 2020 04:07:17)

このPHPバージョンの変更はエックスサーバーの管理画面から切り替えても切り替わらないので、手動でやります。

# シンボリックリンクの作成
/home/〇〇

$ mkdir bin
$ ln -s /usr/bin/php8.1 $HOME/bin/php

エックスサーバーでは/usr/bin/の中に色々PHPのバージョンがあるので、その中から好きなものを選ぶといいです。今回は8.1にします。

$ vi ~/.bash_profile

# PATHの記述を以下に変更。
PATH=$HOME/bin:$PATH
$ source ~/.bash_profile

これでPHPのバージョンを確認すると8.1.6になりました。

$ php -v
PHP 8.1.6 (cli) (built: May 18 2022 18:18:39) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.6, Copyright (c) Zend Technologies

Composerを新たにインストール(アップグレード

Composerは既にエックスサーバーにバージョン1が入っているからアップグレードしようと思ったんだけど、エラーでアップデートできませんでした。

なので新しくインストールします。Composerのサイトを参照しましょう。

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { 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

.bash_profileに移動させたパスを追加します。

$ vi ~/.bash_profile
PATH=$HOME/.config/composer/vendor/bin:$HOME/bin:$PATH
$ source ~/.bash_profile

これで確認するとComposerのバージョンが2.4.2になりましたね。

$ composer -v
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 2.4.2 2022-09-14 16:11:15

エックスサーバーでデータベースを作成する

Laravelアプリケーションに使うデータベースをエックスサーバーの管理画面から作成します。

ここで設定するデータベース名やパスワードなどは後でアプリケーションから接続する際に使うので覚えておきましょう。

データベースの作成

MySQL設定をクリック
MySQL追加から好きなデータベース名を入力
追加するをクリック

MySQLユーザーの作成

MySQLユーザ追加から好きなユーザーIDとパスワードを入力します。

MySQLユーザ追加
追加するで作成

ユーザーをMySQLに割り当てる

作成したユーザーが作成したデータベースにアクセスできるように設定します。MySQL一覧を選択。

追加をクリック。

これで作成したユーザーが作成したデータベースにアクセスできるようになりました。

ここで作成したユーザーとデータベースをLaravellアプリで使用します。

Laravelアプリをエックスサーバーにアップロード

ローカルのLaravelアプリをエックスサーバーのサーバーにアップロードします。

FTPソフトを使ってアップロードするんだけど、方法に関しては以下の記事で書いているのでよかったら参考にしてみてください。

Uncategorized

エックスサーバーでFTP/SFTP接続する方法を紹介します。

2022/9/12  

この記事ではエックスサーバーでFTP接続・SFTP接続する方法を書いていきます。 エックスサーバーで ...

アップロード先はpublic_html配下にする

アップロード先のディレクトリは作り方によるけど、public_html配下にLaravelプロジェクトのフォルダたちをアップロードします。

アップロードするのはvendor以外にしておく。

今回の場合appがLaravelで作成したプロジェクトです。

.envを作成する

.envを本番環境向けに整えます。

/home/〇〇/〇〇.xsrv.jp/public_html/app

$ vi .env
APP_NAME=MyApp
APP_ENV=production
APP_DEBUG=false
APP_URL=http://〇〇.xsrv.jp
APP_KEY=

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

APP_KEYの作成

.envAPP_KEY=と記述してgenerateコマンドを打つと自動で入ります。

$ php artisan key:generate

composer installする

/home/〇〇/〇〇.xsrv.jp/public_html/app

$ composer install


   INFO  Discovering packages.

  laravel/sail .......................................................... DONE
  laravel/sanctum ....................................................... DONE
  laravel/tinker ........................................................ DONE
  nesbot/carbon ......................................................... DONE
  nunomaduro/collision .................................................. DONE
  nunomaduro/termwind ................................................... DONE
  spatie/laravel-ignition ............................................... DONE

79 packages you are using are looking for funding.
Use the `composer fund` command to find out more!

これでvendor配下に色々入ります。

DBテーブルを作成する

さっきエックスサーバーでデータベースは作ったので、そこにmigrateしてテーブルを作ります

/home/〇〇/〇〇.xsrv.jp/public_html/app

$ php artisan migrate

   INFO  Preparing database.

  Creating migration table ................................................................................................................ 6ms DONE

   INFO  Running migrations.

  2014_10_12_000000_create_users_table .................................................................................................... 5ms DONE
  2014_10_12_100000_create_password_resets_table .......................................................................................... 3ms DONE
  2019_08_19_000000_create_failed_jobs_table .............................................................................................. 3ms DONE
  2019_12_14_000001_create_personal_access_tokens_table ................................................................................... 5ms DONE

成功したら、エックスサーバーのデータベースにテーブルが作られるはずです。

必要な情報があればinsert

必要な初期データがあれば、データベースに入れておくといいでしょう。いくつか方法があるはずです。

  • エックスサーバーからPhpMyAdminを使って入れる
  • Seederを使って入れる
  • ・・・

今回は適当にSeeder作って入れました。

class TodoSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
       Todo::create([
            'id' => 1,
            'text' => '動画編集',
       ]);

       Todo::create([
            'id' => 2,
            'text' => 'プログラミング',
       ]);

       Todo::create([
            'id' => 3,
            'text' => 'ライティング',
       ]);
    }
}

.htaccessを作成する

エックスサーバーのドキュメントルートは/home/〇〇/ドメイン名/public_html/なので、そのままだとLaravelアプリにつながりません。なので、ちょっと向き先を変更します。

/home/〇〇/ドメイン名/public_html/配下に.htaccessを作成。

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

今回はpublic_html配下のappっていう名称でアプリ名を指定したから app/public/$1っていう記述にしています。

アプリの名称やディレクトリの位置によって記述は変えましょう。

cacheコマンドを実行する

Laravelのページにデプロイプロセスの中で実行するように書かれているので、実行します。

アプリケーションをプロダクションへデプロイする場合、デプロイプロセスの中で、確実にconfig:cache Artisanコマンドを実行してください。

多くのルートを持つ大きなアプリケーションを構築した場合、デプロイプロセス中に、route:cache Artisanコマンドを確実に実行すべきでしょう。

実機環境へアプリケーションをデプロイする場合は、その手順の中でview:cache Artisanコマンドを実行すべきでしょう。

Laravel9.xデプロイ
$ php artisan config:cache
$ php artisan route:cache
$ php artisan view:cache

ブラウザから画面表示

画面を確認してみるとちゃんと表示されますね。


トップページ
/todoページ

色々面倒な作業はありましたが、無事表示されました。

まとめ

今回はエックスサーバーにLaravelアプリケーションを公開するっていうことをやってみました。やったことはおさらいするとこれです。

  • エックスサーバーのPHPをアップグレード
  • Composerのインストール
  • データベースの作成
  • 作成したデータベースとLaravelアプリケーションの紐付け
  • Laravelアプリケーションをエックスサーバーにアップロード
  • .envの作成
  • composer install
  • .htaccessの作成

どういう風に作ればエックスサーバーの中で動くのかイメージできればそこまで難しくないけど、そもそものエックスサーバーのドキュメントルートやレンタルサーバーでどの範囲まで自由にいじれるのか知らないとしんどい気がします。

とりあえずエックスサーバーでLaravel9アプリケーションを公開してみたい人は試してみてもいいかもしれないですね。

-XSERVER