Skip to content

Streamlit ダッシュボード

関連: Grafana で見ること / 月次予算 / パネル SQL

Grafana の置き換えではない。 同じ PostgreSQL を、自宅 LAN のブラウザで見る画面である。 パネル定義の正本は Grafana パネル SQL。

左のナビでページを切り替える。 表は st.dataframe なので、明細はスクロールできる。 各ページの「対象月」で先月などへ切り替える。 日次と週次の按分は当月だけ。過去月は月次のみ。

ページ 中身
概要 別枠貯金、変動の残り、収支、日次の折れ線、大分類の棒グラフ
期間 日次 / 週次 / 月次の予算・使用・残り(Grafana パネル A と同じ按分)
大分類 予算と使用、残予算
小分類 コンビニなどのタグ別。棒グラフと件数
支出 その月の明細。大分類と小分類で絞り込み
収入 その月の合計、分類別、明細
別枠貯金 残高と surplus_ledger
固定費 fixed_cost_items

Cloudflare Tunnel はまだ出していない。 自宅 LAN からだけ見る。

見る URL

finance-manager VM(192.168.40.212)で常駐させたあと、同じ LAN のブラウザで:

http://192.168.40.212:8501

ルータで 8501 をポート開放しない。 外向き公開は Access + Tunnel の話である。

VM での初回

Bot と同じ venv にダッシュボード用の依存を足す。

cd ~/finance-manager
source .venv/bin/activate
pip install -r requirements-dashboard.txt

読み取り専用にするなら .env に Grafana と同じユーザーを足す(未設定なら DATABASE_URL を使う)。

# DASHBOARD_DATABASE_URL=postgresql://finance_readonly:...@127.0.0.1:5432/finance_manager

unit を入れて起動する。 手順の意味は systemd と同じである。

chmod +x ~/finance-manager/scripts/run-dashboard.sh
sudo cp ~/finance-manager/deploy/finance-dashboard.service \
  /etc/systemd/system/finance-dashboard.service
sudo systemctl daemon-reload
sudo systemctl enable --now finance-dashboard
sudo systemctl status finance-dashboard

active (running) なら、PC やスマホ(Wi-Fi)から http://192.168.40.212:8501 を開く。

ufw を使っていて届かないときだけ、LAN からの 8501 を許可する。

sudo ufw allow from 192.168.40.0/24 to any port 8501 proto tcp

起動は scripts/run-dashboard.sh → .venv/bin/python3 dashboard/boot.py である。 systemd の PATH には python が無いので、venv の python3 を直接叩く。 boot.py は numpy と pandas を Streamlit より先に載せる。 Python 3.13 では、streamlit run を先にすると numpy の C 拡張が二重に載って落ちることがある。

コード更新後

Bot と同じ git pull のあと、ダッシュボードも再起動する。

cd ~/finance-manager
git pull
sudo systemctl restart finance-dashboard

requirements-dashboard.txt が変わっていたときだけ、再起動の前に入れる。

cd ~/finance-manager
source .venv/bin/activate
pip install -r requirements-dashboard.txt
sudo systemctl restart finance-dashboard

今回の本番化では pandas / numpy / Streamlit 1.44 以上が要る。 すでに PoC を動かしている VM は、再起動の前に必ず pip install する。

再起動直後に activating (auto-restart) なら、Streamlit まで届く前に落ちている。 ログは次で見る。

sudo journalctl -u finance-dashboard -n 50 --no-pager

python: not found なら起動スクリプトが古い。 No module named 'numpy' なら pip install -r requirements-dashboard.txt がまだである。 X86_V2 なら、numpy 2.4 の wheel がこの VM の CPU フラグを要求している。 pip install 'numpy>=2.1,<2.4' してから再起動する。

手元で試す(VM 以外)

pip install -r requirements-dashboard.txt
python3 dashboard/boot.py

.streamlit/config.toml で 0.0.0.0:8501 に待ち受ける。 同じ LAN の他端末は http://<このマシンの LAN IP>:8501。 streamlit run dashboard/app.py は使わない。