Amazon Lightsail - 最速でLaravel環境を構築する

Amazon LightsailでLaravel環境を構築する方法です。
### この記事でわかること
1) Amazon LightsailのLAMP環境の構築方法
2) LAMP環境内にLaravelを構築する方法（初期画面まで）
### 事前準備
AWSアカウントへの登録
Amazon Lightsailのページまでのアクセス
# 1. Amazon Lightsailとは
Amazonが提供する仮装プライベートサーバー(VPS)でEC2と比較すると簡易的かつ素早くサーバーの構築ができるサービスです。
例えば、LAMP環境(Linux、Apache、MySQL(Maria DB)、PHP)やWordPressなどを簡単に構築することができます。
定額のため、EC2等と比較すると費用面で安心感はありますが、拡張性などには制約があるのが特徴です。

公式サイトは以下

https://aws.amazon.com/jp/lightsail/?gclid=CjwKCAiAmZGrBhAnEiwAo9qHidat610znzzJK6gkL0cTQMc17fU5n7ABoUmxcKNJCjJL9_tuprfDURoCBpAQAvD_BwE&trk=e6bed941-db28-425e-8556-c0f751653db5&sc_channel=ps&ef_id=CjwKCAiAmZGrBhAnEiwAo9qHidat610znzzJK6gkL0cTQMc17fU5n7ABoUmxcKNJCjJL9_tuprfDURoCBpAQAvD_BwE:G:s&s_kwcid=AL!4422!3!591672862937!e!!g!!amazon%20lightsail%20vps

# 2. インスタンスを起動し初期画面を表示する
### インスタンスを作成する
Amazon Lightsailのページへ行くと以下の画面が出てきます。
ここで「インスタンスの作成」をクリックします。
![スクリーンショット 2023-11-26 16.52.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246507/8dfd33ef-8eee-7306-9e32-9e7aa1c6f63a.png)

インスタンスの作成を作成していきます。
ここではインスタンスローケーションは「東京、ゾーンA(ap-northeast-1a)」が選べるので、その場所を選択します。
その後、インスタンスのイメージでは以下を選択します。
プラットフォーム：Linux/Unix
設計図：LAMP(PHP 8)
![スクリーンショット 2023-11-25 13.55.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246507/1de5bbc4-4f47-2024-2404-d239486afa44.png)

インスタンスプランの選択では今回は最小のプラン「$3.5」を選択します。
もし今後、構築する上でエラーが発生した場合は、スペックのアップが必要となります。
※今回の構築では最小プランで問題ありませんでした。
![スクリーンショット 2023-11-25 13.56.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246507/cb7f87d2-1197-e4ec-5fe0-41cb2902f8c4.png)

「ホーム」に作成されたインスタンスが表示されます。
![スクリーンショット 2023-12-03 12.26.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246507/fccbd39f-da97-9389-42d6-d3a86fac7b8d.png)
### インスタンスのIPアドレスへアクセスしてみる
パブリックIPアドレス(以下、IPアドレス）をブラウザのURLが表示されている箇所へコピーしてアクセスしてみてください。
このような画面が出てこればインスタンスは正常に作成されています。
![スクリーンショット 2023-11-26 11.31.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246507/c3ebec40-8912-c806-3db0-abd7345f42cf.png)

# 3.Laravelの設定する
※ブラウザを使用してSSH接続でも良いのですが、今回はPCのターミナルを使用して接続します。
### SSH接続するために証明書をダウンロードする

Amazon Lightsailのホームから作成されたインスタンスをクリックします。
※または、「︙」から「管理」をクリックします。

クリックするとこのようなページが出てきます。
![スクリーンショット 2023-12-03 12.34.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246507/f1727221-ed31-6554-d170-4b13026aa647.png)

先ほどの画像の中の下部に記載があった「デフォルトキーのダウンロード」をクリックし、証明書をダウンロードします。
ダウンロードが完了すると「***.pem」と拡張子が.pem形式のファイルがダウンロードされます。
### ターミナルからLightsailへ接続する
最初にダウンロードした「.pemファイル」を作業するディレクトリに配置します。
そして、ターミナルを開いて「.pemファイル」を配置したディレクトリと同じ場所へ移動します。

lsコマンドで先ほど配置した「.pemファイル」が存在すればOKです。
```sh
ls
```

次に「.pemファイル」の権限を変更します。
```sh
sudo chmod 400 /.pemまでのパス/***.pem
```
上記の権限変更を実施せずに次に実行する操作をしてしまうと、セキュリティ上の観点から実行ができません。

ssh -iのコマンドを実行し、構築したAmazon Lightsailのインスタンスへ接続します。
ユーザー名は今回は「bitnami」と記載し、パブリックIPアドレスは先ほどブラウザから初期画面を確認したIPアドレスを入力してください。

```sh
ssh -i /.pemまでのパス/***.pem ユーザー名@パブリックIPアドレス
```
正常にアクセスできた場合、bitnamiと書かれた画面が出力されます。

### Laravelを導入する
htdocs配下にLaravelを導入していきます。
cdを実行し、htdocsへディレクトリを移動してください。
```
~$ cd htdocs
```

以下のコマンドをhtdocs配下で実行してください。
このコマンドを実行することでLaravelの最新バージョンを導入することができます。
```sh
~/htdocs$ composer create-project laravel/laravel test_project --prefer-dist
```
実行後、エラーなどが出ていなければ正常に導入されています。

### ルートを変更する
Lightsail構築時にIPアドレスでアクセスした際に、Laravelの初期画面が表示されるようにルートを変更します。
現在の状態では、Laravelの初期画面にルートが向いておらず、先ほどのIPアドレスでアクセスしてもLaravelの初期画面は表示されません。

なお、IPアドレスに以下のURLを追加で付与するとLaravelの初期画面にアクセスすることができますが、途中Laravel内の他のフォルダも閲覧できてしまうため、安全とは言えません。
アクセスURL例　：  XXX.XXX.XXX.XXX/(Laravelプロジェクト名)/public/

**bitnami.confを編集**
bitnami.confへ移動し、confファイルの設定をviで変更します
```sh
#ディレクトリを移動
~$ cd /opt/bitnami/apache2/conf/bitnami/

# viで編集する
~$ vi bitnami.conf
```
Documentルート、Directoryの部分を変更します。
```sh
#変更前
#DocumentRoot "/opt/bitnami/apache2/htdocs/"
#<Directory> "/opt/bitnami/apache2/htdocs/"

#変更後
DocumentRoot "/opt/bitnami/apache2/htdocs/(Laravelプロジェクト名)/public"
<Directory> "/opt/bitnami/apache2/htdocs/(Laravelプロジェクト名)/public"
```
**storageの権限変更をする**
この権限を変更する理由としては、Laravelが一時的なデータを保存し、キャッシュするために使用するためです。
```sh
#ディレクトリを移動
~$ cd /home/bitnami/htdocs/(Laravelプロジェクト名)

#権限を変更する
~$ chmod -R 777 storage bootstrap/cache
```
**Apacheを再起動する**
Apacheを再起動します。Restarted Apacheと出力されればOKです。
```sh
~$ sudo /opt/bitnami/ctlscript.sh restart apache
```

**IPアドレスでアクセスする**
先ほどbitnamiの初期画面が出ていたIPアドレスでアクセスするとLaravel初期画面が出力されます。
![スクリーンショット 2023-11-26 18.59.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246507/cf9d1b13-7ef0-cd4b-f252-5b17299c6dbe.png)

初期設定としてはここまでです。

# 4. 終わりに
Amazon Lightsailを使うと簡単にLaravelが構築することが可能になります。
もし記事の内容に不備などございましたら、コメントでお知らせいただますと幸いです。

# 5. 参考記事

https://lightsail.aws.amazon.com/ls/docs/ja_jp/articles/amazon-lightsail-ssh-using-terminal