# cloud9を使ったlaravel環境構築
### AWSアカウントを作成する
アカウント登録にクレカ登録、電話番号認証等必要になるので、ちょっと面倒ですが・・。cloud9の利用は無料ですが、サーバーをたてるとサーバーの使用料がかかります。でも登録から12ヶ月間は自動で無料枠が付与されます。詳しくは調べてみてください。
### AWS Cloud 9上に新たな環境を作成
アカウントを作成したら、cloud9で環境を作成します。
1. create environmentをクリック

2. Nameで適当に名前つけて、次に進む

3. Configure settingsはデフォルトのままでいいので、そのまま次へ進む
4. [create environment]を押して、環境が作成されます。
5. 環境作成されると、こんな画面に。

左側がフォルダ構成、ファイルクリックすると画面中央に表示されます(今AWS Cloud9と表示されているところ)。下にあるのがコマンド操作部分(ec2-user:~/environment $ と表示されているところ)。
次から、コマンドラインで環境構築していきます。
### PHPのバージョンを7.1に上げる
PHPのバージョン確認。
```
$ php -v
PHP 5.6.40 (cli) (built: Oct 31 2019 20:35:16)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Xdebug v2.5.5, Copyright (c) 2002-2017, by Derick Rethans
```
デフォルトのPHPのバージョンが5.6なので、7.1にあげます。下記のコマンドを実行します。
```
$ sudo yum -y update
$ sudo yum -y install php71 php71-mbstring php71-pdo php71-intl php71-pdo_mysql php71-pdo_pgsql php71-xdebug php71-opcache php71-apcu
$ sudo unlink /usr/bin/php
$ sudo ln -s /etc/alternatives/php7 /usr/bin/php
```
↑2行目でmysqlのPDOドライバをインストールしています。
cloud9でのlaravel環境構築を紹介している記事で、エラーになる場合があって、それがこのドライバがインストールされていないのが原因でした。デフォルトだと、`pdo_sqlite`しか入っていないです。
```
$ php -m | grep pdo #ドライバの確認
pdo_mysql
pdo_pgsql
pdo_sqlite
```
### Composerのインストール
```
$ curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer
$ composer #確認用:composerの大きな文字が表示されてればOK
```
### laravelのインストール
```
$ composer global require "laravel/installer"
```
メモリ不足でインストールができない時(composerコマンドでエラーになる)
https://qiita.com/takaaki-mizuno/items/fc1b9ef513609cab7eb9
### laravelプロジェクトの作成
```
$ composer create-project laravel/laravel [プロジェクト名]
```
バージョンを指定しない場合、最新バージョンで作成されます。指定する場合は、プロジェクト名の後に例えば`5.5.*`などとつけて指定します。
```
ec2-user:~/environment $ ls
laravel-tdd README.md
```
environment直下に、プロジェクト(laravel-tdd)が作成されています。
### mysqlのバージョンをあげる
```
ec2-user:~/environment $ mysql --version
mysql Ver 14.14 Distrib 5.5.62, for Linux (x86_64) using readline 5.1
```
↑デフォルトだと5.5で、migrationでエラーになることがあるので、バージョンをあげます。下記コマンドを実行します。
```
$ sudo service mysqld stop
$ sudo yum -y erase mysql-config mysql55-server mysql55-libs mysql55
$ sudo yum -y install mysql57-server mysql57
$ sudo service mysqld start
```
### mysqlでDBを作成する
mysqlにログインします。パスワードは空白のままでエンター。
```
ec2-user:~/environment $ mysql -uroot -p
Enter password: #空欄
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.30 MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
```
プロジェクト用のDBを作成します。今回はsampleという名前で作成します。
```
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
mysql> create database sample;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sample |
| sys |
+--------------------+
5 rows in set (0.00 sec)
```
作成されました。
### laravelの環境ファイルのDB設定を変更する
exitでmysqlから一旦ログアウトします。プロジェクト下に移動し、`.env`という隠しファイルがあるので、それを編集します。
```
ec2-user:~/environment $ ls
laravel-tdd README.md
ec2-user:~/environment $ cd laravel-tdd
ec2-user:~/environment/laravel-tdd $ ls -a
. artisan composer.lock .editorconfig .gitattributes phpunit.xml resources storage vendor
.. bootstrap config .env .gitignore public routes .styleci.yml webpack.mix.js
app composer.json database .env.example package.json readme.md server.php tests
```

ファイル構成欄の歯車マークをクリックすると、[show hidden files]という部分があるので、ここにチェックを入れると隠しファイルも表示されます。`.env`ファイルを開きます。
DBの設定のところを、下記のように書き換えます。
```
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=sample
DB_USERNAME=root
DB_PASSWORD=
```
保存したら、artisanコマンドでmigrateできるか確認してみます。
```
ec2-user:~/environment/laravel-tdd $ php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (0.06 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (0.03 seconds)
ec2-user:~/environment/laravel-tdd $
```
↑こんな感じで実行できれば、DBとの紐付けが成功しています。先ほど作ったDBみてみると、新しくテーブルが作成されています。
```
mysql> use sample
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+------------------+
| Tables_in_sample |
+------------------+
| migrations |
| password_resets |
| users |
+------------------+
3 rows in set (0.01 sec)
mysql>
```
最後に、ブラウザで表示確認してみます。まず、ローカルサーバーをたてて、
```
ec2-user:~/environment/laravel-tdd $ php artisan serve --port=8080
Laravel development server started: <http://127.0.0.1:8080>
```
[preview running application]をクリックすると、ブラウザが開きます。

laravelの画面が表示されてたらOKです!
