エックスサーバーVPSでLaravelアプリをデプロイしてみます【Ubuntu/Nginx/MySQL】

エックスサーバーVPSでLaravelアプリデプロイしたいんだけどできる?
できるよー。

この記事では作成したLaravelアプリケーションをエックスサーバーVPSで環境を作成して公開するっていうことをやっていきます。

記事の内容
  • エックスサーバーVPSでサーバーを立てる
  • ローカルのLaravelアプリケーションをデプロイする

Laravelアプリを公開したいと思っている方はどんな流れでできるのか参考にしてみてください。

エックスサーバーVPSでLaravelアプリケーション公開していこう。

エックスサーバーVPSでLaravelアプリケーションをデプロイする流れ

エックスサーバーVPSでLaravelアプリケーションをデプロイする流れとしては大まかに以下の方法でやります。

Laravelアプリの公開手順
  1. エックスサーバーVPSでサーバーを立てる
  2. エックスサーバーVPSの環境構築をする
  3. エックスサーバーVPSにLaravelアプリをアップロードする
  4. アプリの接続情報を整える
  5. ブラウザからアプリケーションを確認する

それぞれ細かい構築や設定はあるけど、サーバーの環境整えてLaravelアプリアップロードすれば公開できるはず。やっていきましょう。

公開するLaravelアプリケーション

今回公開してみるのはToDoアプリ。

データベースにはMySQLを使っているので、MySQLもエックスサーバーVPSではインストールして使っていきます。

エックスサーバーVPSでサーバーを立てる

エックスサーバーVPSでまずはサーバーを立てます。今回使うプランとOSは以下。

使用するプランとOS
  • メモリ・・・2GB
  • OS・・・Ubuntu22.04

使用するプランは自分のアプリケーションのことを考えて選択するといいでしょう。迷ったら最安の2GBにしておいて、スペックが足りなくなったらプランを変更してやるといいです。

エックスサーバーVPSで環境構築を行う

エックスサーバーVPSでLaravelアプリケーションを公開するのに必要な環境を整えていきます。SSH接続してやっていきますが、もしSSH接続の方法が分からなければ以下の記事を参考にしてみてください。

まずはパッケージの更新を行なってから諸々インストールしていきます。

$ apt update
$ apt upgrade

Nginxのインストールと設定

Webサーバーには今回Nginxを使います。インストールして起動しておきましょう。

$ apt install nginx -y
$ systemctl start nginx
// active(runnning)ならOK
$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-12-25 09:53:19 JST; 5s ago
       Docs: man:nginx(8)

デフォルトでは80番ポートは閉じられているので、エックスサーバーVPSの管理画面にある接続許可ポート設定のWeb(20/21/80/443)をONにします。

これでIPアドレスにブラウザからアクセスしてみるとNginxの初期ページが表示されましたね。

MySQLのインストール

データベースにはMySQLを使いたいのでインストールします。

$ apt install mysql-server
$ sudo service mysql start
$ sudo service mysql status
● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-12-25 15:36:07 JST; 24s ago

動作を確かめるだけならやらなくてもいい気もするけど、rootのパスワード設定とユーザー作成もしておきます。

$ sudo mysql -u root -p
パスワードが求められるけど、初回は空欄でEnterで入れます。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<パスワード>';
mysql> FLUSH PRIVILEGES;

ユーザーの作成もしておきます。

mysql> CREATE USER 'ユーザー名'@'localhost' IDENTIFIED BY 'パスワード';

mysql> GRANT ALL PRIVILEGES ON * . * TO 'ユーザー名'@'localhost';
mysql> FLUSH PRIVILEGES;

最後に今回Laravelアプリケーションで使用するデータベースも作成しておきましょう。

mysql> create database 〇〇;

ここで作成したデータベースをLaravelアプリケーションで使用します。

PHPをインストールする

PHPをインストールします。

$ sudo apt install -y php
$ php -v
PHP 8.1.2-1ubuntu2.9 (cli) (built: Oct 19 2022 14:58:09) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
with Zend OPcache v8.1.2-1ubuntu2.9, Copyright (c), by Zend Technologies

他のパッケージもインストールしておきます。

$ sudo apt-get install -y php8.1-cli php8.1-common php8.1-mysql php8.1-zip php8.1-gd php8.1-mbstring php8.1-curl php8.1-xml php8.1-bcmath
$ sudo apt install php-fpm

Composerのインストール

LaravelアプリケーションのパッケージインストールにはComposerを使うので、Composerをインストールしておきます。

Composerは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');"

ComposerをPHPが入っているディレクトリに移動させて権限を付与しておきましょう。

 $ mv ./composer.phar $(dirname $(which php))/composer && chmod +x "$_"
$ composer --version
Composer version 2.5.1 2022-12-22 15:33:54

ローカルのLaravelアプリをエックスサーバーVPSにアップロードする

ローカルで作成したLaravelアプリケーションをエックスサーバーVPSにアップロードします。アップロードにはFTPソフトを使いましょう。

どこにアップロードするかだけど、今回は/var/www/htmlにしたいと思います。

vendorなどの不要なフォルダはアップロードしないでOKです。

アプリケーションの設定をする

公開する上で諸々必要な設定があるのでやっていきます。

composer installする

アップロードしたディレクトリに移動してcompose installします。

$ cd /var/www/html/app
$ composer install --optimize-autoloader --no-dev

Storageに権限を付与する

$ chmod -R 777 storage

.envを編集する

.envのDB接続情報を記述している欄を編集します。作成したデータベース情報に合わせましょう。

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

php artisan migrateする

DB接続情報を変更したのでうまくいけばデータベースへのmigrateもできるはずです。

$ php artisan migrate

   INFO  Preparing database.

  Creating migration table ......................................... 10ms DONE

   INFO  Running migrations.

  2014_10_12_000000_create_users_table ............................. 33ms DONE
  2014_10_12_100000_create_password_resets_table ................... 11ms DONE
  2019_08_19_000000_create_failed_jobs_table ....................... 50ms DONE
  2019_12_14_000001_create_personal_access_tokens_table ............ 42ms DONE
  2022_0926_0000000_create_todos_table .............................. 6ms DONE

これでテーブルが作成されました。

最適化を行う

設定ローディング・ルートロード・ビューロードの最適化をおこなっておきます。

$ php artisan config:cache
$ php artisan route:cache
$ php artisan view:cache

Nginxの設定ファイルを記述する

NginxからLaravelのアプリケーションに接続できるように設定ファイルを記述します。

server {
    listen 80;
    listen [::]:80;
    server_name IPアドレス;
    root /var/www/html/app/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    index index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}
  • server_name・・・IPアドレス
  • root・・・公開したいLaravelアプリケーションのディレクトリ
  • fastcgi_pass・・・fpm.sockの場所

Nginxを再起動しておきます。

$ sudo systemctl restart nginx

ブラウザからアクセスする

IPアドレスをブラウザに入力して確認します。確認してみるとちゃんと表示されました。

入力した項目もちゃんと反映されます。お疲れ様でした。

まとめ

エックスサーバーVPSでLaravelアプリケーションを公開するっていうことをやってみたけど、ちゃんと公開することができました。

やったこととしては大まかに以下です。

公開の流れ
  1. エックスサーバーVPSでサーバーを立てる
  2. エックスサーバーVPSの環境構築をする
  3. エックスサーバーVPSにLaravelアプリをアップロードする
  4. アプリケーションの設定をする
  5. Nginxの設定ファイルを記述すり
  6. ブラウザからアプリケーションを確認する

デプロイ作業は面倒なところが多いけど無事に公開することができましたね。

Laravelアプリケーションを公開したいと思っている人はXserver VPS使ってみるといいでしょう。