Cloud9でLaravel5.8+PHP7.3の環境構築をして、gitHubにssh接続まで！

#はじめに
Laravel5.2+php5.6の環境を作ったときは、特に詰まりもせず環境構築ができたが
Laravel5.8+php7.3の環境構築をしたら、いくつか詰まったところがあるので、備忘録として残しておく。

詰まったポイントとしては
- php7.3を入れたのに適用されない
(pho5.6のときはDefaultで入ってたから入れる必要がなかった)
- Laravel5.2ではインストール後すぐに起動できたのに、Laravel5.8ではうまく起動しない

などなど
他にも色々詰まったので、手順を書いていく。

※投稿者はLaravelを始めたばかりで、Laravelでアプリを作成したことすらありません。
記事を書いたことすらありません。初投稿です。
助言がありましたら、コメントをお願いいたします。

##参考記事
・[AWS Cloud9 で PHP7.1、7.2 へ変更する](https://qiita.com/kidatti/items/2d6a4a24f89dc71eb66e)
・[No application encryption key has been specified.となったときの対応方法](https://qiita.com/ponsuke0531/items/197c76fcb9300d7c5f36)
・[GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~](https://qiita.com/shizuma/items/2b2f873a0034839e47ce)

参考にさせていただきました。ありがとうございます。
##目次
[前提条件](#前提条件)
[Cloud9のワークスペースを作成](#cloud9のワークスペースを作成)
[PHPとLaravelのインストール](#phpとlaravelのインストール)
[gitHubにssh接続](#githubにssh接続)
##前提条件
以下の条件を満たしておいてください。
・AWSのアカウントが存在すること

##Cloud9のワークスペースを作成
特段詰まるところではないので、簡潔に記載する

1. AWSにログイン
2. 真ん中の検索ボックスに「Cloud9」と入力すると下に「Cloud9」が出てくるので押下
3. 「Create environment」を押下
4. 「Name」にアプリ名を記入。必須
　 「Description」はアプリの説明。任意
5. Configure settingsの項目を入力していく。全てDefaultだが以下の通り。
　 「Environment」→「Create a new instance for environment (EC2)」
　 「Instance type」→「t2.micro (1 GiB RAM + 1 vCPU)」
　 「Platform」→「Amazon Linux」
　 全て選択したら「Next Step」を押下
6. 内容を確認し、「Create environment」を押下
インジケータ(くるくるするやつ)が表示されます。
3分ほど待てば、まっさらなCloud9の環境が構築されます。

##PHPとLaravelのインストール

###phpのインストール&適用
yumをアップデートする

```
$ sudo yum -y update
```

PHP 7.3をインストール

```
$ sudo yum -y install php73 php73-mbstring php73-pdo
```

この段階でphpのバージョンを確かめると

```
$ php --version
PHP 5.6.40 (cli) (built: Mar  8 2019 18:17:39) 
```

このように5.6のままなので、以下2つのコマンドを打つ

php5.6のリンクの削除

```
sudo unlink /usr/bin/php
```

php7.3のリンクの張り直し

```
sudo ln -s /etc/alternatives/php7 /usr/bin/php
```

そうすると

```
php --version
PHP 7.3.6 (cli) (built: Jun 12 2019 20:51:34) ( NTS ) 
```

php7.3になってたら完了
※参考記事だと7.2だったけど、なんとなく新しいの入れたかったから7.3にしてみた

###Laravelのインストール
composerのインストール

```
curl -sS https://getcomposer.org/installer | php
```

composerのリネーム

```
sudo mv composer.phar /usr/local/bin/composer
```

composerが入ったか、リネームできたかの確認

```
composer
```
コマンド打った次の行あたりに「COMPOSER!」と表示されたらOK

Laravelインストーラのダウンロード

```
composer global require laravel/installer
```

Laravelインストール

```
composer create-project laravel/laravel --prefer-dist アプリ名 5.8
```
※アプリ名には作りたいアプリ名を入れてね

インストールすると

```
Script @php artisan package:discover --ansi handling the post-autoload-dump event returned with error code 1
```
というエラーが出る。
artisan関連のエラーらしいが、普通に使えているため一旦スルー。

###とりあえずLaravelのインストール完了！
Laravel5.2ではインストール後に

```
cd アプリ名
php artisan start --port8080
```

と打てばLaravelが立ち上がるが、Laravel5.8では。。。

```
ec2-user:~/environment $ cd test #アプリ名をテストにしたよ
ec2-user:~/environment/test $ php artisan serve --port=8080

In database.php line 58:                                                
  Undefined class constant 'MYSQL_ATTR_SSL_CA'                                           
```
あれ。。よくわからないエラーが出た。
色々調べたらMySqlの証明書を設定する？箇所でエラーになっているらしい。
設定する証明書がある人は設定しよう。(設定の仕方は調べてください)

特に設定が不要な方は以下のファイルを開く
```アプリ名/config/database.php```
※testというアプリなら「test/config/database.php」を開く
　databaseフォルダも存在するため、間違えないように注意！

以下の行をコメントアウトする
57行～59行

```
// 'options' => array_filter([
//     PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
// ]),
```

保存したあと、以下のコマンドを打つ

```
$ php artisan serve --port=8080
Laravel development server started: <http://127.0.0.1:8080>
```

緑色の字で結果が返ってくる。「serverが立ち上がったよ！」とのことなので成功！

Laravelが立ち上がっているとWeb画面に「Laravel」と大きく表示されるので見に行く。

```上の方にある「preview」→「Preview Running Application」を押下```

###しかし。。。

```
RuntimeException
No application encryption key has been specified.
.
.
.
/home/ec2-user/environment/test/vendor/laravel/framework/src/Illuminate/Encryption/EncryptionServiceProvider.php
```

なにこれよくわかんない
とりあえずエラー内容をコピーして、サーバを閉じる
※コマンドプロンプトの画面で、「Ctrl + C」を入力すると閉じる

色々調べたら「encryption keyが未設定だから」とのこと。(よくわかんない)
以下のコマンドで「encryption key」の設定する

```
$php artisan key:generate
```

もう一度Laravelを起動する

```
$php artisan serve --port=8080
```
```上の方にある「preview」→「Preview Running Application」を押下```

「Laravel」と表示されていることを確認

##gitHubにssh接続
Cloud9にはDefaultでGitが入っている。念の為確認

```
$ git --version
git version 2.14.5
```

cloud9にgitHubのユーザ名を登録する

```
$ git config  user.name "gitHubのメールアドレス"
```
これをしないとgitHubの草が生えないみたい。

###sshキーの作成
以下のコマンドを打って、秘密鍵の作成、公開鍵の作成する

```
$ cd ~/.ssh
$ ssh-keygen -t rsa

Enter file in which to save the key (/Users/(username)/.ssh/id_rsa): #空のままEnter
Enter passphrase (empty for no passphrase): #空のままEnter
Enter same passphrase again: #空のままEnter
```

コピーする

```
cat id_rsa.pub
```
表示された内容をコピーする

###sshキーの登録
※gitHubの作業となります。
1. gitHubにログインする
2. 右上の自分のアイコンを押下→「settings」を押下
3. 「SSH and GPG keys」を押下
4. 「New SSH key」を押下
5. Title・・・わかりやすい名前をつける(cloud9用だからcloud9とかで良い気がする
　 key・・・sshキーの作成でコピーしたのを貼り付ける
6. 「Add SSH key」を押下
7. 
これでSSH接続が可能となりました！

###最後に
環境構築でつまずくことはよくあるが、cloud9+Laravelは比較的楽な方だった気がする。(ちゃんとできてるかは知らない)
日本にphpユーザが多いからか、日本語の情報がたくさんあって助かった(実際に多いか知らない)
いくつかよくわからないところがあったため、ちゃんと調べて理解を深める必要はありそう。
環境構築が完了したので、Webアプリを作れたらいいなぁと思う。