Laravelアプリケーションをいざサーバーにあげて公開しようとした場合、実は意外と大変です。

単なるサーバーの場合、PHP、Mysqlの導入やSSL化の設定などが必要になります。

しかし、実はXserver(エックスサーバー)を使うと比較的楽に簡単にデプロイすることができます。

今回はXserverにLaravelのプロジェクトを導入していきたいと思います。

動画で学ぶならUdemyで講座もおすすめ!

xserver

準備

事前にXserverを契約しておいてください。

流れ

デプロイまでの流れは下記の通りとなります。

  1. SSH設定
  2. PHPのバージョン設定
  3. Gitの設定
  4. MySQLの作成
  5. Laravelの導入
  6. .htaccessの設定

SSHの設定

まずはXserverのコンソールにSSHでアクセスするための設定をしていきます。

ちなみにSSHとはリモートコンピュータと通信するためのプロトコルのことで、簡単にいうとローカルのターミナルから安全にサーバーを操作することができます。

Xserverにログインし、サーバー管理画面に進みます。

サーバーパネルのアカウントの中で、「SSH設定」をクリックします。

SSH設定で「ONにする」に設定し、設定するボタンで設定してください。

続いて、公開鍵認証用鍵ペアの生成をします。

パスフレーズに適当な文字列を入れて設定してください。

設定が完了すると、*****.keyファイルがダウンロードされます。

Macの場合

PCのターミナルを開き、ダウンロードしたkeyファイルのパーミッションを600に変更します。

$ chmod 600 ~/.ssh/********.key

これでSSHをする準備は完了です。では、実際にSSHコマンドを使ってローカルPCからサーバーに接続してみましょう。

XserverへSSHで接続するコマンドの基本は以下になります。

$ ssh -i {keyのファイル} {サーバーID}@{サーバー番号}.xserver.jp -p 10022

ここで、サーバーIDサーバー番号を知る必要があります。こちらはサーバーパネルから確認できます。

サーバーパネル>アカウント>サーバー情報を開いてください。この画面から確認します。

確認できたら、SSHコマンドを実行してみましょう。

Enter passphrase for keyには先ほどSSH設定で設定したパスフレーズを入力してEnterキーを押しましょう。

$ ssh -i ~/.ssh/********.key ********@*******.xserver.jp -p 10022
Enter passphrase for key '~/.ssh/********.key':
[*******@******* ~]

上記のようになれば、SSH成功です。llコマンド(ls -l)などを使って中身を確認してみましょう。

Windowsの場合

Windowsの場合、Tera Termなどの SSH クライアントツールを利用する必要があります。

まだ導入していない方はこちらのGithubからexeファイルをダウンロードしてください。

Tera Termを開きます。

新しい接続で、ホスト名とTCPポートを入力します。

ホストにはサーバー番号(svから始まる)、TCPポートには「10022」と入力してOKを押してください。

次に、SSH認証情報を入れます。

ユーザー名にはサーバーIDを入力します。パスフレーズには、Xserver上でSSH設定をした際に登録したパスフレーズを入力してください。

認証方式はRSA/DSA/ECDSA/ED25519鍵を使うを選択し、先ほどダウンロードしたkeyファイルを指定してください。

これでOKを押します。

すると、初回はセキュリティ警告が出ますが、そのまま続行を押します。

これでSSH接続は完了です。

PHPのバージョン設定

PHPのバージョンを設定します。実はサーバーには2種類のPHPが存在します。

①CLIのPHP(コマンドライン上で実行されるPHPプログラム)
②Webサーバーとして稼働した際利用されるPHP

①はコマンドライン上で設定し、②はXserverのサーバーパネル上で設定していきます。

CLIの現在のPHPバージョンの確認

さて、Xserverでは初期のCLI-PHPのバージョンはどのようになっているのでしょうか。確認してみましょう。

 $ php -v
PHP 5.4.16 (cli) (built: Apr  1 2020 04:07:17)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
    with Zend OPcache v7.0.5, Copyright (c) 1999-2015, by Zend Technologie

PHP 5.4.16とかなり古いですね。。

今回はphp8.1を導入していきましょう。

実はXserverではすでに様々なバージョンのphpプログラム自体は用意されています。下記のコマンドを打ってみましょう。

$ find /opt/php-*/bin -type f -name 'php'
....
/opt/php-7.4/bin/php
/opt/php-8.0.0/bin/php
/opt/php-8.0.1/bin/php
/opt/php-8.0.10/bin/php
/opt/php-8.0.12/bin/php
/opt/php-8.0.16/bin/php
/opt/php-8.0.25/bin/php
/opt/php-8.0.6/bin/php
/opt/php-8.0.7/bin/php
/opt/php-8.0/bin/php
/opt/php-8.1.12/bin/php
/opt/php-8.1.2/bin/php
/opt/php-8.1.3/bin/php
/opt/php-8.1.6/bin/php
/opt/php-8.1/bin/php

binディレクトリの作成

ホームディレクトリにbinディレクトリを作成します。

$ mkdir ~/bin

binディレクトリ内にphp8.1へのシンボリックリンクを作成

作成したbinディレクトリ内に対象のPHPバージョンのシンボリックリンクを作成します。

$ cd ~/bin
$ ln -s /opt/php-8.1/bin/php ~/bin
$ ll
合計 0
lrwxrwxrwx 1 ******** members 20  5月  4 22:07 php -> /opt/php-8.1/bin/php

PATHを通す設定

それではPATHの設定をして、phpコマンドを実行した場合はphp8.1が使われるように設定していきましょう。

PATHの設定は~/.bash_profileファイルに記載します。このファイルに記載することで再度SSH接続をした際にもPHPのバージョンの設定が消えないようになります。

$ cd
$ vi .bash_profile

ファイル内を下記のように書き換えてください。

# .bash_profile

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

# User specific environment and startup programs

#PATH=$PATH:$HOME/bin #でコメントアウトしてください
PATH=$HOME/bin:$PATH  #追記

export PATH

書き換えたら、[esc] + wqで保存してください。

最後に.bash_profileファイルを実行しましょう。

$ source .bash_profile

はい、これで設定は完了です。PHPのバージョンを確認してみましょう。

$ php -v
PHP 8.1.12 (cli) (built: Oct 31 2022 09:40:07) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.12, Copyright (c) Zend Technologies

無事にPHP8.1が設定されました。

Webサーバーとして稼働した際利用されるPHPのバージョン設定

続いて、アプリケーションが実行された時に利用されるPHPのバージョンを設定します。

こちらはXserverのサーバーパネル上で設定します。

サーバーパネル>PHP>PHPVer.切替をクリックしてください。

対象のドメインを選択します。

PHPのバージョンを8.1系に設定し、変更を押下します。

これで設定は完了です。

Gitの設定

SSH Keyの設定

続いて、gitの設定をしていきます。

SSH Keyの設定をします。

$ ssh-keygen -t rsa -C "your_email@gmail.com"

いくつか質問されるが全てenterでOK!

公開鍵をGithubに登録

公開鍵をGithubに登録する

下記のコマンドで公開鍵をコピペしておく。

$ cat ~/.ssh/id_rsa.pub

GithubのSettings>SSH and GPG keys>New SSH keyから公開鍵を貼り付けて登録する。

これでGithubの設定も完了です。

MySQLの作成

Xserver上でMySQLを作成します。

サーバーパネルのデータベース>MySQL設定をクリックしてください。

MySQLの追加

MySQLの追加タブをクリックし、MySQLデータベース名を入力してください。

確認画面に進み、作成してください。

MySQLユーザーの追加

MySQLユーザー追加タブをクリックし、ユーザーを作成してください。

アクセス権所有ユーザー設定

作成したユーザーが作成したMySQLにアクセスできるように権限を設定します。

MySQL一覧でアクセス権未所有ユーザーに先ほど作成したユーザーを設定して追加ボタンを押下してください。

設定が完了したらDBの準備は完了です。

作成したMySQLをphpmyadminで確認してみましょう。

サーバーパネルのphpmyadminをクリックしてください。

Basic認証が出てくるので、作成したユーザー名とパスワードを入力してください。

そうすると、phpmyadminで作成したDBを確認することができるようになります。

Laravelプロジェクトの導入

Laravelプロジェクトのクローン

それではLaravelのアプリケーションを設置していきます。

まず、公開ディレクトリに移動します。

※独自ドメインの場合は「*******.xsrv.jp」をご自身のドメインに置き換えてください(以下同様)。

$ cd ~/*******.xsrv.jp/public_html/

こちらにLaravelプロジェクトを導入していきます。

$ git clone git@github.com:juno1140/memo-app.git
$ cd memo-app
$ composer install

もしcomposer installでエラーが出る場合は、composerのバージョン1系と低い可能性があります。

その場合は下記の手順で、バージョンを上げてください。

現状のバージョンの確認

$ composer -v
Composer version 1.10.26 2022-04-13 16:39:56

composerの公式サイトを参照し、コマンドを実行する(下記のコマンドではなく、公式ドキュメントのものを実行してね)。

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

完了すると “composer.phar” が生成されます。

ホームディレクトリの bin 内に composer.pharを移動し、composer にリネームします。

$ mv composer.phar $HOME/bin/composer

PATHを反映させます。すでに~/.bash_profileにはPATHに設定はできているので、下記のコマンドを実行するだけです。

$ source ~/.bashrc

これで設定は完了です。バージョンを確認するとあがっているはずです。

$ composer -v
Composer version 2.6.1 2023-09-01 13:53:08

これでもう一度composer installするとエラーなく実行されるでしょう。

これでプロジェクトのファイル群が導入できました。

.envの設定

続いて.envの設定をしていきます。

$ cp .env.example .env
$ vi .env

本番環境の場合は下記のように設定しておきましょう。

APP_NAME={アプリ名}
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL={ドメイン}

FILESYSTEM_DISK=public

一度保存しましょう。下記のコマンドでAPP_KEYを設定しましょう。

$ php artisan key:generate

php artisan storage:linkもしておきましょう。

$ php artisan storage:link

DBの設定

先ほど作成したMySQLに接続します。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE={作成したDB名}
DB_USERNAME={作成したユーザー名}
DB_PASSWORD={作成したユーザーパスワード}

保存して、migrateしてみましょう。

$ php artisan migrate

無事にmigrationが実行されればOKです。

これでアプリケーションの一通りの設定が完了です。

.htaccessの設定

現状だとドメインにアクセスすると、まだLaravelのアプリケーションにアクセスできません。

実際にアクセスしてみましょう。

このように、Xserverのデフォルトの画面が表示されます。

Xserverではデフォルトで~/*******.xsrv.jp/public_html/index.htmlが表示されるようになっています。

これを~/*******.xsrv.jp/public_html/memo-app/public/index.phpを見るように設定します。

~/*******.xsrv.jp/public_html/.htaccessを編集します。

$ vi ~/*******.xsrv.jp/public_html/.htaccess

最下部に下記のコードを入力してください。

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

「memo-app」にはご自身のアプリケーションのディレクトリを指定してください。

これで保存します。

既存の~/*.xsrv.jp/public_html/index.htmlは削除してください。

$ rm ~/*******.xsrv.jp/public_html/index.html

これでドメインにアクセスしてみましょう。

無事にLaravelのアプリケーションを開くことができました!

SSLの設定

今のままだとSSL化されておらず、通信が暗号化されていません。

SSL化の設定はサーバーパネルから簡単に設定できます。

SSL設定>独自SSL設定追加から設定してみてください。

設定後、反映まではしばらく時間がかかるのでお待ちましょう。しばらくしてアクセスするとURLがhttps://となるでしょう。

エラーが出る場合

Viteのエラー

.envのAPP_DEBUGをtrueにしてエラー内容を確認する。

下記のようなエラーが出る場合がある。

Vite manifest not found at:

この場合は、ローカル環境でnpm run buildして、.gitignoreの/public/buildを削除し、/public/build以下をGit管理してプッシュする。Xserver上でPULLすると表示できるようになります。

まとめ

今回はLaravelプロジェクトをXserverに公開してみました。

いかがだったでしょうか?意外と大変でしたか?

Xserverを利用するとMysqlの導入やSSLの導入は割と簡単に設定できるので楽です。

SSHやLinuxコマンドに慣れていないと大変かもしれませんが、わからないコマンドはぜひ勉強してみてください。

参考

記事でわかりにくい場合はこちらの動画も御覧ください。

この記事をシェアする