Codeigniter4環境構築(CentOs7、nginx、php、MySQL)

#システム環境
・Codeigniter4
・CentOs7
・Nginx1.20.2
・PHP8.0
・MySQL8.0
・Composer

##必要パッケージのインストール
```:ターミナル
yum install -y epel-release yum-utils unzip curl wget bash-completion bzip2
```
インストール終了後システムのアップデートをします

```:ターミナル
yum update -y
```

##Nginxのインストール
yumリポジトリからNginxのインストールを行います
新規ファイル/etc/yum.repos.d/nginx.repoを作成して、次のように内容を記述します

```/etc/yum.repos.d/nginx.repo:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
```
<br>

リポジトリの追加ができましたらNginxをインストールします

```:ターミナル
yum install nginx
```
インストール中にインストールを継続するか確認が出る場合は[y]を入力して下さい

<br>
Nginxがインストール出来たか確認をします

```:ターミナル
nginx -v

nginx version: nginx/1.20.2  //このように出力されればOK
```

<br>
Nginxがインストールできましたので、起動と自動起動の設定を行います

```:ターミナル
systemctl start nginx     //起動

systemctl enable nginx   //自動起動
```
自身のURLにアクセスして「Welcome to nginx」と表示されればOK


##PHPのインストール
PHPモジュールのインストールを行います

```:ターミナル
yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm -y


yum install --enablerepo=remi,remi-php80 php php-fpm php-cli php-common php-curl php-gd php-mbstring php-mysqlnd php-process php-xml php-opcache php-pecl-apcu php-intl php-pecl-redis php-pecl-zip php-pear -y
```
<br>

PHPがインストール出来たか確認します

```:ターミナル
php -v
//下記のように表示される
PHP 8.0.13 (cli) (built: Nov 16 2021 18:07:21) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.13, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.13, Copyright (c), by Zend Technologies


php-fpm -v
//下記のように表示される
PHP 8.0.13 (fpm-fcgi) (built: Nov 16 2021 18:07:21)
Copyright (c) The PHP Group
Zend Engine v4.0.13, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.13, Copyright (c), by Zend Technologies
```
<br>
php-fpmの起動と自動起動の設定をします

```:ターミナル
systemctl start php-fpm


systemctl enable php-fpm
```

##Nginxの編集
php-fpmとNginxの連携します

```:ターミナル
cp -p /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.org


vim /etc/nginx/conf.d/default.conf
```

```:/etc/nginx/conf.d/default.conf
server {
  listen 80;
  server_name localhost;

  root /var/www/html;
  index index.php index.html index.htm;

  location / {
    try_files $uri $uri/ /index.php$is_args$args;
  }

  location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_index  index.php;
    include        fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param  PATH_INFO $fastcgi_path_info;
  }

  access_log /var/log/nginx/access.log;
  error_log  /var/log/nginx/error.log;
}
```

##php-fpmの編集
php-fpmの設定ファイルを編集します
編集部分のみ記載します

```:/etc/php-fpm.d/www.conf
< user = apache

> user = nginx

< group = apache

> group = nginx

< listen = 127.~~~~

> listen = /var/run/php-fpm/php-fpm.sock

< ;listen.owner = nobody
< ;listen.group = nobody
< ;listen.mode = 0660

> listen.owner = nginx
> listen.group = nginx
> listen.mode = 0666
```
<br>

設定を反映させるために再起動をします

```:ターミナル
systemctl restart php-fpm


systemctl restart nginx
```

##動作確認
phpinfoを実行するサンプルプログラムを作成してブラウザで動作確認を行います

```:ターミナル
vi /var/www/html/index.php
```
```:/var/www/html/index.php
<?php
phpinfo();
```
phpのバージョン情報がブラウザに表示されることを確認します


##MySQLのインストールとDB作成
CentOs7ではMariaDBがデフォルトとなっている為、関連ライブラリを削除します

```:ターミナル
rpm -qa | grep mariadb    //存在の確認

yum remove mariadb-libs  //削除
rm -rf /var/lib/mysql/
```
<br>
MySQLをインストールします

```:ターミナル
rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm

yum install mysql-community-server
```
<br>
起動と自動起動の設定をします

```:ターミナル
systemctl start mysqld.service    //起動

systemctl enable mysqld.service   //自動起動
```
<br>
インストール時にrootのパスワードがlogに出力されているのでgrepで確認します

```:ターミナル
grep password /var/log/mysqld.log
```

```:ターミナル
//grepで出力されるログ例
2021-10-28T02:20:42.844277Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: ZrZlt!ZNt6kS
```
上記の例だと[ZrZlt!ZNt6kS]が初期パスワードとなります
後の作業で使用するのでパスワードを控えておいて下さい
<br>
DBの基本セットアップをします

```:ターミナル
mysql_secure_installation
```
パスワードが求められますので、先ほど控えたパスワードを入力します
New password、Re-enter new passwordでrootユーザのパスワードを設定する以外はEnterキーを押していきます

<br>
DBとユーザの作成
以下の通り設定しております
　-ユーザ名：sampleuser
　-DB名：sampledb
　-パスワード：Samplepass%2021
（任意のユーザ名、DB名、パスワードを入力してください）

```:ターミナル
mysql -u root -p

CREATE DATABASE sampledb DEFAULT CHARACTER SET utf8mb4;
CREATE USER 'sampleuser'@'localhost' IDENTIFIED BY 'Samplepass%2021';
SHOW GRANTS FOR 'sampleuser'@'localhost';

exit;
```

##composerのインストール

```:ターミナル
cd /usr/local/src

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

php -r "if (hash_file('sha384', 'composer-setup.php') === '906a84df04cea2aa72f40b5f787e49f22d4c2f19492ac310e8cba5b96ac8b64115ac402c8cd292b8a03482574915d1a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

php composer-setup.php

php -r "unlink('composer-setup.php');"

mv composer.phar /usr/local/bin/composer
```
リンク切れの場合は[公式ドキュメント](https://getcomposer.org/download/)をご参照下さい
<br>

###Codeigniter4のフォルダ作成

```:ターミナル
cd /var/www/html

composer create-project codeigniter4/appstarter codeigniter4
```
<br>

codeigniter4フォルダがされたことを確認
writableディレクトリに権限を設定します(writableはログなどが書き込まれるディレクトリになるため権限を付与する必要があります)

```:/var/www/html/codeigniter4
chown nginx:nginx -R writable
```
<br>

先に設定したドキュメントルートをcodeigniter4フォルダに変更します

```:/etc/nginx/conf.d/default.conf
< root /var/www/html

> root /var/www/html/codeigniter4/public;
```
<br>

nginxの設定を変更したので再起動を行います

```:ターミナル
systemctl restart nginx
```
<br>

ブラウザに自身のURLを入力して下さい
「Welcome to Codeigniter4」の画面が表示されることを確認して下さい
![codeigniter4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372159/d7d900b0-7490-f513-a682-809c614cd4a2.png)

###codeigniterの環境設定
envファイルに環境設定がサポートされているので.envという名前のファイルにコピーして使用します

```:/var/www/html/codeigniter4
cp -p env .env
```
```:/var/www/html/codeigniter4/.env
//本番モードから開発モードに変更
< #CI_ENVIRONMENT = production

> CI_ENVIRONMENT = development

//ベースURLの設定
< #app.baseURL = ''

> app.baseURL = '自身のURL'

//DBの設定
< #database.default.hostname = localhost
< #database.default.database = ci4
< #database.default.username = root
< #database.default.password = root
< #database.default.DBDriver = MySQLi

> database.default.hostname = localhost
> database.default.database = sampledb
> database.default.username = sampleuser
> database.default.password = Samplepass%2021
> database.default.DBDriver = MySQLi
```
<br>
以上で一通り環境構築は完了です！
最後まで読んで頂きありがとうございます！


#参考記事
[Codeigniter4ドキュメント](https://codeigniter4.github.io/userguide/intro/index.html)
https://qiita.com/You_name_is_YU/items/82ea7f9fcae43649ebda