Amazon Lightsail（LAMP）でLaravelを動かす

Amazon LightsailのLAMP(PHP7)イメージでLaravelを動かす方法。
このインスタンスは一通り必要なものがインストールされた状態で起動しますので、それらを利用してなるべくかんたんに動かす方法です。

# インストール
SSHなどで接続して任意のディレクトリでインストールします。
（今回は、`/opt/bitnami/apache2/htdocs/laravel/`にしました。）

## composerを最新にする

```bash
$ sudo /opt/bitnami/php/bin/composer.phar self-update
```

## インストール
インストールしたい場所に移動して、インストールコマンド。

```bash
$ cd /opt/bitnami/apache2/htdocs/
$ composer create-project --prefer-dist laravel/laravel laravel
```

最後の`laravel`は任意のインストールディレクトリ名です。変更するときはこんなです。

```
$ composer create-project --prefer-dist laravel/laravel [任意のディレクトリ名]
```

## ドキュメントルートの変更

デフォルトでは、`/opt/bitnami/apache2/htdocs` になっているのでLaravelインストールしたディレクトリに変更します。
設定ファイルは`/opt/bitnami/apache2/conf/bitnami/bitnami.conf`にあります。
Laravelのデフォルトでは、インストールディレクトリ直下の`public`がルートになるので、それを指定します。

```conf:bitnami.conf
〜

DocumentRoot "/opt/bitnami/apache2/htdocs/laravel/public"
<Directory "/opt/bitnami/apache2/htdocs/laravel/public">

〜
```
↑を修正してApach再起動
bitnamiで構築されているので、通常のUbuntuのhttpd再起動コマンドとちょっと違うので注意。

```
$ sudo /opt/bitnami/ctlscript.sh restart apache
```

あとは、IPアドレスなどでアクセスしてみて画面が開けばOK

<img width="300" alt="スクリーンショット 2019-08-01 11.38.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73833/883b9eee-3ea8-cb02-56c3-ed746be854a1.png">

### 動かないとき
パーミッション、ファイル所有者に権限がなくてエラーになる場合があります。
所有者を、PHP実行グループに入れてあげればよいので、Laravelインストールディレクトリに対して所有者グループを変更します。
インストールディレクトリ全体に対して所有者変更。

```bash
$ cd /opt/bitnami/apache2/htdocs
$ sudo chown -R bitnami:daemon laravel/*
```

# MySQLの設定

LAMPスタックなので、MySQLもインストールされています。

## パスワードの確認
インストール＆設定済みのMySQLのrootパスワードが`/home/bitnami/bitnami_credentials`に記述されています。

```bash
$ cat /home/bitnami/bitnami_credentials
Welcome to the Bitnami LAMP Stack

******************************************************************************
The default password is 'ここにDBパスワード'.
******************************************************************************

You can also use this password to access the databases and any other component the stack includes.

・・・
```

上記のところにパスワードが記述されているのでメモします。

## データベース作成

MySQLでLaravelで使用するパスワードを作成します。

```bash
$ mysql -u root -p
Enter password: DBパスワードを入力
```

データベースを作成。今回は`laravel_db`という名前で作成しました。

```bash
mysql > create database laravel_db;
```

## Laravelにデータベースの設定

Laravelインストールディレクトリの`.env`を編集

```text:.env
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=root
DB_PASSWORD=[DBパスワード]
```
- とりあえず動かすのが目的なのでrootを使います
- LightsailのMySQLはデフォルトの状態だとrootに`127.0.0.1`が許可されていないので、DB_HOSTもlocalhostに書き換えました。

（今回は動かすことが目的なので簡易的に）

あとは、DBへの接続を確認します。
Laravelのインストールディレクトリで

```bash
$ php artisan migrate
```
で成功すればOK
これでLaravel一通り使えます。

# フロントエンド環境

Laravelなので、フロントエンド環境も構築したいですね。
ただ、**LAMPスタック**なので、フロントエンドの方はあまり充実していません。
Yarnが動作するところまでを紹介します。


## node.jsを最新にする。

```bash
$ curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
$ sudo apt install -y nodejs
```
最新版のリポジトリは、[https://github.com/nodesource/distributions/blob/master/README.md#installation-instructions](https://github.com/nodesource/distributions/blob/master/README.md#installation-instructions)で。

## Yarnのインストール

```bash
$ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
$ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
$ sudo apt update
$ sudo apt install -y yarn
```

以上でYarnが動くので、Laravelインストールディレクトリで

```bash
$ yarn install
```
パッケージをインストール

```bash
$ yarn run dev
```
起動ができればOK

以上です。
これで一通りのLaravel環境できるんじゃないかと思います。
一度動いたら、スナップショットに保存してしまえば、あとはいくつでも使い回せて便利です。

# 感想

- 格安でLaravel実行環境が手に入ります。
- ある程度のものがインストール済みなので面倒が少ない
- それでいて、自由度も高いです。
- データベースなどは、お金に余裕があればLightsailデータベースなども使えるし、サーバ構成も柔軟に変更できます。
- スナップショットなどで複製やバックアップなども自由にできます。
- 最初だけ少し苦労しちゃえば、あとはダッシュボードからスナップショット複製するとかでよいので、こういうところが嬉しい。
- 他のAWSサービスとの連携もいろいろできそう。
- いろいろ嬉しくて楽しい。

データベースについて、今回はかんたんに動かすことを念頭においたのでroot@localhostユーザーを使いましたが、本番のときは別途ユーザーを作ってください。あとrootパスワードも変更したほうがいいかも。
また、ユーザを作るだけじゃなく、それを外部のDBクライアントなどから接続して操作するための方法はこちらで紹介しています。
https://qiita.com/shin1kt/items/326a6a795ed135f61471