ExmentをUbuntu22.0.4 サーバにインストールする手順

# 概要

本記事では、[Exment](https://exment.net)を素のUbuntuにインストール手順を整理しようと思います。

[本家サイト](https://exment.net/docs/#/ja/install_linux)では、CentOS ベースなのと、自分が構築したい以下の環境の情報がまとまっていない感じがしましたので、整理した感じです。まだ、自分用のメモ状態となりますのでご容赦くださいまし。

* Linux
  * Ubuntu 22.0.4
* データベース
  * MariaDB(10.3.34)
* Webサーバー
  * Nginx(最新版)
* PHP
  * PHP 8.1
  * PHP-FPM

以下の情報元を参照しながら構築したものですので、もし、ここ違うよ的なものがあれば、コメントいただけますと大変ありがたく思います。

* [Ubuntu 20.04にMariaDBをインストールする方法](https://www.digitalocean.com/community/tutorials/how-to-install-mariadb-on-ubuntu-20-04-ja)
* [Exment docker compose環境](https://github.com/exment-git/docker-exment/tree/master/build/php81_mariadb)
* [nginx と PHP-FPM の仕組みをちゃんと理解しながら PHP の実行環境を構築する](https://qiita.com/kotarella1110/items/634f6fafeb33ae0f51dc)
 
なお、本記事ではセキュリティ周りの設定は省略しておりますので、ご注意くださいまし。

# 各種バージョン情報

Exment が依存するツール類は以下のバージョンがサポート対象なので、注意が必要です。

https://exment.net/docs/#/ja/server?id=サーバー

ちなみに、MariaDBを選択したのは以下あたりが理由です。

* 性能
  * MySQL より早いように思えた。
  * https://vpshikaku.com/mariadb-mysql-postgresql/
* バージョン
  * ExmentのMySQLサポートバージョンに上限があった(8.0.0未満)。
  * 最新のUbuntu環境だとデフォルトで入ってない。
  * 旧バージョンのMySQLをインストールするのは手間になりそうと思われた。

# インストール手順

以下の手順でインストールします。

1. MariaDB のインストール
1. データーベースのセットアップ
1. PHPのインストール
1. PHP-FPMのインストール
1. PHP Composerのインストール
1. Nginxのインストール
1. Exmentのインストール
1. Exmentのセットアップ

## MariaDB のインストール
MariaDBは以下の３ステップでインストールできます。

```shell
sudo apt update
```

```shell
sudo apt install mariadb-server
```

```shell
sudo mysql_secure_installation
```

インストール時の注意ポイントは、以下の記事を参照ください。

https://www.digitalocean.com/community/tutorials/how-to-install-mariadb-on-ubuntu-20-04-ja


## データーベースのセットアップ

MariaDBのインストールができたら、Exment用のデータベースを作成します。ここでは、Exment のデフォルトの情報を設定しています。


```shell
$ sudo mysql -u root -p

MariaDB [(none)]> CREATE DATABASE exment_database;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> CREATE USER 'exment_user'@'127.0.0.1' IDENTIFIED BY 'secret';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> GRANT ALL ON exment_database.* TO exment_user identified by 'secret';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> quit
Bye
```

ちなみに、データベースの保存先を変更したい場合は、こちらの記事を参照ください。
設定ファイルで保存場所を変更できます。

http://dbonline.s25.xrea.com/mysqlinstall/install/index6.html

以下、実施手順

### mariadb を停止する

```
sudo systemctl stop mariadb
```

### datadir を変更
```
sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
```

`50-server.cnf` の datadir をお好きな場所に変更。デフォルトはこうなっています。

```
#datadir                 = /var/lib/mysql
```

コメントアウトされているけれど、/var/lib/mysql がデフォルトと思われる。

### 既存データをコピー

```
sudo cp -rp /var/lib/mysql /mnt/mariadb/
```

### mariadb を起動

```
sudo systemctl start mariadb
```

## PHPのインストール

```shell
sudo apt install -y ca-certificates apt-transport-https software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install -y php8.1
```

## PHP-FPMなどのインストール

```shell
sudo apt install -y php8.1-fpm
```
```
sudo apt install -y git wget gnupg vim unzip libxml2-dev libpng-dev libzip-dev libonig-dev
```
```
sudo apt install -y php8.1-gd php8.1-dom php8.1-bcmath php8.1-mbstring php8.1-xml php8.1-zip php8.1-curl
```

2022/09/08 追記：以下のインストールを追加(これをやらないと PHP側からmysqlにアクセスできないと思われる)

```
sudo apt-get install php8.1-mysql
```

```
sudo apt install -y  zip unzip
```

## PHP Composerのインストール

```
sudo apt install -y curl
```
```
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
```


## Nginxのインストール
すでにapache2がインストールされている場合、ポート番号競合など懸念されますので、ここではアンインストールしてしまいます。

```
sudo apt remove apache2
```

そして、nginxをインストール。

```
sudo apt install -y nginx
```

```
sudo systemctl enable nginx
```

/etc/nginx/nginx.conf の編集します(もしかすると不要？)。
以下をコメントアウト。

```
# include /etc/nginx/sites-enabled/*;
```

/etc/nginx/conf.d/　配下に、以下のファイルを配置する。

https://github.com/tmori/tutorial_webapps/blob/main/env/nginx/nginx.conf

```
sudo cp env/nginx/nginx.conf /etc/nginx/conf.d/exment.conf
```


## Exmentのインストール

* 2022/12/19 追記
  * Ubuntu22.0.4 だと、PHPのバージョンがデフォルトで8.2 になっているため、composerでエラーが発生する。
  * 対処方法、以下のコマンドで、PHPのバージョンをPHP8.1にすることで対応できます。
  * sudo update-alternatives --config php


```
export LARAVEL_VERSION="9.*"
export EXMENT_VERSION="~5.0"

sudo mkdir /var/www/exment
cd /var/www/exment
sudo COMPOSER_MEMORY_LIMIT=-1 composer create-project laravel/laravel=${LARAVEL_VERSION} .
sudo composer config --no-plugins allow-plugins.kylekatarnls/update-helper true
sudo composer require psr/simple-cache=^2.0
sudo COMPOSER_MEMORY_LIMIT=-1 composer -W require exceedone/exment=${EXMENT_VERSION}

sudo php artisan vendor:publish --provider="Exceedone\\Exment\\ExmentServiceProvider"
sudo chown -R www-data:www-data /var/www/exment \
  && sudo chmod 755 -R /var/www/exment/storage \
  && sudo chmod 755 -R /var/www/exment/bootstrap/cache

```

`/var/www/exment/.env`のDBパラメータを以下のように修正します。

```
DB_CONNECTION=mariadb
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=exment_database
DB_USERNAME=exment_user
DB_PASSWORD=secret
```

さらに、`php.ini`のパラメータをexment推奨値に変更します。
場所は、`/etc/php/8.1/fpm/php.ini`

```
post_max_size=20M
upload_max_filesize=20M
memory_limit=512M
max_execution_time=240
max_input_vars=3000
```

nginxとphp-fpmを再起動します。

```
sudo systemctl restart php8.1-fpm
sudo systemctl restart nginx
```

# Exment のセットアップ

ここから先は、以下を参照ください。

https://exment.net/docs/#/ja/quickstart_easy?id=初期データのインストール


# その他参考情報

## Mariadb のページサイズ確認方法

```
sudo mysql -u root -p
```

```
select @@innodb_page_size;
```

## Mariadb のページサイズ変更方法


パラメータは、以下で変更できます。

```
sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
```

```
innodb_page_size=32768
```

ただし、途中からページサイズ変更はできません。
反映するには、再初期化が必要です。以下が参考になります。

https://qiita.com/hit/items/42cfcb28aa988b5a16f7