エックスサーバーで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接続してやっていくんだけど、もしやり方がわからなかったら以下の記事で書いているので参考にしてみてください。
-
エックスサーバーで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ユーザ追加から好きなユーザーIDとパスワードを入力します。
ユーザーをMySQLに割り当てる
作成したユーザーが作成したデータベースにアクセスできるように設定します。MySQL一覧を選択。
これで作成したユーザーが作成したデータベースにアクセスできるようになりました。
ここで作成したユーザーとデータベースをLaravellアプリで使用します。
Laravelアプリをエックスサーバーにアップロード
ローカルのLaravelアプリをエックスサーバーのサーバーにアップロードします。
FTPソフトを使ってアップロードするんだけど、方法に関しては以下の記事で書いているのでよかったら参考にしてみてください。
-
エックスサーバーで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の作成
.envにAPP_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コマンドを確実に実行すべきでしょう。実機環境へアプリケーションをデプロイする場合は、その手順の中で
Laravel9.xデプロイview:cache
Artisanコマンドを実行すべきでしょう。
$ php artisan config:cache
$ php artisan route:cache
$ php artisan view:cache
ブラウザから画面表示
画面を確認してみるとちゃんと表示されますね。
色々面倒な作業はありましたが、無事表示されました。
まとめ
今回はエックスサーバーにLaravelアプリケーションを公開するっていうことをやってみました。やったことはおさらいするとこれです。
- エックスサーバーのPHPをアップグレード
- Composerのインストール
- データベースの作成
- 作成したデータベースとLaravelアプリケーションの紐付け
- Laravelアプリケーションをエックスサーバーにアップロード
- .envの作成
- composer install
- .htaccessの作成
どういう風に作ればエックスサーバーの中で動くのかイメージできればそこまで難しくないけど、そもそものエックスサーバーのドキュメントルートやレンタルサーバーでどの範囲まで自由にいじれるのか知らないとしんどい気がします。
とりあえずエックスサーバーでLaravel9アプリケーションを公開してみたい人は試してみてもいいかもしれないですね。