Archive: 2019

タグ・月別アーカイブ

QNAP日記 2019-09-30

家で動かしている QNAP を色々更新していました。

Refactoring

QNAP 屋内サービスのコード・構成のリファクタリング

  • docker-compose を使うように変更
  • docker-compose で syslog に投げる
  • JavaScript で作ったものを TypeScript にリファクタリング
  • npm package の update, http から axios への書き換え
  • Dockerfile で マルチステージビルドを使って image の削減
  • TypeScript で共通処理部分を切り出し

みたいなことをしていました。

Pi2B to Nature Remo

今まで、特に意味もなく Raspberry Pi 2B の USB 温度計で部屋の温度をとって DB に放り込んでいました。それを今回 NAS 側に移しました。

温度取得を QNAP の Docker + Nature Remo の方の API に切り替えた結果、湿度と照度を追加で取得できるようになりました。

地味に unbound が動いていた (dns blacklist を作っていた) のに気が付いていなくて、突然名前が引けなくなって、急遽ルーターの設定を変更。

uptime が 1000 日以上だったので、トラブルもなく安定してよく動いていたな、と思いました。(Security update は置いておいて)

hardware EOL and new device

過去の構成は:

  • TS-259Pro - Surveillance Station & DB & Backup
  • TS-651 - Docker & FileSharing

購入してから6年くらいの TS-269Pro の EOL が近づいて来ていたので、TS-453Be を購入しました。新構成は:

  • TS-651 - Surveillance Station & DB & Backup
  • TS-453Be - Docker & FileSharing

TS-453Be を SSDx2 の構成にしたら、11~13W くらいの電力消費におちつきました。CPU を全然回していないとはいえ、最高ですね?

TS-651 は SSDx2 HDDx2 で 37W くらいです。SSDで電気代が月500円安くなったとして、5年で3万円、過去の書き込みレートだと 60G/day くらいだったので、1年で21TBW、5年なら100TBW、TBW的にはいけそうですが、まだまだ容量単価がつらい。
(TimeMachine 等の Backup も兼ねているので、あまり容量を削れない)

Surveillance Station の課金が別 NAS に移行できないので、QVR Pro を試しているのですが重いねコレ...。

メモリー追加

ついでに、両方ともメモリーを 16G にしました。Container も Surveillance もメモリ喰いですし。

メモリーはだいすきな SanMax の DDR3L-1866 の 8Gx2 です。もちろん QNAP での動作保証はありません。

SanMax (サンマックス)
SMD-N16G28CTP-18ML-D-BK

よくセールになっていますね。

10GbE

去年末に購入した MacMini の 10GbE が一度も使われていないので、Hub 共々買い揃えたいと思いつつもまだ高いし、消費電力凄そうで躊躇してます。

DockerCompose on QNAP

ContainerStation

QNAP の ContainerStation をとても便利に使っていたのですが、Deploy のたびに設定 (UIからVolume等) をしたりとか、複数の Container が協調するのがめんどいというか、DockerCompose したいよなあ、と思って VPS を借りてみたりしましてました。

ところが、DockerCompose 対応してる、ということに、最近ようやく気が付きました(最初からあった?)。

DockerCompose == APP

QNAP 用語的には、docker-compose は APP ということみたいです。

Docker 社の作っている app plugin とは別物っぽいです。

APP は二通りの作成方法があるようです。

  • ライブラリ(初期設定なら https://github.com/qnap-dev/container-apps/tree/2.0) をつかう
    templte/*/wizard でメニュー設定と、docker-compose.yml の項目への binding が定義できるようだ。
  • 自分で設定する(作成の所のアプリケーションの作成ボタンから docker-compose.yml を編集して追加できます)
    docker-compose.yml に即値で書いていく。

自分は後者を使いました。設定項目が全て手の中にあるのでバックアップ・履歴管理も楽だし。(docker-compose.qnap.yml で commit しています、詳細な設定・秘密情報は Volume に置く方針です)

注意としては、build エントリがあると失敗するので、消しておきます。なければ image を自動的にダウンロードして実行します。

image の更新

なお、概要タブの Container/APP 一覧から、編集ボタンを押すと既存の APP の yml の編集ができ、適用 すると自動的に更新されます。

tag を :latest にした場合は 適用 を実行したところで、既存の latest を更新してくれないので、image を削除する必要があります。参照されていると削除できないので、面倒です。普通に versioning しましょう。

React

SPA

長いお休みをいただいているので、練習がてら、このサイト(Bugfire.dev)を React で SPA/PWA 化しました。

Page は gh-pages でホストをして、Blog は Markdown にして、index と記事を json でホストして取りに行くようにしました。

Redux/Flux 的なことは Unity や Vue.js で少しかじりましたが、今回は端折りました。
というか色々端折っても三日かかりました、難しい。

TODO

  • Year/Month/Tag で絞り込むUI

  • Android でアイコンが丸くならない、困った。

    "purpose": "maskable" で良いとの記事を見たが動かない。
    十分透過な画像を食わせると良いとは読んだけど、それやると iOS が変になりそう。

  • Markdown (Code highlight)

  • atom.xml

  • sitemap.xml

10/1 追記

PWA は色々おかしい(難しい)ので serviceWorker を止めました。MarkDown も single back-quote が div 要素になったり、普通に hatena blog や qiita にかけば良いのでは?、と頭をよぎってしまうので、あまり時間をかけないようにしたい(自戒)。

自分のためのコードを書くのは楽しいですけどね。