ロリポップサーバーでLaravelのデータベースソフトExmentを動かす

## まえおき
Ubuntuで作業しています（あまり関係ありませんが）。
作業記録ですが、実験的な意味合いと、この作業記録が誰かの役に立てばと思っています。

## 事前に終わっている準備
- ロリポップの契約（スタンダードプラン）

## ロリポップの懸念点
- WebサーバーがApacheでもnginxでもなく、LightSpeedらしい、という点。
- ziparchiveなど、Exmentに必要なPHPモジュールがコントロールパネルの設定項目からは有効化できなさそう。

これから先も公式が動作確認の対象としていない以上、安定インストールはしにくいと思う。
[過去に断念した人](https://so.sha-box.com/2021/05/post-133/)は、MySQLのバージョンが追いついていなかったことが原因だったそう。
自分はたまたま運がいいのか、ロリポップが頑張っているのか、要件は揃えられそうなので、頑張ってみる。

## 必要な環境の用意

2022年6月22日時点でのExment v4.4.0の必要な要件を整理します。
- PHP7.3～7.4
- MySQL 5.7.8以上8.0.0未満（MariaDB 10.2.7以上）

動きそうだと判断した。

## SSHで接続してみる
ロリポップではSSHは有効化しないと初期では接続できないので、会員メニューから有効化を行う。

![ssh_enable.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285882/2ce2b935-4d5f-9da1-66ee-ce2db61878e3.png)


SSHが有効化されたらTerminalからポート番号を指定して接続。
普通SSHといえば22番ですが、僕の環境のロリポップでは2222番のでした。
`ssh ユーザー名@ホスト名 -p ポート番号`で接続できるので、接続。
```bash:~
$ ssh your.user-name@ssh.lolipop.jp -p 2222
```
いつもの聞かれるやつはYes、知ってるホストです。
```bash:~
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
```
パスワードを聞かれるので会員メニューからコピペして入力
```bash:~
ユーザー名@ssh.lolipop.jp's password: 
```
入るだけなら結構普通に入れるんですね。
```bash:[your.user-name@stdXXX ~]
[your.user-name@stdXXX ~]$
```

```bash:[your.user-name@stdXXX ~]
[your.user-name@stdXXX ~]$ php
-bash: php: コマンドが見つかりません
```
おっと、パスは通っていないようです。[調べてみると](https://qiita.com/yuzuha3ds/items/4c6b7d3f83e88b45d968)
ロリポップのサーバーでは`/usr/local/php/7.4/bin/`にphpが居るようなので、ちょっと試してみます。
```bash:[your.user-name@stdXXX ~]
$ /usr/local/php/7.4/bin/php -v
PHP 7.4.30 (cli) (built: Jun 10 2022 15:02:01) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with the ionCube PHP Loader + ionCube24 v11.0.1, Copyright (c) 2002-2022, by ionCube Ltd.
    with Zend OPcache v7.4.30, Copyright (c), by Zend Technologies
```
phpが居ることが確認できました。

## composerのインストール

homeにはすでにいますが、homeに移動して
```bash:[your.user-name@stdXXX ~]
$ cd ~
```
ユーザー領域直下にcomposerをインストールするのもどうかと思うので`bin`ディレクトリを作りまして
```bash:[your.user-name@stdXXX ~]
$ mkdir bin
```
[exment公式にしたがって](https://exment.net/docs/#/ja/install_rental)`curl -sS https://getcomposer.org/installer | php -- --install-dir=$HOME/bin/`を実行、composerをインストール(ダウンロード)します。
```bash:[your.user-name@stdXXX ~]
$ curl -sS https://getcomposer.org/installer | /usr/local/php/7.4/bin/php -- --install-dir=$HOME/bin/
︙
︙
Composer (version 2.3.7) successfully installed to: /home/users/X/your.user-name/bin/composer.phar
```
確認します。
```bash:[your.user-name@stdXXX ~]
/usr/local/php/7.4/bin/php ./bin/composer.phar -v
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 2.3.7 2022-06-06 16:43:28
```
composerがインストールされました。

一応公式の言うとおりcomposerの名前を変更しておきましょう。
```bash:[your.user-name@stdXXX ~]
mv bin/composer.phar bin/composer
```

## exmentのインストール(ダウンロード)

laravel(exmentプロジェクト)をいれるフォルダを作成します。
```bash:[your.user-name@stdXXX ~]
$ mkdir laravel
```
laravel(exmentプロジェクト)を入れるフォルダに移動します。
```bash:[your.user-name@stdXXX ~]
$ cd laravel
```
exmentのコードをダウンロードします。
```bash:[your.user-name@stdXXX ~/laravel]
$ wget https://exment.net/downloads/ja/exment.zip
```
exment.zipがダウンロードできましたら、解凍します。
```bash:[your.user-name@stdXXX ~/laravel]
$ unzip exment.zip
```
解凍ができたので、ZIPファイルは削除します。
```bash:[your.user-name@stdXXX ~/laravel]
$ rm exment.zip
```

参考に、今ディレクトリ構成がこんな感じになっています。
```
|- bin
|- laravel
|- web
```

```
laravel
  - exment
    - publicほか
```

なってなかったらどっか間違えてるので、やり直したり移動したりしましょう。

## 公開ディレクトリにexmentへのシンボリックリンクを作る。
exmentは`web配下`のディレクトリではなく、ホームディレクトリに配置しました。
したがって外部からアクセスできません。正しい方法です。
逆にアクセスできてしまうと、MySQLのパスワードが記載された`.env`ファイルとかが漏れてしまいます。

外部からアクセスできないとなるとLaravelとして機能しませんね。
なので、シンボリックリンク(ショートカット)を作って、Laravelの中のpublicフォルダだけは外部に公開します。

ということで、
公開ディレクトリに`laravel/exment/public`のシンボリックリンク(ショートカット)を作成します。
```bash:[your.user-name@stdXXX ~]
$ ln -s $HOME/laravel/exment/public $HOME/web/exment/public
ln: シンボリックリンク `/home/users/X/your.user-name/web/exment/public' の作成に失敗しました: そのようなファイルやディレクトリはありません
```
ディレクトリを作っていなかったので怒られました。`web/exment`を作成して再チャレンジします。
```bash:[your.user-name@stdXXX ~]
$ mkdir $HOME/web/exment
```
```bash:[your.user-name@stdXXX ~]
$ ln -s $HOME/laravel/exment/public $HOME/web/exment/public
```

できたようです。
アクセスして確認してみます。
http://{your.lolipop.domain}/exment/public/index.php

入ることができました。
![lolipop.index.php.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285882/69d0b54e-cf7f-60ce-69f1-967a336d3efb.png)

exmentのadmin画面`/admin`にアクセスしてみます。
![lolipop.index.php.admin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285882/8bc01040-6859-f216-f451-f010f4a0bdcb.png)

きちっと`/admin/install`へリダイレクトされ、インストール画面が表示されました！

ここまで結構素直に行きました。

## MySQLとの接続

まずはデータベースを作成します。
![create_database.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285882/9882495f-0211-057c-f1c6-72003953fef7.png)

データベースが作成できたら、その接続情報をSSHで接続したexment本体に書き込みます。
```text:.env
DB_CONNECTION=mysql
DB_HOST=mysqlXXX.phy.lolipop.lan
DB_PORT=3306
DB_DATABASE=LAAXXXXXXX-createdDatabaseName
DB_USERNAME=LAAXXXXXXX
DB_PASSWORD="yourpassword"
```

では、`admin/install`から先に進んでみます。次へを押すと、接続されていない場合は警告が出ます。。。
![connecting_db.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285882/8f6cc8c4-716c-331e-6f09-41e0aea33298.png)

緊張しました。

![connected_db.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285882/09a791e1-f62a-571b-1485-7b3c2b1b7de3.png)

DBの接続が完了しました。

あとはインストールできるかどうかですね。
このあとにでもPHPのモジュール不足で、コケそうな気がしますが(汗)

## インストール前の警告の除去

とりあえず警告表示を剥がしていかないとはじまりません。

.htaccessの設定でphp.ini設定を上書きしていきます。
まずは.htaccessでの上書き設定を有効化します。

![php_settings.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285882/0a7d7db8-08a4-a947-527d-f570e7ff9d7b.jpeg)

次に、`/exment/public/.htaccess`の`</IfModule>`のとじカッコが終わった後に`php_value`の上書きを追記します。
```text:.htaccess
</IfModule>

php_value memory_limit 512M
php_value max_execution_time 240
php_value max_input_vars 3000

```

 composer以外の警告が消えました。
![left_composer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285882/5e396d20-30a4-4adc-393f-2f5a88406508.png)


あとはcomposerだけです。

## composerの警告の除去

`/exment/.env`に`EXMENT_COMPOSER_PATH`の設定を書き込みます。どこでもいいですけど末尾とかにしましょう。
```text:.env
EXMENT_COMPOSER_PATH=/home/users/X/your.user-name/bin/composer
```

これでcomposerへのPATHが通りましたね！

![left_composer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285882/96049df5-0c9a-ee14-0af9-b3e28dd438cb.png)

警告が出たまま・・・・・・！！！
ということに1時間ほど費やしました。

が、[公式](https://exment.net/docs/#/ja/server?id=%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0%e8%a6%81%e4%bb%b6%e7%a2%ba%e8%aa%8d)によると
>Composerインストール
︙
※実際にcomposerがインストールされているにも関わらず、警告が表示される場合があります。これは、Webサーバーを動作させるユーザーからcomposerのパスが通っていない、権限が足りないなどの理由があります。
composerが正常にインストールされており、実際にアップデートを実施するユーザーが実行可能な場合は、この警告は無視してください。
※composerのパスを通すためには、一度こちらの「composerのパスを通すには」をご検証ください

とあります。

めっちゃ怖いですが、__警告は無視する__ ことにしました。

時間がかかります。実験兼ねてモジュール版にせずCGI版で動かしていることもあって時間がかかります。。。
飲み物でも飲んで待っていると良いでしょう。


戻ると、そこには感動の画面が待ち受けてくれていました。
![complete!.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285882/a0a65e25-c16c-0a4e-cbe7-642f1691f380.png)

動きました。
ここまでくればまぁほぼ動くでしょう。

ビビってましたが、LiteSpeedは全然関係ありませんでした。

お疲れ様でした。

## Laravelのexmentはロリポップでも動く

ちょっと半泣きで作業していましたが、無事動くところまでたどり着くことができました。
動かない的なWeb情報を探していましたが、実験した甲斐がありました。ロリポップ様も進化し続けているようです。

今回ドメインはつけていませんが、そのあたりは何も問題ないでしょうし、疲れたのでこのへんで記事を終わりたいと思います。

## 追記：メールの設定
これがないと始まらない感じがするので、動いて感動しているついでに残り書きます。

ロリポップで新しいメールアドレスを作成します。

そのSMTP情報をそのままExmentに書くだけですぐ動きました。
![メール設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285882/13e1d811-7f60-b870-ea6e-f05f73ed5f4e.png)
保存したらテスト送信。
![テスト送信.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285882/c05b12cc-5d42-d3f5-7e52-4897d26340b7.png)
すぐ届きました。
おすすめです。

### 紹介
https://exment.net/

#### 参考
[exment公式マニュアル](https://exment.net/docs/#/ja/)