Dashyでダッシュボードを作りnetdataでローカル監視体制強化

SBC(シングルボードコンピュータ)

シングルボードコンピュータのKHADAS VIM1Sを買ってLinuxが増えてきたのでローカルサービスのリンクをまとめたページを作っていきます。

それと、ラズパイやJetson nanoってたまにWifiが切断されたり重い動作をさせておくとフリーズするので、アクセスできなくなったら手動で再起動しなきゃいけないのでたまに監視する必要があるんですよねぇ、

そこでファイルサーバーとして使っているBMAX B3+(←レビュー)にDocker Desktopをインストールその中にnetdata、Ping、Dashyの便利なコンテナを追加して、ローカルエリア内でタブレットやスマホからも自作ツールや自作のWebサイトが見えるように設定していきます。

Jetson nanoのDashy ローカルサービスのリンク集完成の図↑、こちら↓はWindows11のDashyで作った各サーバーの生存確認ページ。

Windows用のDocker Desktopインストール

まずはDocker Desktopをインストール・設定していきます。

Linux用Windowsサブシステムと仮想マシンプラットフォーム

まず最初に確認としてLinux用Windowsサブシステムと仮想マシンプラットフォームがオンになっているかチェックしましょう。

たしかWindows11はWSL入ってた?と思いますが、無ければPowerShellで「wsl –install」を実行してWSLもインストールしましょう。

docker ダウンロード

Home
Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious set...

こちらからWindows用のDocker Desktopをダウンロードできる。LinuxやAppleもあります。

ダウンロードしたらインストーラを起動して、適当にOKボタンを押していけば使えるようになる。

質問事項はコレだけ、あとはインストールしていってできたら再起動。

再起動すると自動的にDocker Desktopが起動するようになる。

WSLをアップデート

初回はうまく起動できなかった。

どうやらWSLが古いようでアップデートしろとのこと。

以下のようにPowerShellを右クリックして管理者として起動してコマンドを実行する。

wsl --update

これでDocker Desktopが起動するようになりました。

最初のチュートリアル

とりあえずチュートリアルをやったら以下の2つのコンテナが入りました。

いらない場合はコンテナの右側にあるゴミ箱アイコンをクリックすれば気軽に削除できます。

気軽に削除できるので、重要なコンテナを間違えて削除しないかちょっと心配。

コンテナの動作確認

チュートリアルを起動させてDockerが正常に動くか確認してみましょう。

docker-tutorial↑を起動して、ブラウザからlocalhostにアクセスすると以下↓のようなDockerが用意したWebページにアクセスできる。

Dockerはかなり簡単にWebサーバーやサービスを立てることができて便利ですね。

コマンド

Dockerのコマンドをいくつかメモとして書いておきます。

Linuxのシェルでコンテナ内のディレクトリにアクセス

Windows ではなくLinuxのCUIでDockerのコンテナ内にアクセスする方法です。

bashだとJetson nanoは『OCI runtime exec failed: exec failed: unable to start container process: exec: “/bin/bash”: stat /bin/bash: no such file or directory: unknown』と言われてログインできなかったのでshにした。(Raspberry PiはbashでもOKだった。)

docker exec -it [コンテナIDか名前] /bin/sh
例 docker exec -it df636d5479e1 /bin/sh
/app

例はDashyにログインした場合、Dashyは/appに入るのでpublicディレクトリに進むと設定ファイルconf.ymlがある。

a9813717b1940 はコンテナID

docker exec -it a9813717b1940 /bin/sh

bashだと無いと言われエラーになった。
OCI runtime exec failed: exec failed: unable to start container process: exec: "/bin/bash": stat /bin/bash: no such file or directory: unknown

これでLinuxの基本的なコマンド[ls][pwd][cd]などが使える。

PowerShellとかを使わなくてもDocker DesktopではName(例はmystifying_kowalevski)クリックしてTerminalを選ぶ↓とコマンド打てるようになる。

コンテナ確認

docker ps #動いているコンテナのみ表示
docker ps -a #停止コンテナ
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
937f424a2789        hello-world         "/hello"            17 minutes ago      Exited (0) 17 minutes ago                       youthful_swirles

コンテナ一覧

docker container ls
CONTAINER ID   IMAGE               COMMAND                  CREATED      STATUS                PORTS                  NAMES
a9813717b194   lissy93/dashy       "docker-entrypoint.s…"   2 days ago   Up 2 days (healthy)   0.0.0.0:8080->80/tcp   mystifying_kowalevski

コンテナ 開始・停止

docker stop [コンテナ名]
docker stop netdata #例
docker start [CONTAINER ID]

コンテナ削除

コマンドで削除しなくてもDocker Desktopではゴミ箱アイコンを押せばできますが、一応書いておきます。

docker rm [CONTAINER ID]
docker rm 937f424a2789  #例

消えない場合?docker rm -f [CONTAINER ID]を使う。

コンテナ情報

後ほど説明するDashyコンテナはappディレクトリ内にあります。

docker inspect a9813717b194
[
    {
        "Id": "a9813717b1940abf2195cd4360c48c337fd5412851f124e28f62c7ffd78606ad",
        "Created": "2023-02-06T07:52:08.420291799Z",
        "Path": "docker-entrypoint.sh",
        "Args": [
            "yarn",
            "start"
        ],
・・・省略

        "Mounts": [],
        "Config": {
            "Hostname": "a9813717b194",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": true,
            "AttachStderr": true,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NODE_VERSION=16.13.2",
                "YARN_VERSION=1.22.15",
                "PORT=80",
                "DIRECTORY=/app",
                "IS_DOCKER=true"
            ],
・・・省略

Dashyを使ってローカルのサイトやアプリに簡単アクセス

ローカル用に作成したサイトやアプリはブラウザのブックマークしてありますが、ごちゃごちゃしていてタブレットやスマホからアクセスする場合には不便なので、リンクのWebページを作って視覚的に見えるようにするツールがDashy。

ローカルでなくてもブックマーク代わりにお好みのWebサイトをアイコン付きでリンクするのも楽しいですね。

こんな感じでローカルのWebサービスのリンク↑を視覚的に整理できるところが素敵。

テーマも気軽に変更可能↓

10種類くらいのテーマで見た目をすぐに変えられて、レイアウトも変更できるのでかなり視覚的に便利に整理できるところがスゴイ。

あと、Widgets(ウィジェット)も豊富にあってPingやnetdataをDockerからインストールしておけばWebページでサーバーの生存確認もできるのも便利なところ。(後ほど説明していきます。)

ダウンロード

まずはdashyのDockerコンテナをインストールしていきましょう。

docker run -p 8080:80 lissy93/dashy

8080:80の左側の外側から見るポートは8080で、Docker内のポートは80になるようです。

上記のようになればインストール完了。

http://localhost:8080 アクセス

今回はSSLは入れてないのでhttpsではなくhttpでアクセスします。

「http://localhost:8080」こちらにアクセス↓します。

常時起動

Windowsを起動した時に自動で起動するようにします。

docker update --restart=always mystifying_kowalevski

好みのテーマに変更する

気分によってテーマや2段組や列表示のレイアウトも変更可能。

編集は右上の鉛筆アイコンで視覚的に編集(sectionsのitemsみしか編集できない)でき、スパナアイコンの構成の編集からWidgetsなども編集可能。

conf.ymlファイルを直接編集することも可能です。

Sub Pagesリンク

ページの右上のほうにテキストだけのリンクを表示する時はconf.ymlファイルのpagesを直接編集するとよさそう。

/app/publicのconf.ymlを編集でpagesを編集するとリンク表示される。

Pages and Sections | Dashy
Multi-Page Support

右上に文字とリンクが表示される。↓(GitHubとDocumentationのリンクは最初からある。)

追加で↓試しにリンクを入れてみた。

保存

スパナアイコンや鉛筆アイコンから編集したら「Save to Disk」を押して保存します。

保存はそれ以外にもymlファイルに保存も可能で他のDachyに設定ファイルを同じように使いたい場合に便利。

Dachyのアイコンを選ぶ

Dachyにアイコンを表示させるとかなり楽しくなります。

ダッシュボードアイコンは選ぶだけ

アイコンは選ぶだけのものもあって使いやすい。

例えば3Dプリンターを操作するoctoprintのアイコンは「hl-octoprint」とIconの欄に入力するだけでアンコンが表示されます。

その他のアイコンは↓こちらのページに250個ほどありますので、メジャーなローカルサービス関係のアイコンはほとんどありそう。

https://github.com/WalkxCode/dashboard-icons/tree/main/png

絵文字

絵文字は使ったことないのでちょっと分かりませんが、こちらから取得できそう。

Internal server error

画像ファイルをdockerにコピー

Free Favicon-Service by AllesEDV.at

アイコンが無い場合はWebで表示されているアイコンを使うか、アイコンをアップロードする必要があります。

ここではDockerにアイコンをアップロードする方法を紹介します。

Dockerの構造をまだ理解していないので、このDashyコンテナだけの話になりそうですが、Webでアクセスできるファイルのパスが「app/pubulic」内に画像ファイルを置けばよさそう。

まずは画像の置いてあるフォルダを右クリックしてシェルかPowerShellを開く。

シェルで以下のようにしてDashy内のWebからアクセスできる場所に画像ファイルを置く。

docker cp miwifi.png mystifying_kowalevski:/app/public/miwifi.png

以上で「http://192.168.31.232:8080/miwifi.png」にアクセスすると画像が表示するようになりました。

icoファイルを調べる

Webブラウザのタブ部分に表示されているicoファイルも取得可能。

Free Favicon-Service by AllesEDV.at

[get Code]を押すとアイコンが表示され、右クリックでダウンロードする。

アイコンがあるとやはい見た目がよくなって楽しいですね。

Dashy対応のWidgets

Dashyが対応しているウィジェットはかなり多数のWebサービスがありますので、お好みのものが見つかるでしょう。

Widgetsは鉛筆アイコンの視覚的な編集は不可で、スパナアイコンの「構成の更新」ボタンを押します。

以下のようにツリーモードかテキストエディタで編集するしかない。

Widgetsは以下のページにたくさん紹介されていますので、お好みを追加してみてください。

Widgets | Dashy
Dashy has support for displaying dynamic content in the form of widgets. There are several built-in widgets available ou...

簡単なところでいうと、時計表示や天気予報ですね。

いくつか自分が使っているWidgetsを紹介します。

Dockerでnetdataを使う

netdataはインストールしただけでサーバーの状態を詳細にグラフにして表示してくれる超便利なツール。

シングルボードコンピュータ(SBC)のLinuxが増えてきたので各SBCにnetdataを入れて生存確認しています。

ただ、Influxdbのように長期のデータ保存は苦手なのでゆくゆくデータを間引きしてInfuluxdbに送って長期保存できるようにします。

こちらの公式サイトを参考にしてDockerに導入していきます。

Install Netdata with Docker | Learn Netdata
Limitations running the Agent in Docker

インストール&起動

Linuxの場合は以下をコピペすればインストール・起動可能。

docker run -d --name=netdata \
-p 19999:19999 \
-v netdataconfig:/etc/netdata \
-v netdatalib:/var/lib/netdata \
-v netdatacache:/var/cache/netdata \
-v /etc/passwd:/host/etc/passwd:ro \
-v /etc/group:/host/etc/group:ro \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
-v /etc/os-release:/host/etc/os-release:ro \
--restart unless-stopped \
--cap-add SYS_PTRACE \
--security-opt apparmor=unconfined \
netdata/netdata

Linuxのシェルだと上記のようにしてインストールしますが、WindowsのPowerShellだと改行があってうまくいかないので1行にした。

docker run -d --name=netdata   -p 19999:19999   -v netdataconfig:/etc/netdata   -v netdatalib:/var/lib/netdata   -v netdatacache:/var/cache/netdata   -v /etc/passwd:/host/etc/passwd:ro   -v /etc/group:/host/etc/group:ro   -v /proc:/host/proc:ro   -v /sys:/host/sys:ro   -v /etc/os-release:/host/etc/os-release:ro   --restart unless-stopped   --cap-add SYS_PTRACE   --security-opt apparmor=unconfined   netdata/netdata

起動しただけで↓このようなCPUやメモリ・Netなどのサーバーの詳細データをリアルタイムに取得・表示してくれる。

これの一部をDashyに表示させます。

StatPingでSBCの生存確認

続いてPingを使ってシングルボードコンピュータ(SBC)の生存確認をしていきます。

Docker

Port8080はDashyが使っているのでホストのポートのみ8081にします。

docker run -p <ホストのポート>:<コンテナ内のポート> <イメージ名>
docker run -it -p 8081:8080 statping/statping

初期設定

初期設定が必要でStatPingのページにアクセスして設定します。

http://192.168.31.204:8081などにアクセス

以下のようなページが表示されるので設定していきます。

言語・ドメイン・ユーザ名・パスワード、あとは適当に。

常時起動

PowerShellで以下を実行する。Dockerでインストールすると適当な名前が付けられて全部名前が違うので「docker ps -a」でStatpingの名前を調べて実行する。

#Windows11のDockerは以下
docker update --restart=always cool_solomon
#Khadas VIM1Sの場合
docker update --restart=always amazing_kowalevski
#ラズパイのOptopiの場合
docker update --restart=always vigilant_raman
#Jetson nanoの場合
docker update --restart=always kind_borg

DashyでnetdataとStatPingを表示

以下のように設定したら

今のところ、サーバーがおかしくなったらメールなどで連絡が来るようにしていないので、このページ↓を見ないと各サーバーが動いているのか確認できないところが・・・役に立たないとも言う・・

Pingは接続が不安定でサーバーは生きてる時でも「error occured」の表示になる時もある。

マルチページはうまくいかなかった

ウィジェットとは関係ないのですが、Dashyはマルチページも対応していて、ymlファイルを/app/publicに置けばよさそうですが??↓以下のページで説明されています。

Pages and Sections | Dashy
Multi-Page Support
pages:
- name: server page
  path: 'server.yml'

上記のように追加してみましたが何故かリンクが「http://192.168.31.232/home/server-page」になってしまいアクセスできなかった。

「http://192.168.31.232/server.yml」にアクセスしてもダメ。

フォーラムを覗いたらどうやら他の人もエラーになってるようなので諦める。

なのでBMAX B3+のWindows11とJetson nanoにDashyをインストールして2つのページに分けた。

ローカルにPCやSBCが増えてきている方はDashyやDockerを使って整理・遊んでみてくださいね。

コメント