ラズパイにサーバー環境を構築し、metabaseでグラフを見る。

ラズパイにサーバーを構築し、metabaseでグラフを見る方法についてまとめました。

# 環境
環境は、下記の通りになります。
MariaDB version　 10.3.31-MariaDB-0+deb10u1
Python version: 3.7.3
OS: Raspbian 10.0

## 1.1 apacheのインストール
apacheをインストールします。
```
$ sudo apt-get update
$ sudo apt-get install apache2
``` 
## 1.2 apacheの確認
下記コマンドを実行し、inetに書かれているIPアドレスを確認します。
``` 
$ ifconfig wlan0
``` 
Chromeなどのブラウザからhttp://[、inetに書かれているIPアドレス]を入力してください。
成功すると、このようなwebページが出てきます。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176158/47b20690-3fc1-6fac-8689-56fb30e1d045.png)
## 1.3 apacheディレクトリ権限の変更
デフォルトの状態でApacheは、/var/www/html/ディレクトリ内にあるファイルを表示します。
下記を入力し、ディレクトの権限を変更します。
``` 
$ cd /var/www
$ sudo chmod 777 html/
``` 
## 1.4 PHPのインストール
下記コマンドでPHPをインストールしてください。
```
$ sudo apt install php libapache2-mod-php -y
```
## 2.1 データベース、metabaseの環境構築
データベースは、MariaDBを使用することにしました。[MariaDB](https://www.winserver.ne.jp/column/about_mariadb/)を見ると、mySQLよりも機能が高く、セキュリティ面が良いらしいので、試しに使ってみます。
MariaDB、セットアップ方法は、[こちら](https://qiita.com/kentmori-8/items/5d9ba6fcf334443a4164)を参考にさせていただきました。

## 2.2 metabaseの設定

metabaseのインストール
[サイト](https://www.metabase.com/start/jar.html)からmetabase.jarをダウンロードし、作成したフォルダに配置します。私は、windows端末からダウンロードし、winSCPを経由してラズパイのディレクトリに置きましたおきました。

``` 
$ sudo mkdir -p /apps/java
$ cd /apps
$ sudo chmod 777 java
$ pwd 
/apps/java/metabase.jar
``` 
### 2.3 OSのユーザー設定
metabase実行用のユーザを定義して権限等の設定をします。
``` 
$ sudo groupadd -r metabase
$ sudo useradd -r -s /bin/false -g metabase metabase
$ sudo chown -R metabase:metabase /apps/java
$ sudo touch /var/log/metabase.log
$ sudo chown metabase:metabase /var/log/metabase.log
$ sudo touch /etc/default/metabase
$ sudo chmod 640 /etc/default/metabase
``` 
### 2.4 サービス作成
metabaseをサービスとして登録します。
```
$ sudo touch /etc/systemd/system/metabase.service
$ sudo nano /etc/systemd/system/metabase.service
```

```metabase.service
[Unit]
Description=Metabase server
After=syslog.target
After=network.target
    
[Service]
WorkingDirectory=/apps/java/
ExecStart=/usr/bin/java -jar /apps/java/metabase.jar
EnvironmentFile=/etc/default/metabase
User=metabase
Type=simple
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=metabase
SuccessExitStatus=143
TimeoutStopSec=120
Restart=always
    
[Install]
WantedBy=multi-user.target
```

### 2.5 syslogファイル作成とMetabaseサービス登録
```
$ sudo touch /etc/rsyslog.d/metabase.conf
$ sudo nano /etc/rsyslog.d/metabase.conf
```
以下をmetabase.conf内に以下を追記します。
```metabase.conf
if $programname == 'metabase' then /var/log/metabase.log
& stop
```
syslogを再起動し、サービスを設定します。
```
$ sudo systemctl daemon-reload
$ sudo systemctl start metabase.service
$ sudo systemctl enable metabase.service
```

### 2.6 接続確認
下記コマンドを実行し、chromeでhttp://<IP>:3000でアクセスできるかどうかを確認します。
エラーが発生して場合、2.7を見てください。
```
$ java -jar /apps/java/metabase.jar
```

### 2.7 ポート重複によるエラー回避
私の環境では、3000のポートが使用していたため下記のようなエラーが出てしまいました。
```
WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
2022-03-16 14:13:54,552 INFO metabase.util :: Maximum memory available to JVM: 948.0 MB
2022-03-16 14:14:32,072 INFO util.encryption :: Saved credentials encryption is DISABLED for this Metabase instance. 🔓
 For more information, see https://metabase.com/docs/latest/operations-guide/encrypting-database-details-at-rest.html
2022-03-16 14:14:44,643 INFO driver.impl :: Registered abstract driver :sql  🚚
 ⮦ Load driver :sql took 2.3 s
2022-03-16 14:14:44,716 INFO driver.impl :: Registered abstract driver :sql-jdbc (parents: [:sql]) 🚚
Load driver :sql-jdbc took 2.4 s
2022-03-16 14:14:44,736 INFO driver.impl :: Registered driver :h2 (parents: [:sql-jdbc]) 🚚
2022-03-16 14:14:44,797 INFO driver.impl :: Registered driver :mysql (parents: [:sql-jdbc]) 🚚
2022-03-16 14:14:44,852 INFO driver.impl :: Registered driver :postgres (parents: [:sql-jdbc]) 🚚
2022-03-16 14:14:53,939 INFO metabase.core ::
Metabase v0.42.2 (d6ff494 release-x.42.x)

Copyright © 2022 Metabase, Inc.

Metabase Enterprise Edition extensions are NOT PRESENT.
2022-03-16 14:14:53,968 INFO metabase.core :: Starting Metabase in STANDALONE mode
2022-03-16 14:14:54,103 INFO metabase.server :: Launching Embedded Jetty Webserver with config:
 {:port 3000}

2022-03-16 14:14:54,183 ERROR metabase.core :: Metabase Initialization FAILED
java.io.IOException: Failed to bind to 0.0.0.0/0.0.0.0:3000
```
[metabase.com](https://www.metabase.com/docs/latest/operations-guide/running-the-metabase-jar-file.html)を確認すると、3000番が使われてたら、jarを走らす前に`MB_JETTY_PORT`を使って別のところ使ってね。と記載があります。なので、下記のように変更し、走らせます。chromeでは、http://<IP><font color="Blue">:3100</font>でアクセスします。
```
$ java -DMB_JETTY_PORT=3100 -jar /apps/java/metabase.jar
```

## 3.1 データベースの追加
metabaseを起動すると、初期設定をするようなっています。それほど難しい項目はないので、この部分は割愛します。
metabaseへmySQLのデータを登録します。mySQL内でのデータベースの作成方法については、以前の記事に記述しています。
下記の記事を参照してください。
[pythonでcsvのデータをデータベースへ書き込む。](https://qiita.com/yutaka_m/items/e3f80cb78a1f07438edf)

## 3.2 データベースの登録
1. 右上にある歯車マークをクリックし、管理者設定 -> データベースを追加する を選択する。
2. 下記の項目に必要な情報を入力する。

![ャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176158/8fc2cb49-2f41-8f50-0f52-3c348e8f1dfe.png)

データベースのタイプ: MySQL
表示名: 適当に入力(metabase内のタイトルになります)
ホスト名: localhost
ポート: 3306
データベース名: 適当に入力(設定したものを入力)
ユーザー名: root(設定したものを入力)
パスワード: xxx(設定したものを入力)

※ポート番号について
mySQL(MariaDB)にアクセスし、下記コマンドを入力すると、mySQLのポート番号を確認することができます。
```
MariaDB[(none)]> show variables like 'port';
```

# 3.3 グラフ作成
適当に操作して、グラフ、ダッシュボートを作成します。下記は、作成例です。
![像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176158/c6f82570-5411-5c79-33e2-ac9853919578.png)

# Link
下記サイトを参照させていただきました。
[Raspberry PiにMetabaseをインストール](https://obenkyolab.com/?p=1447)
[mariadb mysql ポート番号を調べる](https://qiita.com/yusk24/items/923305e5acae19f6976d)