Cloud9でlaravel開発環境の構築

#背景
せっかくのCloud9でlaravelの開発を進めていく。

#思ったこと
Cloud9からはenvironment配下しか参照できないのか？
とりあえずenvironment配下にlaravelプロジェクトを作成する。

#create-projectを実行

~~~
environment]$ ~/composer.phar create-project --prefer-dist laravel/laravel test-laravel
~~~

エラー出ました。

~~~
The following exception is caused by a lack of memory or swap, or not having swap configured
Check https://getcomposer.org/doc/articles/troubleshooting.md#proc-open-fork-failed-errors for details
~~~

メモリが足りないらしい。対処は
[Composerでメモリエラーが発生したときの対処方法【詳細解説】](https://evisu0414.com/engineer/engineer010/)を参考にさせていただきました。

php.iniのメモリ設定を変更。

~~~
$ sudo vi /etc/php.ini

memory_limit = 512M
~~~

apache再起動。

~~~
$ sudo systemctl restart httpd
~~~

確認。

~~~
$ php -r 'phpinfo();' | grep memory_limit

memory_limit => 512M => 512M
~~~

スワップファイルの作成

~~~
$ sudo -s /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024

$ sudo -s /sbin/mkswap /var/swap.1
$ sudo -s /sbin/swapon /var/swap.1
~~~

###できました。
![test-develop - AWS Cloud9 2019-01-24 01-35-31.png](https://qiita-image-store.s3.amazonaws.com/0/336536/60949eca-d873-6ba9-0a7b-626239fe0a2a.png)

#しかし
![403 Forbidden 2019-01-24 02-12-22.png](https://qiita-image-store.s3.amazonaws.com/0/336536/024ac220-bf9c-7c9f-e64d-d3235559a624.png)

permissionで引っかかる。

###対処

[ここ](https://qiita.com/atto/items/e1effd28c212c3829cb0)のpermissionの設定は全て行う。

あとは、ec2-userのpermissionの設定も変更する。

~~~
$　sudo chown -R ec2-user:www /home/ec2-user

$　sudo chmod 2775 /home/ec2-user
~~~

###出ました。

![Laravel 2019-01-24 02-19-22.png](https://qiita-image-store.s3.amazonaws.com/0/336536/e7a6c4b5-32fc-0a5a-6ffb-47a81e5e67a7.png)

#さらに
このあと朝になって、セッション切れて再度SSHで接続したら、

~~~
ssh -i "xxx.pem" ec2-user@xx.xx.xx.xx
ec2-user@xx.xx.xx.xx: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
~~~

接続できません。Permission変更しちゃったからssh接続できなくなった。
詰んだか、、、と思い半泣きで復旧方法を探す。

調べたら、接続できない原因は公開鍵のPermissionは700でないといけない。
また、ec2-userのPermissionも700でないといけない。
セキュリティー考えたらそうだ。

開発用の別user作るべきですね。。。

###なんと復旧できるみたい

[参考：EC2でsshログインできなくなったとき（自爆）](https://qiita.com/mk34/items/80689cb1b514e95e0a02)

作業用インスタンスでPermissionを戻す。

~~~
$　sudo chown -R ec2-user:ec2-user /home/ec2-user

$ sudo chmod 700 ec2-user

念のため鍵のPermissionも設定
$ chmod 0700 ~/.ssh
$ chmod 0600 ~/.ssh/authorized_keys
~~~

で、元々のインスタンスにアタッチし直す。

※参考にした手順では、「/dev/sda1」を入力とありましたが設定するとインスタンスが起動できない。「/dev/xvda」を設定したら起動できた。

![EC2 Management Console 2019-01-25 07-57-02.png](https://qiita-image-store.s3.amazonaws.com/0/336536/5026f748-b5af-b1cb-1494-7bb80ded5385.png)


###再度sshしたら接続できました。

~~~
$ ssh -i "xxx.pem" ec2-user@xx.xx.xx.xx
Last login: Thu Jan 24 17:02:14 2019 from softbank126209053044.bbtec.net

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
~~~

#ちゃんと見たら、Could9のCreate environmentの際にパス指定ができました。

![Create a new environment 2019-01-25 07-34-30.png](https://qiita-image-store.s3.amazonaws.com/0/336536/6c665832-116a-adf9-d1ad-2e67ff3fd41b.png)

これで、最初の疑問について解決。
/var/www配下にenvironomentを作成する。

これでcludo9でlaravel開発できそう。
![test-dev - AWS Cloud9 2019-01-25 08-05-20.png](https://qiita-image-store.s3.amazonaws.com/0/336536/d119fc18-e2ab-a597-6bd1-98069318a884.png)

バーチャルホストの設定を変更するとトップページも表示されました。
![Laravel 2019-01-24 02-19-22.png](https://qiita-image-store.s3.amazonaws.com/0/336536/3a9544c8-3054-f6a9-db98-aa8705e7bfd7.png)