以前、iCloud写真をQNAPに自動的に引っ張ってくるために、GoodSyncというツールをQNAPにインストールした。元々は、iCloudに全て依存している写真管理を自宅のNASで一括管理したいなと思ったのが発端。
QNAP謹製のQuMagieでもスマホからの自動アップロード機能があるのに何故?といった話は、過去記事を参照して頂くとして、GoodSyncでダウンロードされた写真をQuMagieで見るという運用だったのだけど、とにかく動作が緩慢。写真を見るという行為が段々苦痛になってきた。そんな時、Immichという写真アプリが秀逸というウワサが。

ImmichサーバをQNAPにインストール
Immichは写真・動画の管理を行う、セルフホスト型のオープンソースプラットフォームだ。Google Photosなどの代替として注目されているらしい。
iOSやAndroid用のアプリがリリースされているのはQuMagieと同じだが、サーバとなるハードウェアにImmichのサーバをインストールする必要がある。Dockerで動作するためQNAPではContainer Stationを使える様だったが、VMにUbuntu Serverをインストールして構築することにした。
手順1. Ubuntu Serverのインストール
まず、Virtualization Stationを起動し、Ubuntu Server24.04のVMを作る。この方法はここでは省略するが、1点だけ注意すべき点は、VMのディスク容量は大きめに確保しておく事。
Immichはスマホアプリと同期させて使ったり、NAS上のフォルダを参照することもできる。前者の場合は特別な指定をしない限り、Ubuntu上のディレクトリに保存されるため、当然ながら画像ファイルの総容量以上の大きさにしておく必要がある。後者の場合、画像そのものはNAS側で共有されているフォルダに存在するものの、生成されたサムネイルがUbuntu上のディレクトリに保存される。サムネイルのサイズは画像の20%程度が目安との事なので、仮に画像ファイルの総容量が500GBであれば、最低限、サムネイル用だけでも100GB以上の容量を確保しておく必要がある。
その他、Ubuntu Serverのインストール時にIPアドレスを固定しておくのと、OpenSSHを有効にしておくのを忘れずに。(以降の作業はSSHでVMにログインして設定する。WindowsならPutty、Macならターミナルを使えばOK)
手順2. 事前準備
事前準備としてDockerのインストールを行う。(コピペでどうぞ)
最初にシステムの更新。
sudo apt update && sudo apt upgrade -yDockerとDocker Composeをインストール。
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get updatesudo apt-get install docker-ceこれで、Dockerのインストールは完了。サービスを開始するため以下を入力する。
sudo systemctl start docker
sudo systemctl enable docker以下のコマンドでインストール状況を確認する。それぞれバージョン名が表示されればOK。
docker --version
docker compose version手順3. Immichの必要ファイルをダウンロードする。
Immchをインストールするためのディレクトリ作成を行いその中に入る。そこに必要となるファイルをダウンロードする。今回はホームディレクトリの中にimmich-appディレクトリを作成するが、基本的にどこに作成しても良い。
mkdir ~/immich-app && cd ~/immich-app以下を実行し、必要なファイルをダウンロードする。完了したら、一旦、手順4に行く。
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.ymlwget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env手順4. QNAPの共有フォルダをImmichから見える様にする。
先に書いた通り、Immichはスマホアプリからアップロードする方法の他に、ネットワーク上で共有されたフォルダなどを参照する外部ライブラリという機能がある。
自宅のQNAPは、SMB共有されているフォルダにGoodSyncで自動ダウンロードした写真が大量に入っている。今回はこの共有フォルダをImmichの外部ライブラリとして参照するのが目的。なお、スマホアプリからもアップロードしてしまうと同じ写真が2重に表示されてしまう事になるので、スマホからのアップロードは行わないものとする。
この様な使い方をせず、スマホアプリからアップロードするだけの場合は、ココは読み飛ばして手順5へ。
手順4-1. SMB共有フォルダをUbuntu VMへマウント
Immichの外部ライブラリ機能を使うには、最初にQNAPで共有されているフォルダをUbuntu VMから参照できる必要がある。ここから具体的な設定例を説明する。前提としてQNAPの共有フォルダはSMBで共有されているものとする。
それぞれ、夫婦2人の写真がそれぞれのホームフォルダ(father,mother)で共有されており、これらは夫婦間では共有したくないプライベートな写真とする。また夫婦で共有する写真は別の共有フォルダに入っていると仮定(以下のイメージ)。
QNAP(ホスト)
├─ /share/homes/father/Photos
├─ /share/homes/mother/Photos
└─ /share/Shared/FamilyPhotos ← 夫婦で共有
まずはこれを、Ubuntu VMから参照できる様にマウントするのが最初の作業(以下のイメージ)。
Ubuntu VM
└─ /mnt/qnap/father
├─ /mnt/qnap/mother
└─ /mnt/qnap/family
まずは、cifs-utilsをUbuntu VMにインストールする。
sudo apt update
sudo apt install -y cifs-utils次にマウントポイントを作成する(UbuntuからQNAPの共有フォルダを参照するためのディレクトリ)。ここでは、father、mother、family(夫婦共有用)の3つを作成する。
sudo mkdir -p /mnt/qnap/{father,mother,family}認証情報ファイルを作成する。(nanoエディタの使い方はググってね。)
sudo nano /root/.qnap-credエディタが開く。ここにはQNAPで共有する写真フォルダに全てアクセスできる権限を持っているユーザ情報を入力する。ここでは”father”がその権限を持っているものとし、パスワードをfatherpassとすると、以下の様に記載する。domainは環境に応じて修正する。これらを記載したら保存してエディタを閉じる。
username=father
password=fatherpass
domain=WORKGROUPいま編集した、.qnap-credのアクセス権を設定する。
sudo chmod 600 /root/.qnap-credfstabをエディタで開く。
sudo nano /etc/fstabfstabが開いたら以下をコピペして、”QNAPのIPアドレス” 部分にQNAPのIPアドレスを入力する、もちろん他の部分も自分の環境に書き換えることも忘れずに。このfstabで、QNAPの共有フォルダとUbuntu VMのマウントポイントの紐付けを行っている。なお、Ubuntu VMからはQNAPの実ファイルは削除できない様にしている。
//QNAPのIPアドレス/homes/father/photos /mnt/qnap/father cifs credentials=/root/.qnap-cred,ro,iocharset=utf8,vers=3.1.1 0 0
//QNAPのIPアドレス/homes/mother/photos /mnt/qnap/mother cifs credentials=/root/.qnap-cred,ro,iocharset=utf8,vers=3.1.1 0 0
//QNAPのIPアドレス/Shared/FamilyPhotos /mnt/qnap/family cifs credentials=/root/.qnap-cred,ro,iocharset=utf8,vers=3.1.1 0 0fstabの編集が出来たら、以下のコマンドでマウントする。
sudo mount -aこれでマウントできたはず。もし、”your fstab has been modified,…云々のメッセージが表示された場合は、以下コマンドを打てばOK(何も表示されなければ必要無し)。
sudo systemctl daemon-reloadVMから正しくQNAPのデータが見えるか確認。
ls /mnt/qnap/fatherQNAPで共有している写真や配下のフォルダが羅列されればOK。上記はfatherの例だが、motherもfamilyも必ず確認する。もし何も見えない様であれば、.qnap-credやfstabの記述が誤っていないかを確認。
手順4-2. Immichで外部ライブラリとしてマウント
手順4-1が全て完了していることを前提に説明する。まず、先ほど作成したimmich-appディレクトリに移動する。既にそこにいるよって方はそのままでOK。
cd ~/immich-app先ほどダウンロードした2つのimmich関連ファイルを編集。まず、docker-compose.ymlを修正する。
sudo nano docker-compose.ymlimmich-server: のvolumes:を以下の様に修正する。当然ながら、fatherとかmother、familyといったワードはご自身の環境により変更する。
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
# extends:
# file: hwaccel.transcoding.yml
# service: cpu # 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 U>
- ${UPLOAD_LOCATION}:/data
- /etc/localtime:/etc/localtime:ro
- /mnt/qnap/father:/usr/src/app/external/father:ro ← 追加して自分の設定に修正
- /mnt/qnap/mother:/usr/src/app/external/mother:ro ← 追加して自分の設定に修正
- /mnt/qnap/family:/usr/src/app/external/family:ro ← 追加して自分の設定に修正
env_file:
- .env
ports:
- '2283:2283'
depends_on:
- redis
- database
restart: always
healthcheck:
disable: false続いて、immich-microservices:を追記する。追加する場所は、上記の最下行(disable: false)の次あたりに。
immich-microservices:
container_name: immich_microservices
image: ghcr.io/immich-app/immich-server:release
command: ["start.sh", "microservices"]
volumes:
- ${UPLOAD_LOCATION}:/data
- /etc/localtime:/etc/localtime:ro
- /mnt/qnap/father:/usr/src/app/external/father:ro ← 自分の設定に修正
- /mnt/qnap/mother:/usr/src/app/external/mother:ro ← 自分の設定に修正
- /mnt/qnap/family:/usr/src/app/external/family:ro ← 自分の設定に修正
env_file:
- .env
depends_on:
- redis
- database
restart: alwaysポイントは、immich-serever: と immich-microservices: のそれぞれの中にある、volumes: と depends on:の記述を一致させること。上記2つの修正が終わったら保存してdocker-compose.ymlを閉じる。
続いて、.envを開いて修正する。
sudo nano .env修正箇所は、IMMICH_WORKERSの追加、TZ=Etc/UTC → TZ=Asia/Tokyo、DB_PASSWORDの3点のみでOK。修正後は保存して.envを閉じる。
# The location where your uploaded files are stored
UPLOAD_LOCATION=./library
# The location where your database files are stored. Network shares are not supported for the database
DB_DATA_LOCATION=./postgres
# Immich Worker
IMMICH_WORKERS=2 ← これを追加
# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
TZ=Asia/Tokyo ← この様に修正
# The Immich version to use. You can pin this to a specific version like "v2.1.0"
IMMICH_VERSION=release
# Connection secret for postgres. You should change it to a random password
# Please use only the characters `A-Za-z0-9`, without special characters or spaces
DB_PASSWORD=(パスワード、何でもよい)
# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
以上で準備完了!
手順5. Immich を起動
いよいよimmchを起動する。
その前に、外部ライブラリを利用しない方は、手順4をすっ飛ばしてきたと思う。その場合に写真のアップロード先を変更したいという方は、Immichの起動前に.envを修正する。(手順4を設定した方は不要)
sudo nano .env例えば、ユーザ名がfatherで、自分のホームディレクトリの下に保存したい場合、以下の2か所を修正する。
UPLOAD_LOCATION=/home/father/library
DB_DATA_LOCATION=/home/father/postgres準備が整ったら、以下のコマンドでImmichを起動する。
sudo docker compose up -d以下の様に表示されたら無事起動。
✔ Network immich_default Created 0.0s
✔ Container immich_machine_learning Created 0.1s
✔ Container immich_redis Created 0.1s
✔ Container immich_postgres Created 0.1s
✔ Container immich_microservices Created 0.1s
✔ Container immich_server Created これで、Ubuntu VM側の設定は全て完了。お疲れ様でした。
基本的にSSHでコピペ(と自分の環境に修正)していけば動作するはずだが、途中でエラーが出た場合は、コピペが正しく出来ているか、nanoエディタで修正した部分が正しいか、自分の環境に書き換えているかを再度確認しよう。
手順6. WEBブラウザでの設定
それでは、最後の設定を進めていこう。まずWEBブラウザから以下のURLにアクセスする。
http:// (Ubuntu VMのIPアドレス):2283
最初にUbuntu Serverをインストールした時にIPアドレスを決めたはず。以下のURLにはそのIPアドレスを入力する。例えば、IPアドレスが、192.168.1.100であれば、以下の様に入力する。
例)http://192.168.1.100:2283
以下の様な画面が表示されるので、「はじめる」をクリックしよう。

一番最初にアクセスした時にのみ、管理者登録の画面が表示される。Immichの管理者となる方の情報を登録する。なお、ここの情報を間違えたり忘れたりすると、とんでもなく面倒なことになるので慎重に。

管理者登録で登録したメールアドレスとパスワードでログインする。

ログインすると、いくつかのオプション選択画面が出るのでこれはお好みで。最終的に完了ボタンを押すと、以下画面になるので、右上の〇をクリックする(この例ではTと書いてあるところ)。「管理」というボタンが表示されるので押す。

管理モードになるので、まず最初にユーザを追加していく。
今回の例だと、fatherとmotherの2人がImmichにアクセスする。いま設定を行っている”father”は既に管理者ユーザになっているので、”mother”のみをユーザ追加する。画面左上の「ユーザー」→「ユーザーを作成」をクリックする。


手順6-1. WebUIからの外部ライブラリの設定
ユーザを追加後、外部ライブラリの設定を行う。なお、外部ライブラリを使わない方はスキップして手順7へ。
管理メニューの左上にある「外部ライブラリ」→「ライブラリを作成」をクリックする。

まず最初にライブラリのオーナーを選択し作成ボタンを押す。オーナーごとにQNAP上のどのフォルダを参照するのかを設定する。因みに参照できるフォルダは最初にImmichにマウントしたディレクトリのみとなる。

画面中央の「フォルダ」部分の「追加」をクリックすると、フォルダのパスを設定する画面が表示される。ここに参照したい写真が入っている、Immichにマウントしたディレクトリを設定する。
これは先のdocker-compose.yml で設定した部分を指定する。例えば”father”がオーナーの場合、個人用写真フォルダを設定するには以下の様に指定する。”mother”がオーナーの場合はmotherとしてマウントしているパスを設定する。
/usr/src/app/external/father
更に、夫婦で共有する写真フォルダも同様に追加する。
/usr/src/app/external/family
追加したら、右上の「スキャン」をクリックすると、写真のサムネイル作成が始まる。画面左上のImmichロゴをクリックすると写真が表示されているはずだ。(大量に写真がある場合はサムネイル作成に長時間掛かるので暫く待つ)

手順6-2. 外部ライブラリの定期スキャン設定
Immichは実に多くの設定ができる。管理メニューの「設定」をクリックして各種の設定を行えるが、何も設定しなくても動作はする。但し、外部ライブラリの定期スキャン設定だけはやっておこう。
Immichは外部ライブラリに写真が追加されても、スキャンをしない限りImmich上に写真が表示されない。このため定期的にスキャン動作をさせるのがこの設定だ。プリセットでいくつかの設定ができるほか、Cronフォーマットで細かく設定もできるので、自分の利用方法に沿った設定を行うとよい。

手順7. スマホアプリの設定
最後にスマホアプリでアクセスする際の設定を説明する (iPhone用アプリの例)。
App Storeからアプリをダウンロードして起動すると、サーバのURLを入力する画面になるので、ここに、先ほどWebブラウザに入れたURLと同じアドレスを入力する。例えばIPアドレスが192.168.1.100 の場合は以下。
http://192.168.1.100:2283

「次」を押すと、メールアドレスとパスワード入力画面になるので入力する。

すると、写真が表示される。これだけです。

このアプリは、iPhoneの標準写真アプリの内容を読み込み、それをアップロードするという使い方もできるのだが、先にも書いた通り、外部ライブラリの参照のみで使う場合は、写真が2つ重複してしまう。
これを回避するために、バックアップの設定を確認する。上のアプリ画面の右上(Tマークの左の雲のマーク)を押すと以下の画面になるので、ここでバックアップされるアルバムが「なし」となっている事を確認する。

「なし」ではない場合、そのまま「選択」を押して、「全ての選択を解除」する。

以上が、スマホアプリで外部ライブラリのみを参照するための設定。もちろん、アプリからiPhoneの写真を同期させて使いたいといった方は、このアルバム選択画面で「最近の項目」にチェックを入れるとよい。
外出先からのアクセス
Immichを外出先からスマホでアクセスする方法はいくつかあるが、自宅のQNAPはTailscaleが動いているので、何も意識しなくてもアクセスできてしまう。いろいろ設定が大変だと思う方はセットアップをお勧めする。

Immichは快適そのもの
うまく設定できただろうか。この記事を書くにあたって、自分でも改めて記事通りに設定を行い動作しているので、何かの間違いが無ければ動作するはずだ。
Immichを使ってみると、その速度感がQuMagieと全く異なり快適そのものだ。外出先からのアクセスでは通信状況によって、動画などの大きいデータは多少もたつくケースがあるが、iPhoneの標準写真アプリと同じ感覚で使えるのは驚き。今後、仮にQNAPとオサラバする時が来ても、何かでImmichを動かせれば問題ないし。暫くこのアプリのお世話になろう。
