そろそろaws初めてみよか#4～Cloud9環境の整備～

# はじめに

awsと戯れる会も第4回目(^^♪
Cloud9環境でちゃんと開発できるようCloud9のインスタンスにもlaravel環境をセットアップします。

以前の記事はこちらから
- [そろそろaws初めてみよか～まずは触れてみた～](https://qiita.com/imp555sti/items/08bef8d74985c2ea1f87)
- [そろそろaws初めてみよか#2～CodeStarによるコード修正からDeployまで～](https://qiita.com/imp555sti/items/9d04bfdbc3b89c1115f9)
- [そろそろaws初めてみよか#3～RDSとの接続～](https://qiita.com/imp555sti/items/bb820cd162f21bc06462)

# phpのバージョンアップ(5.6->7.3)
Cloud9上のphpは`5.6.40`
ところが実行環境であるインスタンスのphpは`7.3.13`
って事でphpのインストールと切り替えを行います。

## php73のインストール

```console
ec2-user:~ $ sudo yum install php73 php73-gd php73-json php73-mbstring php73-mysqlnd php73-pdo php73-soap php73-xml
 :
```

## phpの切り替え(5.6->7.3)

```console
ec2-user:~ $ 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
ec2-user:~ $ sudo alternatives --config php

There are 2 programs which provide 'php'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/bin/php-5.6
   2           /usr/bin/php-7.3

Enter to keep the current selection[+], or type selection number: 2
ec2-user:~ $ php -v
PHP 7.3.13 (cli) (built: Jan 21 2020 19:15:52) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.13, Copyright (c) 1998-2018 Zend Technologies
ec2-user:~ $ 
```

# composerのインストール
次に必要となってくるcomposerのインストールを行います。
公式の手順([https://getcomposer.org/download/](https://getcomposer.org/download/))に則って

```console
ec2-user:~ $ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
ec2-user:~ $ php -r "if (hash_file('sha384', 'composer-setup.php') === 'c5b9b6d368201a9db6f74e2611495f369991b72d9c8cbd3ffbc63edff210eb73d46ffbfce88669ad33695ef77dc76976') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Installer verified
ec2-user:~ $ php composer-setup.php
All settings correct for using Composer
Downloading...

Composer (version 1.9.3) successfully installed to: /home/ec2-user/composer.phar
Use it: php composer.phar

ec2-user:~ $ php -r "unlink('composer-setup.php');"
ec2-user:~ $ ls
composer.phar  environment  node_modules  package-lock.json
```

# laravelなどのインストール
プロジェクトフォルダには`composer.json`がありますので、以下のコマンドで必要なモジュールをインストールします。
ちなみにGitからCloneされたソースは`~\environment`にあります。

```console
ec2-user:~ $ 
ec2-user:~ $ cd environment/
ec2-user:~/environment $ cd php-laravel
ec2-user:~/environment/php-laravel (master) $ ls
app          artisan    buildspec.yml  composer.lock  database     index.php     phpunit.xml  README.md  routes   server.php  template-configuration.json  tests
appspec.yml  bootstrap  composer.json  config         gulpfile.js  package.json  public       resources  scripts  storage     template.yml

ec2-user:~/environment/php-laravel (master) $ ~/composer.phar install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 63 installs, 0 updates, 0 removals
  - Installing kylekatarnls/update-helper (1.2.0): Downloading (100%)         
  - Installing jakub-onderka/php-console-color (v0.2): Downloading (100%)         
  - Installing symfony/polyfill-ctype (v1.12.0): Downloading (100%)         
  - Installing vlucas/phpdotenv (v2.6.1): Downloading (100%)         
  - Installing symfony/polyfill-mbstring (v1.12.0): Downloading (100%)         
  - Installing symfony/var-dumper (v3.1.10): Downloading (100%)         
  - Installing symfony/translation (v3.1.10): Downloading (100%)         
  - Installing symfony/routing (v3.1.10): Downloading (100%)         
  - Installing symfony/process (v3.1.10): Downloading (100%)         
  - Installing symfony/http-foundation (v3.1.10): Downloading (100%)         
  - Installing symfony/event-dispatcher (v3.4.30): Downloading (100%)         
  - Installing psr/log (1.1.0): Downloading (100%)         
  - Installing symfony/debug (v3.1.10): Downloading (100%)         
  - Installing symfony/http-kernel (v3.1.10): Downloading (100%)         
  - Installing symfony/finder (v3.1.10): Downloading (100%)         
  - Installing symfony/console (v3.1.10): Downloading (100%)         
  - Installing swiftmailer/swiftmailer (v5.4.12): Downloading (100%)         
  - Installing paragonie/random_compat (v2.0.18): Downloading (100%)         
  - Installing ramsey/uuid (3.8.0): Downloading (100%)         
  - Installing nikic/php-parser (v3.1.5): Downloading (100%)         
  - Installing jakub-onderka/php-console-highlighter (v0.3.2): Downloading (100%)         
  - Installing dnoegel/php-xdg-base-dir (0.1): Downloading (100%)         
  - Installing psy/psysh (v0.8.18): Downloading (100%)         
  - Installing nesbot/carbon (1.39.0): Downloading (100%)         
  - Installing mtdowling/cron-expression (v1.2.1): Downloading (100%)         
  - Installing monolog/monolog (1.24.0): Downloading (100%)         
  - Installing league/flysystem (1.0.53): Downloading (100%)         
  - Installing symfony/polyfill-util (v1.12.0): Downloading (100%)         
  - Installing symfony/polyfill-php56 (v1.12.0): Downloading (100%)         
  - Installing jeremeamia/superclosure (2.4.0): Downloading (100%)         
  - Installing doctrine/inflector (v1.3.0): Downloading (100%)         
  - Installing classpreloader/classpreloader (3.2.0): Downloading (100%)         
  - Installing laravel/framework (v5.3.31): Downloading (100%)         
  - Installing fzaninotto/faker (v1.8.0): Downloading (100%)         
  - Installing hamcrest/hamcrest-php (v1.2.2): Downloading (100%)         
  - Installing mockery/mockery (0.9.11): Downloading (100%)         
  - Installing webmozart/assert (1.4.0): Downloading (100%)         
  - Installing phpdocumentor/reflection-common (1.0.1): Downloading (100%)         
  - Installing phpdocumentor/type-resolver (0.4.0): Downloading (100%)         
  - Installing phpdocumentor/reflection-docblock (4.3.1): Downloading (100%)         
  - Installing phpunit/php-token-stream (2.0.2): Downloading (100%)         
  - Installing symfony/yaml (v3.3.18): Downloading (100%)         
  - Installing sebastian/version (2.0.1): Downloading (100%)         
  - Installing sebastian/resource-operations (1.0.0): Downloading (100%)         
  - Installing sebastian/recursion-context (2.0.0): Downloading (100%)         
  - Installing sebastian/object-enumerator (2.0.1): Downloading (100%)         
  - Installing sebastian/global-state (1.1.1): Downloading (100%)         
  - Installing sebastian/exporter (2.0.0): Downloading (100%)         
  - Installing sebastian/environment (2.0.0): Downloading (100%)         
  - Installing sebastian/diff (1.4.3): Downloading (100%)         
  - Installing sebastian/comparator (1.2.4): Downloading (100%)         
  - Installing phpunit/php-text-template (1.2.1): Downloading (100%)         
  - Installing doctrine/instantiator (1.2.0): Downloading (100%)         
  - Installing phpunit/phpunit-mock-objects (3.4.4): Downloading (100%)         
  - Installing phpunit/php-timer (1.0.9): Downloading (100%)         
  - Installing phpunit/php-file-iterator (1.4.5): Downloading (100%)         
  - Installing sebastian/code-unit-reverse-lookup (1.0.1): Downloading (100%)         
  - Installing phpunit/php-code-coverage (4.0.8): Downloading (100%)         
  - Installing phpspec/prophecy (1.8.1): Downloading (100%)         
  - Installing myclabs/deep-copy (1.9.3): Downloading (100%)         
  - Installing phpunit/phpunit (5.7.27): Downloading (100%)         
  - Installing symfony/css-selector (v3.1.10): Downloading (100%)         
  - Installing symfony/dom-crawler (v3.1.10): Downloading (100%)         
symfony/var-dumper suggests installing ext-symfony_debug
symfony/translation suggests installing symfony/config
symfony/routing suggests installing doctrine/annotations (For using the annotation loader)
symfony/routing suggests installing symfony/config (For using the all-in-one router or any loader)
symfony/routing suggests installing symfony/dependency-injection (For loading routes from a service)
symfony/routing suggests installing symfony/expression-language (For using expression matching)
symfony/event-dispatcher suggests installing symfony/dependency-injection
symfony/http-kernel suggests installing symfony/browser-kit
symfony/http-kernel suggests installing symfony/class-loader
symfony/http-kernel suggests installing symfony/config
symfony/http-kernel suggests installing symfony/dependency-injection
paragonie/random_compat suggests installing ext-libsodium (Provides a modern crypto API that can be used to generate random bytes.)
ramsey/uuid suggests installing ext-libsodium (Provides the PECL libsodium extension for use with the SodiumRandomGenerator)
ramsey/uuid suggests installing ext-uuid (Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator)
ramsey/uuid suggests installing ircmaxell/random-lib (Provides RandomLib for use with the RandomLibAdapter)
ramsey/uuid suggests installing moontoast/math (Provides support for converting UUID to 128-bit integer (in string form).)
ramsey/uuid suggests installing ramsey/uuid-console (A console application for generating UUIDs with ramsey/uuid)
ramsey/uuid suggests installing ramsey/uuid-doctrine (Allows the use of Ramsey\Uuid\Uuid as Doctrine field type.)
psy/psysh suggests installing ext-pdo-sqlite (The doc command requires SQLite to work.)
psy/psysh suggests installing hoa/console (A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit.)
monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB)
monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server)
monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required))
monolog/monolog suggests installing ext-mongo (Allow sending log messages to a MongoDB server)
monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server)
monolog/monolog suggests installing mongodb/mongodb (Allow sending log messages to a MongoDB server via PHP Driver)
monolog/monolog suggests installing php-amqplib/php-amqplib (Allow sending log messages to an AMQP server using php-amqplib)
monolog/monolog suggests installing php-console/php-console (Allow sending log messages to Google Chrome)
monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar)
monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server)
monolog/monolog suggests installing sentry/sentry (Allow sending log messages to a Sentry server)
league/flysystem suggests installing league/flysystem-aws-s3-v2 (Allows you to use S3 storage with AWS SDK v2)
league/flysystem suggests installing league/flysystem-aws-s3-v3 (Allows you to use S3 storage with AWS SDK v3)
league/flysystem suggests installing league/flysystem-azure (Allows you to use Windows Azure Blob storage)
league/flysystem suggests installing league/flysystem-cached-adapter (Flysystem adapter decorator for metadata caching)
league/flysystem suggests installing league/flysystem-eventable-filesystem (Allows you to use EventableFilesystem)
league/flysystem suggests installing league/flysystem-rackspace (Allows you to use Rackspace Cloud Files)
league/flysystem suggests installing league/flysystem-sftp (Allows you to use SFTP server storage via phpseclib)
league/flysystem suggests installing league/flysystem-webdav (Allows you to use WebDAV storage)
league/flysystem suggests installing league/flysystem-ziparchive (Allows you to use ZipArchive adapter)
league/flysystem suggests installing spatie/flysystem-dropbox (Allows you to use Dropbox storage)
league/flysystem suggests installing srmklive/flysystem-dropbox-v2 (Allows you to use Dropbox storage for PHP 5 applications)
laravel/framework suggests installing aws/aws-sdk-php (Required to use the SQS queue driver and SES mail driver (~3.0).)
laravel/framework suggests installing doctrine/dbal (Required to rename columns and drop SQLite columns (~2.4).)
laravel/framework suggests installing guzzlehttp/guzzle (Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~5.3|~6.0).)
laravel/framework suggests installing league/flysystem-aws-s3-v3 (Required to use the Flysystem S3 driver (~1.0).)
laravel/framework suggests installing league/flysystem-rackspace (Required to use the Flysystem Rackspace driver (~1.0).)
laravel/framework suggests installing pda/pheanstalk (Required to use the beanstalk queue driver (~3.0).)
laravel/framework suggests installing predis/predis (Required to use the redis cache and queue drivers (~1.0).)
laravel/framework suggests installing pusher/pusher-php-server (Required to use the Pusher broadcast driver (~2.0).)
laravel/framework suggests installing symfony/psr-http-message-bridge (Required to use psr7 bridging features (0.2.*).)
sebastian/global-state suggests installing ext-uopz (*)
phpunit/php-code-coverage suggests installing ext-xdebug (^2.5.1)
phpunit/phpunit suggests installing ext-xdebug (*)
phpunit/phpunit suggests installing phpunit/php-invoker (~1.1)
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
Generating autoload files
Carbon 1 is deprecated, see how to migrate to Carbon 2.
https://carbon.nesbot.com/docs/#api-carbon-2
    You can run './vendor/bin/upgrade-carbon' to get help in updating carbon and other frameworks and libraries that depend on it.
> Illuminate\Foundation\ComposerScripts::postInstall
> php artisan optimize
Generating optimized class loader
Compiling common classes
ec2-user:~/environment/php-laravel (master) $ 
```

# .envの準備
開発用に.envを作成します。
コマンドでも良いのですがせっかくのIDEですので`.env.example`をコピー＆ペーストして`.env`を作成
以下の部分を書き換えました。

```config
DB_CONNECTION=mysql
DB_HOST=laravel-db.culgyynq9ap1.us-east-2.rds.amazonaws.com
DB_PORT=3306
DB_DATABASE=laravel_dev
DB_USERNAME=admin
DB_PASSWORD=***********
```

DBはインスタンスは本番と同様でデータベースを分ける想定です。
インスタンスから分けたい場合は、RDSで新たにDBを作成しセキュリティグループの設定を行ってください。
参考）[そろそろaws初めてみよか#3～RDSとの接続～](https://qiita.com/imp555sti/items/bb820cd162f21bc06462)

# 開発用データベースの作成

例によってインスタンスにはmysqlがインストールされていませんのでまずはインストールします。

```console
ec2-user:~/environment/php-laravel (master) $ sudo yum install -y mysql
Loaded plugins: priorities, update-motd, upgrade-helper
amzn-main                                                                                                                                                                                                                     | 2.1 kB  00:00:00     
amzn-updates                                                                                                                                                                                                                  | 2.5 kB  00:00:00     
1073 packages excluded due to repository priority protections
Resolving Dependencies
--> Running transaction check
---> Package mysql.noarch 0:5.5-1.6.amzn1 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=====================================================================================================================================================================================================================================================
 Package                                                 Arch                                                     Version                                                          Repository                                                   Size
=====================================================================================================================================================================================================================================================
Installing:
 mysql                                                   noarch                                                   5.5-1.6.amzn1                                                    amzn-main                                                   2.7 k

Transaction Summary
=====================================================================================================================================================================================================================================================
Install  1 Package

Total download size: 2.7 k
Installed size: 0  
Downloading packages:
mysql-5.5-1.6.amzn1.noarch.rpm                                                                                                                                                                                                | 2.7 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : mysql-5.5-1.6.amzn1.noarch                                                                                                                                                                                                        1/1 
  Verifying  : mysql-5.5-1.6.amzn1.noarch                                                                                                                                                                                                        1/1 

Installed:
  mysql.noarch 0:5.5-1.6.amzn1                                                                                                                                                                                                                       

Complete!
```

次にデータベースに接続し、データベースを作成します。
※セキュリティグループにCloud9インスタンスからMariaDBへの接続を許可する設定を入れておいてください。
参考）[そろそろaws初めてみよか#3～RDSとの接続～](https://qiita.com/imp555sti/items/bb820cd162f21bc06462)


```console
ec2-user:~/environment/php-laravel (master) $ mysql -u admin -p -h laravel-db.culgyynq9ap1.us-east-2.rds.amazonaws.com
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 19
Server version: 5.5.5-10.2.21-MariaDB-log Source distribution

Copyright (c) 2000, 2018, 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> CREATE DATABASE laravel_dev DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;                                                                                                                                                               
Query OK, 1 row affected (0.01 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| innodb             |
| laravel            |
| laravel_dev        |
| mysql              |
| performance_schema |
+--------------------+
6 rows in set (0.00 sec)

mysql> \q
Bye
```

# php artisan migrateをしてみる

```console
ec2-user:~/environment/php-laravel (master) $ php artisan migrate
Migration table created successfully.
Migrated: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_100000_create_password_resets_table
```


これで開発できますね^^

と思ったのですが…

php artisan serveができない...。
一難去ってまた一難。

一体どうやってaws上でlaravelプロジェクトを開発していくんでしょうか…。