Google Photos容量がいっぱいなのでPhotoprism を立てた

Google Photos の容量がいっぱい

  • 家族の写真などでGoogle Photos がいっぱい
  • 昔は無料だったけど今は有料化して、Google Drive の容量を使うようになった
  • 家族の裸体などが結構入っているので、幼児ポルノ画像と認識されて垢BANされるのが不安

デモサイト

https://demo.photoprism.app/library/browse

構成

  • Jetson AGV Xavier
    • M.2 SSDが搭載されていて、キャッシュなどはここに配置してある
    • Raspberry Pi 5 でも動くらしいけど、手元にJetson があったので使っている
    • Jetson のストレージは飛ぶという前提で構築してある。死んだらNAS から復旧させる
  • NAS はRAID6 6TB
    • RAM がたらないのでPhotoprism が搭載できない
  • MariaDB はlogrotatedで90日分のバックアップを取るようにしている

/var/photoprism/compose.yml

https://docs.photoprism.app/getting-started/docker-compose/

  • Jetson はARM64なので、Raspberry Piのマニュアル通りに設定した。皆さんは自分のアーキテクチャに合わせてください
  • 変更したところ
    • services.photoprism.ports
      • “2342:2342” => “80:2342”
        • ポート番号を覚えるのが面倒なため
    • services.photoprism.environment
      • PHOTOPRISM_ADMIN_PASSWORD: “insecure” # initial admin password (8-72 characters)
        • Photoprism admin のパスワード
      • PHOTOPRISM_DATABASE_PASSWORD: “insecure” # MariaDB database user password
        • Photoprism のMariaDBデータベースのパスワード
    • services.photoprism.volumes
      • ”~/Pictures:/photoprism/originals” => “/mnt/photoprism/originals:/photoprism/originals”
        • 元画像をNASに保存
    • services.mariadb.environment
      • MARIADB_PASSWORD: “insecure”
        • Mariadb のデフォルトユーザーphotoprism のパスワード
      • MARIADB_ROOT_PASSWORD: “insecure”
        • MariaDB のroot パスワード
    • services.mariadb.ports:
      • “3306:3306”
        • docker を使わずに mariadbdump したいから

/etc/systemd/system/photoprism.service

[Unit]
Description=Photoprism
Requires=docker.service

[Service]
Type=simple

Environment=COMPOSE_FILE=/var/photoprism/compose.yaml

WorkingDirectory=/var/photoprism
ExecStartPre=/usr/bin/docker compose -f ${COMPOSE_FILE} down --volumes
ExecStart=/usr/bin/docker compose -f ${COMPOSE_FILE} up
ExecStop=/usr/bin/docker compose -f ${COMPOSE_FILE} down --volumes 

[Install]
WantedBy=multi-user.target

/etc/fstab

あらかじめ cifs-utils を入れる

sudo apt install cifs-utils

nas のマウントはこんな感じ

//NASのIPアドレス/Pictures/photoprism /mnt/photoprism cifs _netdev,credentials=/home/katsusuke/.smbcredentials,uid=katsusuke,gid=katsusuke,x-systemd.automount 0 0

パスワードは~/.smbcredentials に書いてある

/etc/logrotate.d/photoprism

参考: https://zenn.dev/muchoco/articles/d506d1c5c7ec3f

logrotated を使ってmysqldump を毎日実行して、さらに古いものは削除するようにしている

/mnt/photoprism/db/photoprism.sql.gz {
        daily
        rotate 90
        size 0
        missingok
        nocompress
        postrotate
		mysqldump -uphotoprism photoprism -h 127.0.0.1 -pパスワード | gzip > /mnt/photoprism/db/photoprism.sql.gz
        endscript
}

トラブルシュート

  • アップロードした画像が見つからない
    • Review に、不要っぽい画像がマークされている 必要なら戻す

便利なところ

  • ビッグテックの一存で垢BANされる心配がない
  • 地図が連携されて、あの場所で撮った写真みたいな検索ができる
  • 若干アホだけど人の顔認識ができる
  • NASの容量と電気代と、自分の人件費を無料として考えると、Google Photos に比べて安い

不便なところ

  • OCRして、紙を撮影した画像とかが検索できると嬉しい
  • シチュエーションを検索しても出てこない(海/ocean みたいな)

課題

  • Google Takeoutを使ってGoogle Photos の画像を全部引き上げる
  • Blu-ray に焼いていあるデータがそろそろ心配なので、NAS にもバックアップを取る
  • NASの容量がたらないのでもっと大容量のNASを買う
  • 雑にdocker compose で起動しているので、mariadb やphotoprism のプロセスが個別に死んだ場合、systemd による再起動が効かない
  • 外出者機から写真が見たい時に見えない
    • Cloudflare Tunnelをつけるか?
    • 誰か良い案募集

結論

  • 概ね満足
この記事をシェア

弊社では、一緒に会社を面白くしてくれる仲間を募集しています。
お気軽にお問い合わせください!