電子実験ノート（ELN）eLabFTWのオンプレミス導入

# 背景
研究（物性）で大量の実験データを扱うが、紙の実験ノートでは流石にデータのサルベージが大変なので、電子実験ノートで記録したかった。
やりたかったこととして、
* 最低限、日記的にやったことを書いて、タグ（実験装置、サンプル）ごとに検索できること。
* 無料であること（できれば、OSSであること）　
    * 金払い忘れてデータ消えたりしたら困るので。
    * 少なくとも、データ容量が不足することがないこと。
    * これを満たすのはオンプレしかなかった。
* あわよくば、大量の生データを保管するために、オンプレで管理したい（数百GB）。

雰囲気は実際にまず触ってみればわかるかと思う。（登録も不要でさわれる。もちろんデモなので重いしファイルサイズ制限もある）

https://demo.elabftw.net/login.php

# 手順
## 環境
* Fedoraが動くサーバー
* SSH等でターミナルは叩ける
* ルーターについてきたDDNSサービス（ドメインを持っているならば持っているに越したことはない）

## Docker、Docker-composeインストール
**```sudo dnf install docker```をやってはいけない。**
公式から落としてきてインストールすること。詳細は以下の記事参照。

https://qiita.com/okemessi/items/97ecb311a94b3d9e50ad

新しい環境なので、以下のコマンドを実行するだけである。
```bash
$ sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
$ sudo dnf install containerd.io docker-ce docker-ce-cli docker-ce-rootless-extras docker-compose-plugin
```

サービスを起動する。一応テストもしておこう（最終行）。
```bash
$ sudo systemctl start docker
$ sudo systemctl enable docker
$ sudo docker run hello-world
```
ウェルカムメッセージが表示されたら正解。

### elabctlインストール

依存しているらしいので、必要なパッケージは入れる。
```bash
sudo dnf install dialog git zip unzip
```

curlで落としてきて、管理スクリプトをインストールする。（```Docker-compose.yml```直書きはやめといたほうがいいと思った。）
```bash
$ curl -sL https://get.elabftw.net -o elabctl && chmod +x elabctl
$ sudo sudo mv elabctl /usr/local/bin/
```

## eLabFTW設定ファイルの作成
管理コマンドから、本体をインストールしていく。
```
$ sudo elabctl install
```
仰々しい画面が表示されるが、「OK」

その後、データの保存場所の確認が出るが、基本サーバ用のデータは大きなHDD等においておきたいはずなので、「Download example conf and quit」を選ぶ。

```bash
sudo vi elabctl.conf
```
を開いて、以下のようにコメントアウトを外して書き換えれば良い。以下は大型ストレージを```/mnt/server```にマウントしている場合。
```bash
# where do you want your backups to end up?
declare BACKUP_DIR='/mnt/server/elabftw/var/backups/elabftw'

# where do we store the config file?
declare CONF_FILE='/mnt/server/elabftw/etc/elabftw.yml'

# where do we store the MySQL database and the uploaded files?
declare DATA_DIR='/mnt/server/elabftw/var/elabftw'
```

これで保存して閉じる。
```
$ sudo elabctl install
```
で、「OK」→「Looks good to me」→「Server」→「Yes」→使うアドレス（私の場合は```***.iobb.net```）→「Use HTTPS」→「Use correct certificate」→「OK」
これで一旦インストールが完了する。

### 注意点
先に```/mnt/server/elabftw/etc/```をmkdirで作成しておかないと、エラーが出る。

## ファイアウォールとルーター（DNS）の設定
ファイアウォールを開く。有効なゾーン名は```sudo firewall-cmd --list-all```でわかる。今回はゾーン名がFedora特有となっていたので、これに設定する。
```bash
$sudo firewall-cmd --zone=FedoraWorkstation --add-service=http --permanent
$sudo firewall-cmd --zone=FedoraWorkstation --add-service=https --permanent
$sudo firewall-cmd --reload
$sudo firewall-cmd --list-all
```
で、```http,https```が入っていたらOK。

ルーター側でDNSの設定をする。ドメインを持っているのなら、その設定をする。ここだけは詳細は調べてください。

## 証明書インストール（Let's encrypt）
証明書をインストールする。certbotというやつが提供されているので、使う。
先に、80ポートで何も動いていない状態にすること。**既に```elabctl start```してしまったのなら、一回```elabctl stop```で先に止めておく。**
```bash
$ sudo install certbot
$ sudo certbot certonly
```

あとは公開用メールアドレスと、サイト名（先程のインストールで打ち込んだはず。私の場合は```***.iobb.net```）を打ち込む。

## confファイルの設定（アップロードファイルサイズの変更）
設定ファイルを編集する。インストール時に設定した場所（例では```/mnt/server/elabftw/etc/elabftw.yml```）にある。以下のように書き換えたら良い。
```yml
#- PHP_MAX_EXECUTION_TIME=120
（中略）
#- MAX_PHP_MEMORY=256M
（中略）
#- MAX_UPLOAD_SIZE=100M
```
これを、
```yml
#- PHP_MAX_EXECUTION_TIME=1200
（中略）
#- MAX_PHP_MEMORY=1000M
（中略）
#- MAX_UPLOAD_SIZE=1000000M
```
（タイムアウト長時間化、メモリリミット拡大、ファイルサイズリミット拡大。前半2つはおまじない程度）

## 起動
```bash
$ sudo elabctl start
$ sudo elabctl initialize
```
完了したらすぐにブラウザから（今回なら```https://***.iobb.net```）アクセスしてユーザー登録する。

## メールの設定
smtp2goを使うようにすすめられるが、会社emailがないと駄目らしいので却下。gmailでやる。
画面右上→Sysadmin Panel→EMAILで、↓のようにセットアップする

https://qiita.com/okemessi/items/1904fe40750ea0f267a2

## 完了
以上で完了のはず。

# 感想
ディレクトリ作るとか、Let's encrypt回りとか、しょうもないところで時間を食った。それ以外は比較的スムーズだった。