2025年11月29日土曜日

raspberry-pi 4bで写真サーバーを立てる

ずいぶん前にgoogle photoが容量無制限でなくなり、Amazon photoに移行していた。

Amazon photoはprime会員なので容量無制限で使えるのだが、家族との共有が死ぬほどめんどくさい。とくにアルバムが共有できないというのが致命的に使いにくい。 

いい加減我慢の限界に来たので自宅サーバーを立てることにした。

とりあえず市販のNASを検討

synologyとかqnapとかが有名どころのようだ。最低限でも25000円くらい+ハードディスク代がかかる。

それだけならまあ何とか許容するとしても、数年周期で壊れたとして、また同じ費用が掛かるし、代替製品が出てちゃんとデータが移行できるのか不安が残る。また、やはり25000円+ハードディスク代で4~5万はかかるのももったいない。

おそらく製品なので簡単に使えるようになっているのだろうが、ついでに何か別のサーバも入れようとすると逆に面倒くさそうな感じもある。 

そして4~5万かかるのが気になる。やめた。 

自前で立てることにする

とりあえずalternativestoで調べてみて、見た目的にimmichというのがよさそうに見えた。raspberry-piでも動きそうなので、とりあえずraspberry-piにする。 ほかにもいろんなSBCが出てるが、有名どころのraspberry-piを使っておくのが面倒がないだろう。

現在最新はraspberry-pi 5のようだが、消費電力がちょっと高いようだった。電気代は安いに越したことはないので、4Bにしておく。immichをざっと検索した感じメモリは4G程度は必要そう。念のため8GB版を買っておく。 

インストール 

raspberry-piのOSを選ぶ。余計な機能はいらないので多分Liteでいいだろう。sshの設定までしてくれる。さすがだなあ。

書き込みして起動、wifiルータの機能でIPを固定化し、sshでログインしてみる。
何のトラブルもなく動いた。

次にquick-startに従いimmichを入れる。 

https://docs.immich.app/overview/quick-start/

dockerが必要そうなのでとりあえずdockerを入れる。一般ユーザでも使えるように自分をdockerグループに入れておく。

sudo apt install docker-compose
sudo apt install docker.io
sudo usermod -aG docker $USER 

quick-startに従いdocker-compose.ymlと.envをとってきて編集。とりあえず動かしてみるだけなので.envのタイムゾーンだけ変更して動かす。

# TZ=Etc/UTC
TZ=Asia/Tokyo

カレントのlibraryとpostgresにデータが格納されるようだ。

docker-compose up -dで普通に動いた。簡単すぎる。raspberry-piのケースを組み立てるのが一番大変だったかもしれない。

ハードディスク追加

動いたのはいいがこのままだと16GBしかないmicroSDにデータが入ってしまう。(ある程度容量のあるmicroSDを買ったつもりだったが、間違えてSDカード(でかい)を買ってしまったため、何に使ってたか分からない使い古しの16GBのmicroSDを使った。 )

ふるさと納税で1TBのUSBハードディスク(IO DATA 【HDPH-UT1KR】)を購入し使うことにする。

とりあえずつなげると大抵は/dev/sdaとして認識する。大抵はNTFSでフォーマットされているのでext4にフォーマットしなおして使う。最近のトレンドでは以下のようにやるらしい。

sudo parted /dev/sda mklabel gpt
sudo parted /dev/sda mkpart primary ext4 1MiB 100%
sudo mkfs.ext4 /dev/sda1 

できたらblkidでPARTUUIDなるものを調べる。伏せる必要があるかどうかよくわからないがXXXXの部分。

$ blkid
/dev/sda1: UUID="略" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="primary" PARTUUID="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"

fstabに追加する。

PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX /mnt/disk ext4 defaults 0 1

ディレクトリを作ってmount -aしてみる。

mkdir /mnt/disk
mount -a

これでおそらく再起動してもマウントされるはず。

データ移動

一度immichを動かして設定してしまったので、もう一度やり直すのはめんどくさい。/mnt/disk/immichにデータを移動することにする。

sudo mkdir -p /mnt/disk/immich
sudo chmod 777 /mnt/disk/immich (なんとなく)

dockerを止めてデータをコピー

docker-compose down
sudo cp -a library /mnt/disk/immich/
sudo cp -a postgres /mnt/disk/immich/

.envのパスを変更して再起動。

UPLOAD_LOCATION=/mnt/disk/immich/library
DB_DATA_LOCATION=/mnt/disk/immich/postgres
docker-compose up -d

特に何事もなく動いた。再起動しても大丈夫そう。 

インストール後

一応メモリ使用率を見てみる。150GBくらい写真を入れた後。

               total        used        free      shared  buff/cache   available
Mem: 7.6Gi 2.5Gi 99Mi 148Mi 5.3Gi 5.1Gi
Swap: 2.0Gi 461Mi 1.5Gi

freeが少ないように見えるけど、availableは十分あるから大丈夫そうかな。
freeコマンドの見方は以下。詳しい人のyoutube(https://www.youtube.com/watch?v=jiHipQ2XUHc)から抜粋したので怒られたら消す。

 

microsd使用量は9GBくらい使っている。ちょっと16GBだと心もとない。 

/dev/mmcblk0p2   14G  9.1G  4.0G  70% / 

USB-Cの電力計で電力も計ってみる。写真をある程度の数アップロードした後は顔認識やら何やらでわりとCPU動きっぱなしになるので、そのあたりの電力を計った。 

見づらいがmax 9.16W、1.68Aとなっている。USBハードディスクはバスパワーなのでハードディスク込みの消費電力だ。バスパワーのタイプだったが、今のところraspberry-piからの電力で問題なく動いてそう。

とりあえず約10W x 24時間 x 30日くらい動かすとして7200Wh、電気代はだいたい1kWh30~40円として288円。毎日常にCPUフルで動くわけでもないはずだが、多く見積もって月額300円くらいのサービスということになる。

使用感

使ってみた感じはgoogle photoにかなり近い感じ。少なくともamazon photoより格段に使いやすい。amazon photoは即アンインストールしようかと思ったくらいだ。(一応念のためのバックアップ用に残してあるが) 

アップロード後サムネイルづくりや顔認識でCPUが使われ、 しばらく待たないと反映されないのが多少気になる。CPUはgoogleには及ばないので、大量にアップロードした後だと、ジョブが永遠に終わらない気がしてくる。まあ気長に待つしかないだろう。

あと、だれがアップロードした写真なのか見えるといいんだけど、まあ無くてもそこまで困らない。

ほかはおおむね満足、15000円+ふるさと納税+ケース、電源代+電気代を払う価値はあったと思う。

0 件のコメント:

コメントを投稿