Laravelのポートフォリオをデプロイ vol.2【サーバー設定編】【Laravel】【Git】【AWS Lightsail】

前回記事に引き続き、デプロイ作業をおこなっていきます。
今回はサーバーであるAWS Lightsailインスタンスに諸々のインストールを行っていきます。
とはいっても、LAMPテンプレートを利用しているため、コア部分の設定が無いので手順としてはかなり簡略化されています。

IPアドレスの固定化

まずはIPアドレスの固定化を行っていきます。IPアドレスを固定化しておかないと、IPアドレスが変わってしまうことがあるため、「あれ?昨日はアクセスできたのにアクセスできない。。。」といった問題が生じる可能性があります。
その場合、IPを確認しなおせばOKですが、ちょっとめんどくさいですよね。

まず、対象のインスタンスの右上メニューから「Manage」を選択します。

Networkingタブの「Attach Static IP」をクリックして、固定IPの割り当てを行います。
ポップアップで固定IPの名前を設定して「Create and attach」で割り当てます。

割り当てができたら、インスタンスに表示されているIPアドレスにアクセスしてみましょう。
LAMPのトップページが表示されると思います。IPアドレスは赤枠部分に表示されています。
ブラウザのアドレスバーにIPアドレスを貼りつけてアクセスしてみましょう!

こんな画面が表示されました。

サーバーのコンソールにアクセス

自分のPCからSSHで接続することも可能ですが、今回はLightsailの機能を使って進めていきます。
インスタンスのターミナルアイコンをクリックして、Lightsailのターミナルを起動しましょう。

必要なものをインストール

それでは必要なものをインストールしていきましょう。必要なものは

  • Composer
  • Node.jsとnpm
  • git

ですね。Node関連についてはプロジェクトによって不要な可能性もありますが、Laravel Breeze(認証機能)で使っていたりもするので、ほとんどの場合で必要でしょう。
コマンドを実行してインストールしていきます。

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

sudo apt update
sudo apt install nodejs
sudo apt install npm

sudo apt-get install git
git config --global user.name [任意のユーザ名]
git config --global user.email [任意のユーザ名]

下記のコマンドを実行するとバージョン確認ができます。
バージョンが確認できる = インストールできている」なので、確認しておくと良いでしょう。
また、Gitは鍵ファイルの作成が必要になります。鍵も作成しておきましょう参考(外部リンク)

composer --version
node -v
npm -v
git --version

ソースのクローン

続いて、ソースをGitからクローンします。cloneする際のURLはリポジトリからコピーしてきましょう。
クローンは「/opt/bitnami/apache2/htdocs」のディレクトリで行うため、クローンの前にディレクトリを移動します。

cd /opt/bitnami/apache2/htdocs
git clone {gitのURL}

cloneが完了したら、プロジェクトディレクトリ(私の場合は「/opt/bitnami/apache2/htdocs/note_for_1on1」)に移動しておきます。

Laravelプロジェクトの動作準備

それでは、いよいよLaravelを動作させるための準備を行っていきます。

プロジェクト作成時は、プロジェクト作成コマンドが自動でやってくれていた部分もあるので、初見のものもあるかもしれません。
デプロイではなく、他者のプロジェクトに入った際も、Laravelプロジェクトの初期設定は必要になるので覚えておきましょう。

「どういうこと?」と思う方は、みんな大好き「php artisan serve」コマンドを実行してみましょう。
コマンドを実行してもビルトインサーバは動作しません。これはプロジェクトがアプリケーションとして動く準備を終えていないためです。
これを実行できるようにするために、以降の作業を行います。

DBの準備

Laravelプロジェクトの話ではないですが、まずはDBを作成していきます。
LAMP環境で構築したインスタンスのため、インストールは終わっています。

まず、DB接続のためのパスワードを確認します。

less /home/bitnami/bitnami_credentials

コマンドを実行すると「The default password is ‘パスワード’.」といった感じでパスワードが出力されます。
「:q」と入力すると、パスワード確認を閉じられます。(反応しない場合、全角モードになっている可能性があるので確認を)

続いてこのパスワードを使用してDBに接続していきます。
パスワードは先ほど確認したパスワードを使用します。

mysql -u root -p

続いてデータベースの作成、ユーザーの作成と権限付与を行います。
rootユーザーをアプリケーションで使用するユーザとしても良いですが、業務を考えるとセキュリティ的に良くはないので、今回は丁寧にユーザーを作成します。以下のクエリでは

  1. DB名:lara_db
  2. ユーザー
    1. 名:lara_user
    2. パスワード:password
  3. 権限:lara_dbに対して全操作が可能

として設定を行っています。
特に、DB名やユーザ名、パスワードは自分自身で考えて設定しましょう。
汎用的な名前にしたと思うので、このままでも違和感はないとは思いますが、せめてパスワードは、、、
設定した内容は、この後Laravel側に記述するので忘れないようにしましょう。
設定後、一度Mysqlからログアウトして、新しく作成したユーザーでログインできることを確認しておくと良いと思います。

CREATE DATABASE lara_db;
CREATE USER 'lara_user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON lara_db.* TO 'lara_user'@'localhost';

Laravelプロジェクトの準備

いよいよLaravelプロジェクトの準備です。まずは設定ファイルを記述していきます。
以下のコマンドで.env.exampleをコピーして、.envファイルを作成します。

cp .env.example .env

viエディタなどを用いて、.envの中の下記の項目(画像赤枠)に値を設定します。

  • APP_ENV:アプリケーションの動作モードを指定します。実装によっては影響のない項目ですが、製品版の場合は一般に「production」を指定します。
  • APP_DEBUG:DEBUGモードでの動作を行うかを指定します。本番環境想定なので「FALSE」とします。
  • APP_URL:localhostの部分を、前回設定した固定IPに書き換えます(画像は一部モザイク処理を行っています)
  • DB_xxxxx:DBの接続設定を記述します。今回の場合、「HOST」「DATABASE」「USERNAME」「PASSWORD」を書き換えればOKです。※画像は「PASSWORD」を見えなくしていますが記述必須です)

今回はAPP_NAMEを変更していませんが、アプリケーション名が決まっていれば変更しておくと良いと思います。
また、今回.envを作成したことからも分かるように、.envはGitで管理されません
これはDB接続設定やURLなどが環境によって異なるため、Git管理を行うことが出来ないためです。
そのため、アプリケーション名などの環境に依存しない設定項目については「.env.example」を変更してGitで管理しておきましょう。
これにより、コピーで作られる.envも共通の設定を引き継ぐことが出来ます。

それでは、.envを記述して保存しましょう!

vi .env

続いて、必要なパッケージをインストールしていきます。
npmのコマンドについては必要な場合実行しましょう。今回はLaravel Breezeによる認証機能で使用しているので、コマンドの実行が必要になります。不要な場合、特に何もインストールされないだけなので、実行してみてもOKだと思います。

npm run buildについては本番環境用のファイルを出力(ビルド)するために実行します。
開発時はnpm run devなどでリアルタイム監視を行っているかと思いますが、本番環境ではnpm run buildでビルドを実行しましょう。

composer install
npm install
npm run build

続いてアプリケーションキーの作成を行います。

php artisan key:generate

migrationを実行してテーブルの作成。
Seederなどでデータの作成がある場合はSeederも実行しましょう。

php artisan migrate

キャッシュフォルダやアップロードファイル・ログが格納されるstorageは書き込み権限が必要なため、権限を変更します。
やり忘れると動かないことがあるので注意。
今回は「deamon」を指定しましたが、環境によって異なります。

sudo chown -R daemon:daemon storage
sudo chown -R daemon:daemon bootstrap/cache

Webサーバーの準備

アプリケーション側の設定が完了したので、続いてWebサーバー側の設定を行っていきます。
今回はLAMP環境のため、ApacheというアプリケーションがWebサーバー機能を提供しています。このApacheの設定を変更していきます。
Apacheの設定ファイルの位置が環境によって違うことがあるので、ご注意ください。
Lightsail環境では「/opt/bitnami/apache2/conf/bitnami/bitnami.conf」にあると思うので、こちらを変更していきます。

2か所修正していきます。修正するのは「ドキュメントルート」と呼ばれるものの指定です。
ドキュメントルートはWebサーバが応答する際に使用されるディレクトリのことです。
Laravelはプロジェクト内のpublicディレクトリにアクセスすることでアプリケーションが動作します。そのため、このディレクトリをドキュメントルートとして設定する必要があります。

まずはターミナル画面から、アプリケーションのパスを確認しておきましょう。
先ほどまでLaravelのコマンドを実行していたため、アプリケーションディレクトリで作業をしていると思います。
そのため、アプリケーションのディレクトリパスが表示されているので、こちらを控えておきます。

続いて、設定ファイルを書き換えていきます。今回もviを使って書き換えます。
赤枠部分の「DocumentRoot」「Directory」をアプリケーションの「public」ディレクトリにします。
先ほど控えたアプリケーションのディレクトリの「public」を指定するので、publicの指定忘れに注意してください。
設定後にApacheの再起動を行います。

vi /opt/bitnami/apache2/conf/bitnami/bitnami.conf
sudo /opt/bitnami/ctlscript.sh restart apache

LightsailインスタンスのIPアドレスにブラウザでアクセスして、アプリケーションのTOP画面が表示されればデプロイ完了!
お疲れさまでした!