はじめに
Googleフォトが有料化になって早n年
有料化に伴いQNAPのNASを購入し、写真や動画はすべてNASに保存するようにしていました。
QNAPにも写真閲覧アプリのQueMagieが存在しますが、Googleフォトの比べると劣っている感は否めません。
先日Qiitaの記事を読んでいたらimmichというセルフホストで実行するOSSの、Googleフォト代替ツールがあることを知りました。
せっかくNASがあるのでNASで構築しようとしましたが、immichに関する日本語の情報、特にQNAPで構築している情報がなかったので四苦八苦しながらなんとかインストールに成功しました。
参考・公式サイト
他reddit(Qiita投稿不可でした)
QNAPNASへのimmichインストール
Synologyの場合QNAPのアプリケーションでいうアプリケーションで起動できるらしい
QNAPでも同様の機能はあるが、YAMLファイル単体で指定する必要があるため修正が必要となる。
Container Station
前提
- QNAP NASを利用
- QNAP TS-253D4G(メモリ20GB&SSD読取キャッシュ)
-
Multimedia/FamilyPhotos
配下に写真を保存している。
準備
QNAP NAS(以下NAS)のIPとユーザでログインする
immich-app
フォルダと、配下にlibrary
とpostgres
のフォルダを作成する。
QNAPの場合、/share/CACHEDEV1_DATA/
が普段GUIからアクセスしている場所になりますが、シンボリックリンクが張られているので以下で作成できます。
mkdir /share/docker/immich-app/{library,postgres}
ファイルダウンロード
/share/docker/immich-app/ に配置してください。
docker-compose.yml
https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
example.env
example.env は .env にファイル名を変更する
https://github.com/immich-app/immich/releases/latest/download/example.env
hwaccel.transcoding.yml
https://github.com/immich-app/immich/releases/latest/download/hwaccel.transcoding.yml
example.env修正
viなどで修正してください。
タイムゾーン変更
日本に変更します
TZ=Asia/Tokyo
DBパスワード変更
任意のパスワードに変更。外部からログインするパスワードではないため変更しなくても大丈夫です。
DB_PASSWORD= [任意のパスワード]
docker-compose.yml修正
外部ライブラリの追加
services
のvolumes
で写真を格納しているディレクトリを指定
- /share/CACHEDEV1_DATA/Multimedia/FamilyPhotos:/mnt/photos:ro
QSV利用
QSVを利用する場合はservices
のextends
をコメントアウトし、quicksync
とする
extends:
file: hwaccel.transcoding.yml
service: quicksync # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
サンプル
私の場合は以下になりました。
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
extends:
file: hwaccel.transcoding.yml
service: quicksync # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
volumes:
# Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
+ - /share/CACHEDEV1_DATA/Multimedia/FamilyPhotos:/mnt/photos:ro # <--ここに追加
~省略~
コンテナ起動
バックグラウンドで起動します。
cd /share/docker/immich-app
docker compose up -d
すると準備が始まり、以下のメッセージとともにプロンプトが返ってきたら完了です。
[+] Running 6/6mmich_machine_learning Started 9.8s
✔ Network immich_default Created 4.7s ✔ Container immich_redis Started 10.1s
✔ Volume "immich_model-cache" Created 0.1s ✔ Container immich_postgres Started 9.8s
✔ Container immich_machine_learning Started 9.8s ⠇ Container immich_server Starting 10.3s
✔ Container immich_redis Started 10.1s
✔ Container immich_postgres Started 9.8s
✔ Container immich_server Started 10.4s
正常に起動したらContainerStarionのコンテナ一覧を確認します。するとimmichの5つが実行中となっているはずです。
“can't set healthcheck.start_interval as feature require Docker Engine v25 or later”エラーが出た場合
はdocker-compose.yml
のstart_interval: 30s
の値をコメントアウトします。
Health check start interval
If you get an error
can't set healthcheck.start_interval as feature require Docker Engine v25 or later
, it helps to comment out the line forstart_interval
in thedatabase
section of thedocker-compose.yml
file.
アクセス
2283ポートにアクセスするとユーザ登録画面がimmichが起動すると思います
ユーザ登録は画面の案内にしたがって進めていきます
http://[NAS-IP]:2283/
外部ライブラリの追加
管理>外部ライブラリ>ライブラリを作成>インポートパスを編集>パスを追加
docker-compose.ymlで定義したパスを追加し、その後Scanを実行します。
/mnt/photos
immichをアップデートするとき
cd /share/docker/immich-app
docker compose pull && docker compose up -d
まとめ
ContainerStationでubuntuを起動してその上でimmichを動かそうとしたりいろいろ試行錯誤していましたが、意外とシンプルな方法でできました。
今回は試していませんが、Portainerというもので動かすのも簡単とコメントしている方もしました。
今後は表示する写真のアクセス制限などの方法も調べてみたいと思います。