📷

QNAP NASへのimmichインストール

2025/02/12に公開

はじめに

Googleフォトが有料化になって早n年
有料化に伴いQNAPのNASを購入し、写真や動画はすべてNASに保存するようにしていました。
QNAPにも写真閲覧アプリのQueMagieが存在しますが、Googleフォトの比べると劣っている感は否めません。
https://www.qnap.com/ja-jp/software/qumagie

先日Qiitaの記事を読んでいたらimmichというセルフホストで実行するOSSの、Googleフォト代替ツールがあることを知りました。

https://qiita.com/katori_m/items/8c7555339b59f14c6d73

せっかくNASがあるのでNASで構築しようとしましたが、immichに関する日本語の情報、特にQNAPで構築している情報がなかったので四苦八苦しながらなんとかインストールに成功しました。

参考・公式サイト

https://immich.app/docs/install/docker-compose/

https://github.com/immich-app

https://note.com/nagomimakuri/n/n7581657dda12

https://www.reddit.com/r/immich/comments/1dcp83h/comment/lplohba/

QNAPNASへのimmichインストール

Synologyの場合QNAPのアプリケーションでいうアプリケーションで起動できるらしい
QNAPでも同様の機能はあるが、YAMLファイル単体で指定する必要があるため修正が必要となる。
Container Station

前提

  • QNAP NASを利用
  • QNAP TS-253D4G(メモリ20GB&SSD読取キャッシュ)
  • ⁠Multimedia/FamilyPhotos 配下に写真を保存している。

準備

QNAP NAS(以下NAS)のIPとユーザでログインする
immich-appフォルダと、配下にlibrarypostgres のフォルダを作成する。
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で写真を格納しているディレクトリを指定

https://immich.app/docs/guides/external-library

      - /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つが実行中となっているはずです。
image.png

“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 for start_interval in the database section of the docker-compose.yml file.

アクセス

2283ポートにアクセスするとユーザ登録画面がimmichが起動すると思います

ユーザ登録は画面の案内にしたがって進めていきます

http://[NAS-IP]:2283/

外部ライブラリの追加

管理>外部ライブラリ>ライブラリを作成>インポートパスを編集>パスを追加
⁠docker-compose.ymlで定義したパスを追加し、その後Scanを実行します。

/mnt/photos

image.png

immichをアップデートするとき

cd /share/docker/immich-app
docker compose pull && docker compose up -d

まとめ

https://widedeep.hatenablog.jp/entry/qnap-immich-install

ContainerStationでubuntuを起動してその上でimmichを動かそうとしたりいろいろ試行錯誤していましたが、意外とシンプルな方法でできました。
今回は試していませんが、Portainerというもので動かすのも簡単とコメントしている方もしました。
今後は表示する写真のアクセス制限などの方法も調べてみたいと思います。

Discussion