作成したPHPポートフォリオをAWSのEC2にデプロイし、公開したい。



## ローカル開発環境
+ Macbook Pro
+ MAMP(XAMPP)

## 使用技術・バージョン
+ PHP...7.4
+ MySQL... 5.7
+ Amazon Web Service 
  + EC2、RDS
+ Guthub

## 前提
  1. AWSのVPC,EC2,Route53,RDSの設定を終えており、WEBサーバのドメインを取得済である
  2. RDSに入れたMysqlのバージョンがローカルの環境に準拠している。(Udemy講座の時点でバージョン指定する)
  3. EC2のWEBサーバにSSH接続が出来るようになっている
  4. Githubに自分のポートフォリオをpush済。

### 1,2,3が終わっていない場合
- 以下のUdemy講座がおすすめ。
   + https://www.udemy.com/course/aws-and-infra/  
   + 時々セールで安くなるので、そのタイミングでの購入を推奨します。


## 手順

### EC2にSSHログインし、サーバの言語を日本語対応化

```
[MacBook-Pro]% ssh -i EC2の秘密鍵 ユーザー名@EC2インスタンスのIPアドレス

〜EC2ログイン成功〜
 
[ec2-user@ip-0-0-0-0 ~]$ sudo sed -i "s/en_US\.UTF-8/ja_JP\.UTF-8/g" /etc/sysconfig/i18n
```

### PHPのインストール

+ PHP7.4のインストール


``` 
[ec2-user@ip-0-0-0-0 ~]$ sudo amazon-linux-extras install epel 
[ec2-user@ip0-0-0-0 ~]$ sudo yum install epel-release  
[ec2-user@ip-0-0-0-0 ~]$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm 
[ec2-user@ip-0-0-0-0 ~]$ sudo yum install -y php74 php74-php php74-php-fpm 
[ec2-user@ip-0-0-0-0 ~]$ sudo amazon-linux-extras install epel 
[ec2-user@ip-0-0-0-0 ~]$ sudo ln -s /usr/bin/php74 /usr/bin/php 
[ec2-user@ip-0-0-0-0 ~]$ php -v 
[ec2-user@ip-0-0-0-0 ~]$ sudo find / -name php.ini 
[ec2-user@ip-0-0-0-0 ~]$ ln -s /etc/opt/remi/php74/php.ini /etc/php.ini 
[ec2-user@ip-0-0-0-0 ~]$ sudo ln -s /etc/opt/remi/php74/php.ini /etc/php.ini
```

###  httpd、php-fpmの起動 

+ httpd・PHPの起動 & EC2立ち上げ時に自動起動するように設定

```
 // httpの起動
 [ec2-user@ip-0-0-0-0 ~]$ sudo systemctl start httpd.service 

 // 立ち上がったか確認(runnningになっているか)
 [ec2-user@ip-0-0-0-0 ~]$ sudo systemctl status httpd.service 

 // EC2立ち上げ時に自動起動するようにする
 [ec2-user@ip-0-0-0-0 ~]$ sudo systemctl enable httpd.service

 // enabledになっているか確認
 [ec2-user@ip-10-0-10-10 ~]$ sudo systemctl is-enabled httpd.service 
 
 //以下、PHPも同様
 [ec2-user@ip-0-0-0-0 ~]$ sudo systemctl start php74-php-fpm.service 
 [ec2-user@ip-0-0-0-0 ~]$ sudo systemctl status php74-php-fpm.service 
 [ec2-user@ip-0-0-0-0 ~]$ sudo systemctl enable php74-php-fpm.service 
 [ec2-user@ip-0-0-0-0 ~]$ sudo systemctl is-enabled php74-php-fpm.service 
```



### Composerのインストール
``` 
[ec2-user@ip-0-0-0-0 ~]$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
[ec2-user@ip-0-0-0-0 ~]$ php composer-setup.php
[ec2-user@ip-0-0-0-0 ~]$ rm composer-setup.php 

// mvでファイルをbin配下に移動させ、composerコマンドを使用できるようにする
[ec2-user@ip-0-0-0-0 ~]$ sudo mv composer.phar /usr/local/bin/composer

// バージョンを確認する
[ec2-user@ip-0-0-0-0 ~]$ composer -v
```



### Document Rootの変更
+ httpd.confのDocumentRoot(=アクセス先)を任意のディレクトリに指定する(自分の場合はset num:で探して118行目にありました)

``` 
[ec2-user@ip-0-0-0-0 ~]$ sudo vi /etc/httpd/conf/httpd.conf
118 Documentroot "/var/www/html" 
```

### ローカルからポートフォリオをデプロイ(Githubを使用)

+ EC2にGitをインストールしておき、DocumentRootのフォルダの配下にcloneする。

```
[ec2-user@ip-0-0-0-0 ~]$ pwd
/var/www/html
[ec2-user@ip-0-0-0-0 ~]$ git clone https://github.com/ユーザ名/リモートリポジトリ名.git
```


### (PDOを使用者向け)EC2にてPDOをインストール→設定ファイル変更
+ mysqlnd.so  pdo_mysql.o pdo.so  があるか確認

``` 
[ec2-user@ip-0-0-0-0 ~]$ cd /opt/remi/php74/root/usr/lib64/php/modules/
[ec2-user@ip-0-0-0-0 ~]$ ls
```

+ EC2にはPDOがデフォルトで無いので各種インストール

```
[ec2-user@ip-0-0-0-0 ~]$ sudo yum install --enable repo=remi,remi-php74 php74-php-mysqlnd php74-php-pdo 
```

+ php.iniの修正

```
[ec2-user@ip-0-0-0-0 ~]$ sudo vi /etc/php.ini

// 最下行に以下を追加

extension=/opt/remi/php74/root/usr/lib64/php/modules/pdo.so
extension=/opt/remi/php74/root/usr/lib64/php/modules/mysqlnd.so
extension=/opt/remi/php74/root/usr/lib64/php/modules/pdo_mysql.so

```


### MySQLの設定

+ MySQLにログインしデータベースを作成

```
// MySQLにログイン
[ec2-user@ip-0-0-0-0 ~]$ mysql -h ホスト名(RDSのエンドポイント) -u root -p

// データベースを作成
> CREATE DATABASE データベース名 DEFAULT CHARACTER SET utf8;
```


+  任意のユーザに権限を与える。

```

GRANT ALL PRIVILEGES ON *.* TO 'ユーザ名'@'%' IDENTIFIED BY 'パスワード' WITH GRANT OPTION;

// ユーザの権限を確認
select host,user,select_priv,create_priv,insert_priv,grant_priv,account_locked from mysql.user; 
```

+ ↑追加したユーザの行が全部Nになっている(権限が無い)場合。
+ rootユーザーと同じ権限を与えてあげる。

```
// 以下でrootの権限情報が出るのでコピー
> show grants for 'root'@`%`;

// 作ったユーザに権限を与える
> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'root'@`%` WITH GRANT OPTION; 

// 権限を確認(Yになっているか)
 select host,user,select_priv,create_priv,insert_priv,grant_priv,account_locked from mysql.user;
```

### ポートフォリオサイトを表示できれば完了!


+ http://portfolio/top.php