Linuxサーバー（RHEL9）にa-blog cmsをインストールしてみた

こんにちは。今回は、自宅のサーバーに**a-blog cms**を導入してみました。
公式ドキュメントにはインストールの方法が詳細に掲載されていましたが、ApacheやMySQLなどミドルウェア周りの設定方法は載っておらず、手探りで設定していました。
つまづいた部分もありますので、手順を共有します。

**a-blog cmsとは**？という方は[こちら](https://www.a-blogcms.jp/ "a-blog cms公式サイト")をご参照ください。

https://www.a-blogcms.jp/

# 環境
* OS：**Red Hat Enterprise Linux release 9.4**
* Apache：**Apache/2.4.57**
* PHP：**v8.0.30**
* MySQL：**Ver 8.0.36**

サーバーは、自宅PCに**VirtualBOX**をインストールし、その上に建てました。VirtualBOXをインストールしたのは昔過ぎて手順を忘れてしまったので、別の記事をご参照ください。別の方が書かれた記事ですが、以下の記事などが参考になると思います。

https://qiita.com/mmake/items/f62da4ed17ed6b0e5195

また、RHELなのでサブスクリプションマネージャーは登録しておきます。これがないとyumでパッケージがインストールできません。こちらは以下の記事が参考になると思います。

https://qiita.com/dan-go/items/56ad158217521dd27c4b

# 手順
それでは、構築手順を紹介します。以下の手順で行っていきます。

1. 必要なパッケージのインストール
1. 各種パッケージの設定
1. OSの設定
1. a-blog cmsのインストール

## 必要なパッケージのインストール
a-blog cmsを使うには、**Webサーバ**（Apache or Nginx）・**PHP**（バージョン指定に注意）・**データベース**（Mysql or MariaDB）が必要です。今回は**Apache**と**PHP**と**MySQL**を使いました。なお、Ver.3.0以前ではionCube Loaderも必要になるそうなので、バージョンによってはそちらもインストールしてください。
a-blog cmsのバージョンによってミドルウェアのバージョン指定がありますので、詳しくは[公式の動作条件](https://developer.a-blogcms.jp/document/requirements.html
 "公式サイト")をご確認ください。
 
必要なパッケージを、yumでインストールします。
```shell-session:インストール
# yum -y install http* mysql* php*
```
後述しますがPHPは拡張モジュールが必要なので、ワイルドカードで一気にインストールしてしまいました。インストールしたら起動しましょう。

```shell-session:起動
# systemctl start httpd php-fpm mysqld
# systemctl enable httpd php-fpm mysqld
```
## 各種パッケージの設定
インストールした各種パッケージの設定を行っていきます。
### Apacheの設定
Apacheでは**htaccess**を使うため、以下の2つの設定が必要になります。
* RewriteEngineの有効化
* htaccessの利用許可(AllowOverride)

#### RewriteEngineの有効化
RewriteEngineのモジュールがインストールされているかと、有効化がされているか確認しましょう。

```shell-session:モジュールの確認
# find / | grep mod_rewrite.so
/usr/lib64/httpd/modules/mod_rewrite.so
```
もし出力がなければ、yumでインストールしましょう。
モジュールが有効化されているかどうかは、Apacheのコンフィグファイルを確認しましょう。私の環境では、有効化モジュールは**00-base.conf**にまとまていました。

```shell-session:有効化の確認
# cat /etc/httpd/conf.modules.d/00-base.conf | grep mod_rewrite.so
LoadModule rewrite_module modules/mod_rewrite.so
```
もし出力がなければ、本ファイルに追記してください。そもそもこのファイルがなければ、**httpd.conf**に追記しましょう。

#### htaccessの利用許可(AllowOverride)
続いて、AllowOverrideの有効化です。こちらは**httpd.conf**を書き換えます。httpd.confに、以下の記載があると思いますので、 **"AllowOverride None
"** を、 **"AllowOverride All"** に書き換えましょう。書き換えた後は忘れずにApacheを再起動しましょう。
```shell-session: AllowOverrideの有効化
# vi /etc/httpd/conf/httpd.conf

<Directory "/var/www/html">
～中略～
    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride All  //ここを"None"から"All"に変更
～中略～
</Directory>

# systemctl restart httpd
```
ここで注意点です。AllowOverrideはディレクトリーごとに分かれています。今回はドキュメントルートである"**/var/www/html**"を使用するので、**\<Directory "/var/www/html">** と __\</Directory>__ で囲まれたブロックの設定を変更しましょう。

### PHPの設定
PHPに特別な設定は不要ですが、いくつかの拡張モジュールが必要です。インストール時にワイルドカードを指定したのですべてインストールされているとは思いますが、念のため確認しておきましょう。

```shell-session:拡張モジュールの確認
# php -m
[PHP Modules]
apcu
// 以下略
```
たくさん出力があると思いますが、[公式の動作条件](https://developer.a-blogcms.jp/document/requirements.html
 "公式サイト")に記載のあるモジュールが出力されていればオッケーです。なければyumでインストールしましょう。

### MySQLの設定
続いてMySQLです。MySQLでは、いくつかの権限を持ったユーザーを作成しておく必要があります。DBやテーブルは、ユーザーさえ存在すればa-blog cmsインストール時に自動で作成してくれます。実はユーザーもrootを使うようにすれば作成の必要はないのですが、せっかくなので作成しておきましょう。

```shell-session:MySQLの設定
# mysql -u root -p
mysql> create user ablogcms@localhost identified by '任意のパスワード';
mysql> grant all privileges on *.* to ablogcms@localhost;
mysql> quit;
```
今回は、ablogcmsというユーザーを作成し、グローバルで全権限を与えました。権限を必要なものに絞ったり、先にDBを作成してDBにのみ権限を与えることもできますので、要件に合わせてやってみてください。

## OSの設定
ミドルウェアの設定が終わったら、OSの設定も行います。
やるべきことは、**SELINUXの無効化**と、**ドキュメントルートの権限設定**です。

### SELINUXの無効化
a-blog cmsのセットアップ中、PHPがインストーラーをダウンロードしてくるのですが、SELINUXが有効化されているとダウンロードできないため、無効化が必要です。コンフィグファイルを修正し、設定反映のためにOSを再起動しましょう。
```shell-session:SELINUXの無効化
# vi /etc/selinux/config
SELINUX=disabled //enforcing → disabledに変更

# shutdown -r now
```

### ドキュメントルートの権限
前述の通り、a-blog cmsのセットアップ中にPHPがインストーラーをダウンロードしてきます。ダウンロードされたZIPファイルはドキュメントルートに格納され、解凍やリネームまで自動で行ってくれます。そのため、**apacheユーザーにドキュメントルートの書き込み権限**が必要です。今回は**777権限**を与えちゃいましょう。
```shell-session:ドキュメントルートの権限設定
# chmod -R 777 /var/www/html/
# ll /var/www/
合計 0
drwxr-xr-x. 2 root root  6  8月  6 22:10 cgi-bin
drwxrwxrwx. 2 root root 91 11月  4 17:03 html
```

## a-blog cmsのインストール
設定が終わったので、いよいよインストールです。インストール方法は公式ドキュメントに詳しく載っています。今回は **"簡単セットアップ"** を使う方法でインストールしました。
[こちら（公式ドキュメント）](https://developer.a-blogcms.jp/download/ "公式ドキュメント")の下部にある"簡単セットアップ"をダウンロードし、ZIPを解凍し、 **"setup.php"** だけサーバのドキュメントルート（今回は"/var/www/html"）に格納します。
**"setup.php"** の中身は特に編集不要ですが、インストールしたいバージョンを指定する場合は、最上部の変数 **"$ablogcmsVersion"** のコメントアウトを外し、任意のバージョンに設定すれば良いみたいです。
```php:setup.php
// ------------------------------
// a-blog cms 3.1.x 簡単セットアップ
//       last update 2024/05/17
// ------------------------------

$ablogcmsVersion = '3.1.0';  //ここをダウンロードしたいバージョンにする

// ERROR になる場合や個別に 3.0.x系のバージョンを
// 指定したい場合には、バージョンを設定してください。
//
// 2.x のバージョンについては 2.x系の簡単セットアップをご利用ください。
```

その後、ブラウザでこのファイルにアクセスします。任意のブラウザで **"http://\*\*\*(サーバのIPアドレス)/setup.php"** を入力し、アクセスしましょう。ここまでの設定ができていれば、セットアップの画面が出てくるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3587092/4c778f38-35c7-3669-4c2f-99253b2afbf2.png)

「セットアップ開始」をクリックし、あとは公式ドキュメントのセットアップ手順通り進めていけばOKです。途中、データベースのユーザー・パスワードを指定する欄がありますが、先ほど作成したユーザーの情報を入力しましょう。

# ハマったポイント
構築でハマったポイントを2つ共有します。
## ①SELINUXの無効化
最初、SELINUXを無効化せずに進めていました。そうすると、setup.phpを開いたときに以下のようなエラーが発生しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3587092/291cecc7-827f-c6d5-d894-5789e05330af.png)

PHPは触ったことがなかったのですが、手探りでソースコードを読んだりしていろいろ調べていくと、PHPがa-blogcmsのインストールパッケージをダウンロードする部分でエラーになっていることが分かりました。
バージョンごとのダウンロードURLを指定してそこからダウンロードするコードになっていたのですが、ダウンロードに失敗しているようです。
* URLが間違ってるのかな？と思いブラウザでアクセスしたら問題なくダウンロード可能
* OSのFWの問題か？と思いcurlを叩いてみるも通信可能。
* wgetしてみても問題なくダウンロードできている。

何が原因なのか・・・と小一時間格闘し、**SELINUX**がダウンロードを封じていたことに気が付きました。
SELINUXは色々悪さをするという噂を聞いていましたが、、それを身をもって実感できる良い経験でした。

## ②AllowOverrideの有効化
先ほども記述しましたが、httpd.confの設定項目 **"AllowOverride"** はディレクトリーごとに分かれています。今回はドキュメントルートである"**/var/www/html**"を使用するので、**\<Directory "/var/www/html">** と **\</Directory>** で囲まれたブロックの設定が必要ですが、私はこれを **\<Directory />** と **\</Directory>** のブロックだけ設定してしまっていました。
そのため、htaccessが有効化されておらず、セットアップ完了後に**サイト自体にはつながるけど、/loginのページにつながらない**という現象が発生しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3587092/bc2c7c88-f6f8-4f26-0af5-f8b4c978d07f.png)
httpd.confの設定を正しく修正したところ、問題なくログインページにもアクセスできるようになりました。

# まとめ
今回は、a-blog cmsのインストールをしてみました。Linuxサーバーにインストールする手順は探しても昔の記事しか見つからず、手探りでしたが何とかインストール完了しました。
この記事が皆さんのお役に立てば幸いです。

最後まで読んでいただき、ありがとうございました。