PhotoPrismで自前の写真サーバーを立てる
May 22, 2023
linux AlpineLinux 写真サーバー 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などいくつかあり、本サイトでも紹介していますので、そちらもどうぞ。
- Lycheeで自前の写真サーバーを立てる
- Piwigoで自前の写真サーバーを立てる
- PhotoPrismで自前の写真サーバーを立てる
- 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ファイルのままで動作するのですが、ご自身の環境に応じて変更すべきポイントをあげておきます。
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でマウントした共有ディレクトリにしておくと、外部からもアクセスできて便利だと思います。
例えばこんなかんじで、
volumes:
- "/home/samba/share/Pictures:/photoprism/originals"
- "/home/samba/share/Import:/photoprism/import"
- "./storage:/photoprism/storage"
本サイトに公開した手順でAlpine Linuxのファイアーウォール(awall)を設定している場合は、ポート3500番を開ける必要があります。
"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サーバーにアクセスすると、以下のログインページが表示されます。
ここで、docker-compose.ymlで指定したログインユーザー名とログイン初期パスワードを入力しサインインします。
初期言語設定は英語なので、
Setting>GENERAL>Language>日本語
により日本語に変更。
設定>アカウント>パスワードの変更
により、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に取り込まれます。それなりに時間がかかります。
PhotoPrismに取り込まれると言いましたが、正確には取り込まれるのはインデックス情報やサムネイルだけで、オリジナルの写真はそのままPictures以下に残ります。写真を追加する場合は、Pictures以下のツリーの適当な場所に追加し、再度インデックスを開始すると追加した差分が取り込まれます。良く出来た設計です。Picturesの場所は導入時にdocker-compose.ymlで指定できますから、Sambaの共有フォルダーとかクラウドのドライブを指定しておけば便利に使えるでしょう。
ライブラリ>インポート>インポート フォルダからのすべてのファイル>インポート
Pictures以下に直接写真を追加していくのではなく、Importから写真を取り込みPicturesに追加する運用もできます。
写真の閲覧
インデックスが完了したら、とりあえずサイドメニュー「検索」をタップすると、取り込んだ全写真が一覧できます。
写真をクリックすると拡大表示になり、「←」、「→」で次々送っていけるのは他の写真アプリ同様の操作感。
サイドメニュー「フォルダ」をタップして見てみると、取り込んだ写真がサブディレクトリ毎に分類されています。
PhotoPrismでは写真に写っているものを認識し、AIにより分類してくれます。サイドメニュー「ラベル」をタップすると分類結果が見れます。
あとは人の顔で分類したり、撮影場所で分類したりと何でも有り。とても高機能。
スマホの写真と同期
「Google Photos」や「Apple Photos」はOSと密に連携を取って、撮った写真を全自動でクラウドにアップロードしてくれます。PhotoPrismは全自動とまではいきませんが、写真アップロード用のクールなアプリが用意されています。
AppStoreやPlayストアで「Photo Uploader for PhotoPrism」を探し、ダウンロードしましょう。
android版 Photo Uploader for PhotoPrism
iOS版 Photo Uploader for PhotoPrism
使い方は簡単で、歯車アイコンのSettingsメニューから、サーバのURL、ログインユーザー名とログインパスワードを入力するだけです。あとはアップロードしたい画像をチェックして、画面下半分にポップアップする紫のUploadボタンをクリックするだけです。
「Google Photos」や「Apple Photos」と異なり、サーバはクラウドではなく自宅LAN内に置く訳ですから、基本自宅Wifi接続時しかアップロードできません。外からアップロードする場合はvpn必須です。
PhotoPrismサーバーへのWebDAV接続
PhotoPrismサーバーには、WebDAV経由でPicturesディレクトリやImportディレクトリにアクセスする機能があります。この機能により、別のPCからでも写真ファイルをドラッグ&ドロップでアップロードしたり、ダウンロードしたりすることができます。まるでローカルディスクでファイル操作をしている感覚で。
Macの場合
Finder>移動>サーバへ接続
URL欄に
http://サーバ名またはIPアドレス:3500/originals/
を入れて、ログインユーザー名とログインパスワードを入れると、
Picturesフォルダーがマウントされます。あとはふつうにFinderのファイル操作ができます。
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ファイルでサーバにインストールするだけで超簡単に使い始められる。