PhotoPrismで自前の写真サーバーを立てる

May 22, 2023

linuxAlpineLinux写真サーバーwebサーバー

目次

はじめに

写真サーバーといえば「Google Photos」と「Apple Photos」が有名ですが、大量の写真を入れようとすると、容量に応じてそれなりにお金がかかります。「Google Photos」の場合は、15GB未満は無料ですが、それ以上は有料です。「Apple Photos」は5GB未満は無料ですが、それ以上は有料です。5GBや15GBなんてあっという間に使い切ってしまいますよね。

自前の写真サーバーを立てると、容量を気にせずに、いくらでも使うことができます。さらに、サーバにアップロードした写真を定期的にバックアップをとったりなど柔軟な運用ができます。 そこで、写真サーバーPhotoPrismを導入してみます。

PhotoPrismは最新のAIによる画像認識技術を取り入れて、写真に何が写っているのかを認識したり、写真中の人物を認識したり、といったクールな機能も実装されています。「Google Photos」や「Apple Photos」と引けを取らない写真サーバーを自前で運用できるというのは驚くばかりです。

本格的で実用的な写真サーバーにはPhotoPrism以外にもPiwigoやPhotonix Photo Managerなどいくつかあり、本サイトでも紹介していますので、そちらもどうぞ。

本記事はPhotoPrism設定手順の備忘録です。

PhotoPrismサーバーのインストール

PhotoPrismをdocker composeでインストールします。インストール先のOSはAlpine Linuxを想定していますが、docker composeでインストールするので、dockerを入れたLinuxならば、どれでも大丈夫だと思います。

まずは公式docker-composeファイルの入手

$ wget https://dl.photoprism.app/docker/docker-compose.yml

このdocker-composeファイルのままで動作するのですが、ご自身の環境に応じて変更すべきポイントをあげておきます。

docker-compose.yml

services:
  photoprism:
    # restart: unless-stopped
    ports:
      - "3500:2342" # HTTP port (host:container)
    environment:
      PHOTOPRISM_ADMIN_USER: "admin"
      PHOTOPRISM_ADMIN_PASSWORD: "admin"
    volumes:
      - "./Pictures:/photoprism/originals"
      - "./Import:/photoprism/import" 
      - "./storage:/photoprism/storage"

restart: unless-stoppedはコメントアウトされていますが、全ての設定を終え動作確認も終わったら、常用するならコメントアウトを外しましょう。

使用するポート(ports:)はデフォルトでは2342ですが、筆者の場合3500に変更しました。本記事では、ポート3500での稼働例を示します。

environment:のPHOTOPRISM_ADMIN_USERでログインユーザー名を、PHOTOPRISM_ADMIN_PASSWORDでログイン初期パスワードを指定します。

volumes:で永続化するデータ領域を定義します。今回の例ではPhotoPrismのディレクトリを切って、その中にdocker-compose.ymlを入れ、同じディレクトリにPictures, Import, storageを置きました。Pictures以下が全写真の置き場で、その中にサブディレクトリを切っても大丈夫です。Importが追加する写真の置き場所です。Importを使用せずに直接Pictures内に追加しても大丈夫です。

./PhotoPrism/
    docker-compose.yml
    Pictures/    写真格納フォルダー
        photo1.jpg
        subfolder/
           photo2.jpg
           ...
    Import/      写真アップロードフォルダー
        photo_add1.jpg
        ...
    storage/     データベースフォルダー
        ...

実際に運用する場合は、PicturesやImportはPhotoPrism直下ではなく、Sambaでマウントした共有ディレクトリにしておくと、外部からもアクセスできて便利だと思います。

例えばこんなかんじで、

docker-compose.yml
    volumes:
      - "/home/samba/share/Pictures:/photoprism/originals"
      - "/home/samba/share/Import:/photoprism/import" 
      - "./storage:/photoprism/storage"

本サイトに公開した手順でAlpine Linuxのファイアーウォール(awall)を設定している場合は、ポート3500番を開ける必要があります。

/etc/awall/optional/larkbox-policy.json
  "service":{
     ...
    "webapps": [
      ...
      {"proto": "tcp", "port": 3500},
      ...
    ],
     ...
  },
  "filter": [
    ...
    {
      "in": "LAN",
      "out": "_fw",
      "service": [ "http", "webapps", ...],
      "action": "accept"
    },
    ...
  ]

ファイアーウォールを再起動

# awall activate -f
# rc-service iptables restart
# rc-service ip6tables restart

docker-compose.ymlが出来て、ファイアーウォールに穴を開けたら、PhotoPrismサーバーを起動

$ docker compose up -d --build

PhotoPrismへのアクセス

PhotoPrismサーバーが起動したら、Webブラウザから写真サーバーにアクセス

今回はポート番号3500で設定したので、こんなかんじで。
http://サーバ名またはIPアドレス:3500/

PhotoPrismサーバーにアクセスすると、以下のログインページが表示されます。

photo_prism_login.png

ここで、docker-compose.ymlで指定したログインユーザー名とログイン初期パスワードを入力しサインインします。

初期言語設定は英語なので、

Setting>GENERAL>Language>日本語

により日本語に変更。

photo_prism_change_language.png

設定>アカウント>パスワードの変更

により、docker-compose.ymlで指定したログイン初期パスワードを変更しておきましょう。

以上でPhotoPrismを使用する準備が整いました。

写真の投入

PhotoPrismを導入する前は、対象の写真をクラウドなりローカルディスクなりに保管していたと思います。おそらく大量に!まずはPhotoPrismの感触を確かめるため、それらの写真の一部を以下のようにPicturesディレクトリの中に置きましょう。

./PhotoPrism/
    docker-compose.yml
    Pictures/
        picture0.jpg
        dir1/
           picture1.jpg
           picture2.jpg
           subdir/
               picture3.jpg
               picture4.jpg
    Import/
       ...

ライブラリ>インデックス>すべてのオリジナル>開始

により、Pictures以下の全写真がPhotoPrismに取り込まれます。それなりに時間がかかります。

photo_prism_indexing.png

PhotoPrismに取り込まれると言いましたが、正確には取り込まれるのはインデックス情報やサムネイルだけで、オリジナルの写真はそのままPictures以下に残ります。写真を追加する場合は、Pictures以下のツリーの適当な場所に追加し、再度インデックスを開始すると追加した差分が取り込まれます。良く出来た設計です。Picturesの場所は導入時にdocker-compose.ymlで指定できますから、Sambaの共有フォルダーとかクラウドのドライブを指定しておけば便利に使えるでしょう。

ライブラリ>インポート>インポート フォルダからのすべてのファイル>インポート

Pictures以下に直接写真を追加していくのではなく、Importから写真を取り込みPicturesに追加する運用もできます。

写真の閲覧

インデックスが完了したら、とりあえずサイドメニュー「検索」をタップすると、取り込んだ全写真が一覧できます。

photo_prism_browse.png

写真をクリックすると拡大表示になり、「←」、「→」で次々送っていけるのは他の写真アプリ同様の操作感。

photo_prism_detatil.png

サイドメニュー「フォルダ」をタップして見てみると、取り込んだ写真がサブディレクトリ毎に分類されています。

photo_prism_folder.png

PhotoPrismでは写真に写っているものを認識し、AIにより分類してくれます。サイドメニュー「ラベル」をタップすると分類結果が見れます。

photo_prism_labels.png

あとは人の顔で分類したり、撮影場所で分類したりと何でも有り。とても高機能。

スマホの写真と同期

「Google Photos」や「Apple Photos」はOSと密に連携を取って、撮った写真を全自動でクラウドにアップロードしてくれます。PhotoPrismは全自動とまではいきませんが、写真アップロード用のクールなアプリが用意されています。

AppStoreやPlayストアで「Photo Uploader for PhotoPrism」を探し、ダウンロードしましょう。

android版 Photo Uploader for PhotoPrism

android_photo_uploader_for_photoprism.png

iOS版 Photo Uploader for PhotoPrism

iOS_photo_uploader_for_photoprism.png

使い方は簡単で、歯車アイコンのSettingsメニューから、サーバのURL、ログインユーザー名とログインパスワードを入力するだけです。あとはアップロードしたい画像をチェックして、画面下半分にポップアップする紫のUploadボタンをクリックするだけです。

「Google Photos」や「Apple Photos」と異なり、サーバはクラウドではなく自宅LAN内に置く訳ですから、基本自宅Wifi接続時しかアップロードできません。外からアップロードする場合はvpn必須です。

PhotoPrismサーバーへのWebDAV接続

PhotoPrismサーバーには、WebDAV経由でPicturesディレクトリやImportディレクトリにアクセスする機能があります。この機能により、別のPCからでも写真ファイルをドラッグ&ドロップでアップロードしたり、ダウンロードしたりすることができます。まるでローカルディスクでファイル操作をしている感覚で。

Macの場合

Finder>移動>サーバへ接続

photo_prism_webdav_1.png

URL欄に

http://サーバ名またはIPアドレス:3500/originals/

を入れて、ログインユーザー名とログインパスワードを入れると、

photo_prism_webdav_2.png

Picturesフォルダーがマウントされます。あとはふつうにFinderのファイル操作ができます。

photo_prism_webdav_3.png

Importフォルダーへのアクセスは以下のURLを接続。

http://サーバ名またはIPアドレス:3500/import/

Windows11の場合

Explorerの場所入力欄に

\\サーバ名またはIPアドレス:3500\originals\

を入れると出来るはずなんですが…

Method Not Allowed

筆者のPCでは出来なかった。

Windowsで稼働するWebDAVクライアントアプリCarotDAVを使うと出来た。

実運用に挑戦

手持ちの20年分約3万枚の写真をPhotoPrismに投入してみて使えるのかを試してみました。約3万枚の写真のインポートと写っているものの認識で一晩で完了しました。とても高速だと思います。

これでログは出力できるので、インポートで何が行われたかは確認できます。

$ docker compose logs photoprism

写真のディレクトリツリーがそのまま入れ子のアルバムになってくれることを期待したのだけど、ディレクトリツリーは無視されフラットな大量のアルバムが出来てしまったのは残念なところ。写真のディレクトリツリーと同じ構造の入れ子のアルバムが自動で出来たら最高なんだけど。

あとPhotoPrismのせいではないのだけれど、古いコンデジの写真はジオタグが無いので「場所」で検索ができないのも残念。

PhotoPrism独自の検索機能を使いこなせるようになればそれでいいんだろうけど、慣れが必要そうだ。慣れればかなり使えそう。

おわりに

PhotoPrismはちょっとさわっただけだけど、大量の写真があってもかなりいけそうな雰囲気。公式docker-composeファイルでサーバにインストールするだけで超簡単に使い始められる。


Written by questions6768 who lives in Uji, Kyoto.