LAMP環境にcodeigniter4を使ったWEBアプリのデプロイ

# 初めに
デプロイに4時間半かかったため、忘れないよう備忘録として残します。
初めて扱うものばかりで、間違いも多いかもしれません。誤りがあれば、コメントで教えていただけると嬉しいです。
# 動作環境
* Amazon Linux 2023
* MariaDB 10.5.25
* Apache 2.4.62
* php 8.3.10
# LinuxにLAMPをインストール
[Amazon Linux 2023にLAMPサーバーをインストールする](https://docs.aws.amazon.com/ja_jp/linux/al2023/ug/ec2-lamp-amazon-linux-2023.html)
こちらのサイトを利用してEC2でLinuxにLAMP環境を作りました。
# デプロイ
https://qiita.com/YKhojo/items/e2d1405ca43a7dad0120#apache%E3%81%AE%E8%A8%AD%E5%AE%9A

https://qiita.com/sakashin10291029/items/07aaa55747017adb9f5f

こちらの2つの記事を参考にしました。
## git clone
Gitをインストール
```
$ sudo yum -y install git
```


クローンするフォルダに移動して不要なフォルダを削除
```
$ cd /var/www

$ rm -r html
$ rm -r cgi-bin
```
Gitのリポジトリをクローン
```
$ git clone [URL] .
```
ユーザーネームとパスワードを入力
```
Username for 'https://github.com': ユーザーネーム
Password for 'https://ユーザーネーム@github.com': Githubで作成したトークン
```
トークンは[こちら](https://dev.classmethod.jp/articles/github-personal-access-tokens/)のサイトを参考にしました。


## Apacheの設定
/etc/httpd/confに移動してhttpd.confの内容を書き換えます。
```
$ cd /etc/httpd/conf
$ vi httpd.conf
```
ここでviでファイルを開いたはいいもののLinuxのコマンドを全然知らなくて編集ができませんでした。なのでこちらの

https://qiita.com/yokoba569/items/98f595574353828e6de9

の記事を参考にしながら編集しました。

---
119行目付近でドキュメントルートを変更し、アクセスがあった際にアプリ直下のpublicディレクトリにファイルを探しにいってくれるようにします。
131行目付近、151行目付近でpublicディレクトリ内での設定の変更を有効にします。
最終行でmod_rewriteを許可することでURLの書き換えを可能にします。
参考:https://qiita.com/sakashin10291029/items/07aaa55747017adb9f5f
```
#119行目付近　
DocumentRoot "/var/www/[codeigniterのプロジェクト名]/public"
#131行目付近
<Directory "/var/www/[codeigniterのプロジェクト名]/public">
#151行目付近
AllowOverride All
#最終行に追加
LoadModule rewrite_module modules/mod_rewrite.so

```
Apacheを再起動
```
$ sudo systemctl restart httpd
```
## composerのインストール
composerをインストールするフォルダに移動。
/usr/local/bin/にインストールしてファイル名を変更することで、どこからでもcomposerコマンド一つで呼び出し可能にします。
```
$ cd /usr/local/bin/

$ sudo php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ sudo php -r "if (hash_file('sha384', 'composer-setup.php') === '[ここにconposerのhashwoを入れる]') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
$ sudo php composer-setup.php
$ sudo php -r "unlink('composer-setup.php');"
$ sudo mv composer.phar composer
```
3行目のhashは[公式サイト](https://getcomposer.org/download/)からコピーして利用します。
インストールはComposerの[公式サイト](https://getcomposer.org/download/)にもコードが載っています。

## データベースの設定
```
$ mysql -u root -p
Enter password: 
```
パスワードはLAMPをインストールで設定していた場合は設定したパスワードを入力。
設定していない場合は入力せずにEnterを押します。


初めに新しいユーザーを作ります。
[こちら](https://www.digitalocean.com/community/tutorials/how-to-create-a-new-user-and-grant-permissions-in-mysql-ja)のサイトを参考にしました。
```
MariaDB [(none)]>  CREATE USER 'ユーザーネーム'@'localhost' IDENTIFIED BY 'パスワード';
#権限を設定
MariaDB [(none)]>  GRANT ALL PRIVILEGES ON * . * TO 'ユーザーネーム'@'localhost';
```
続いてデータベースを作ります。

```
MariaDB [(none)]> CREATE DATABASE データベース名

MariaDB [(none)]> use データベース名;
```
作成したらシステムに必要なテーブルを各自で作成してください。



## 権限の設定とパッケージをインストール
codeigniterのwritableに権限を設定
```
$ chmod -R 775 /var/www/[codeigniterのプロジェクト名]/writable
```
パッケージをインストール
```
$ cd /var/www/[codeigniterのプロジェクト名]
composer install
```

## .envの設定
envを元に.envを作成
```
$ cd /var/www/[codeigniterのプロジェクト名]
$ cp env .env
$ vi .env
```
baseURLとデータベースの設定
```
#約23行目
app.baseURL = 'http://[パブリック IPv4 アドレス]'

#codeigniterのデータベースの設定でtestsを利用している場合
#約42行目
database.tests.hostname = localhost
database.tests.database = データベース名
database.tests.username = ユーザーネーム
database.tests.password = パスワード
database.tests.DBDriver = MySQLi
database.tests.DBPrefix =
database.tests.charset = utf8mb4
database.tests.DBCollat = utf8mb4_general_ci
database.tests.port = 3306

#codeigniterのデータベースの設定でdefaultを利用している場合
#約33行目
database.default.hostname = localhost
database.default.database = データベース名
database.default.username = ユーザーネーム
database.default.password = パスワード
database.default.DBDriver = MySQLi
database.default.DBPrefix =
database.default.port = 3306
```

## エラー
このままだと Class "Locale" not found とエラーを吐いてしまうのでなおします。
https://blog.ashdash.org/2022/12/codeigniter4-on-almalinux/
上記のサイトを参考にしました。

phpのバージョンを確認してバージョンにあったintlをインストールします。
```
$ php -v

#導入可能なintlを検索
$ yum list | grep intl

#phpのバージョンに合わせる（**）
$ sudo yum install -y php**-intl.x86_64
```
php.iniの変更
```
#追記
extension=/opt/remi/php**/root/usr/lib64/php/modules/intl.so
```
apacheの再起動
```
sudo systemctl restart httpd
```
これでパブリックIPアドレスに接続すれば表示されるはずです。

# 最後に
まだまだセキュリティについて知識が浅いので勉強してセキュリティについてしっかりとしたいです。