⛳
ミニPCでマルチサーバー構築 [Immichコンテナ]
ミニPCでマルチサーバー構築シリーズのImmichコンテナ構築の記録メモです。[Immich v1.103.1]
シリーズ
- N100搭載ミニPCでマルチサーバーの構想と構築準備
- ミニPCでマルチサーバー構築 [OS等インストール]
- ミニPCでマルチサーバー構築 [Sambaコンテナ]
- ミニPCでマルチサーバー構築 [PostgreSQLコンテナ]
- ミニPCでマルチサーバー構築 [Nginxコンテナ]
- ミニPCでマルチサーバー構築 [Immichコンテナ] この記事
- ミニPCでマルチサーバー構築 [VaultwardenコンテナとTailscale]
- ミニPCでマルチサーバー構築 [AdGuard Homeコンテナ]
- ミニPCでマルチサーバー構築 [GUI環境整備]
簡単な要件
- 無料で使用できる
- バックアップとして機能する
- 元の写真は編集されずそのまま保管される
- 実ファイルの場所をある程度制御可能
- 写真をいい感じに一覧化してくれる
- PC,スマホ両方から簡単にアクセス可能
- 認証機能がある
- 長期間開発が滞っていない
検討事項とコンテナ化
- たくさんあるソリューションを比較している良いサイトで検討
- PiwigoとImmichで悩んだが、公式がDockerを推奨しているImmichに決定
- 公式の
docker-compose.yml
が存在するためそれを使用する-
compose.yaml
は一つに纏めておきたいのでカスタマイズして取り込む - ただし今後のバージョンアップ時に変更される可能性が明記されている
- バージョンアップ時にメンテが必須になるデメリットがある
-
Docker Compose周り作成
ディレクトリ構成
$ tree .
.
├── compose.yaml
└── immich
└── var.env
compose.yaml
- ポート2283はデフォルトのまま
- 注意点
- redisコンテナの名前は
redis
でなければならない - postgresqlコンテナの名前は
database
でなければならない -
.env
を使用しなくてもDB設定等伝播のためenv_file
は必要- 元の
.env
はcompose.yaml動的変更と上記の両方を担う
- 元の
- redisコンテナの名前は
compose.yaml
services:
immich:
image: ghcr.io/immich-app/immich-server:release
restart: unless-stopped
ports:
- "2283:3001"
configs:
- source: common-lctime
target: /etc/localtime
env_file:
- ./immich/var.env
volumes:
- /mnt/ssd1/photo:/usr/src/app/upload # UPLOAD_LOCATION
networks:
- imcnet
command: ['start.sh', 'immich']
depends_on:
- immich-redis
- immich-pgsql
immich-micro:
image: ghcr.io/immich-app/immich-server:release
restart: unless-stopped
configs:
- source: common-lctime
target: /etc/localtime
env_file:
- ./immich/var.env
volumes:
- /mnt/ssd1/photo/:/usr/src/app/upload # UPLOAD_LOCATION
networks:
- imcnet
command: ['start.sh', 'microservices']
depends_on:
- immich-redis
- immich-pgsql
immich-ml:
image: ghcr.io/immich-app/immich-machine-learning:release
restart: unless-stopped
env_file:
- ./immich/var.env
volumes:
- mlmodel-cache:/cache
networks:
- imcnet
immich-redis:
container_name: redis
image: registry.hub.docker.com/library/redis:6.2-alpine@sha256:84882e87b54734154586e5f8abd4dce69fe7311315e2fc6d67c29614c8de2672
restart: unless-stopped
networks:
- imcnet
immich-pgsql:
container_name: database
image: registry.hub.docker.com/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
restart: unless-stopped
environment:
POSTGRES_PASSWORD: foobar
POSTGRES_USER: immich
POSTGRES_DB: immich
volumes:
- /srv/immich/db:/var/lib/postgresql/data
networks:
- imcnet
onfigs:
common-lctime:
file: /etc/localtime
volumes:
mlmodel-cache:
networks:
imcnet:
var.env
# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables
# The location where your uploaded files are stored
UPLOAD_LOCATION=/mnt/ssd1/image/photo
# The location where your database files are stored
DB_DATA_LOCATION=/srv/immich/db
# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=release
# Connection secret for postgres. You should change it to a random password
DB_PASSWORD=foobar
# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=immich
DB_DATABASE_NAME=immich
設定
- 公式では
.env
ファイルで設定を指定する方式- どうせ自分用に一つに纏めるので
compose.yaml
にハードコードした - バージョンアップ時のメンテを自身に強要する意味もある
- どうせ自分用に一つに纏めるので
- 実ファイルの場所は
UPLOAD_LOCATION
で指定可能- ボリュームのマウント先を制御しているだけなので手で変更
- 写真の保存パス指定のことをImmichでは"Storage Template"と呼ぶ
- デフォルトでは
Year/Year-Month-Day/Filename.Extension
- 量的に日付dirで分ける必要はないので以下に変更
Year/YMD_Filename
- 実際の設定値は
{{y}}/{{y}}{{MM}}{{dd}}_{{filename}}
- 設定画面では拡張子がなぜか
jpg
に固定されていたので{{ext}}
は無し - 実際の保存は元の拡張子でそのまま保存された
- デフォルトでは
- 上記設定を適用した際の
UPLOAD_LOCATION
は以下のように使用される- 元の画像は
library/admin
以下に保存された -
encoded-video
,thumbs
,upload
は自動で作成される
- 元の画像は
UPLOAD_LOCATION
├── encoded-video
├── library
│ └── admin
│ ~~~~~
│ ├── 2022
│ ├── 2023
│ └── 2024
│ ├── 20240407_IMG_3245.HEIC
│ ~~~~~
├── thumbs
└── upload
- 別に動画は再エンコードしてほしくないので以下設定を変更
- Administration -> Settings -> Video Transcoding Settings
- TRANSCODE POLICY を "Don't transcode ~~" に変更
- Administration -> Settings -> Video Transcoding Settings
- 初回アップロード時に負荷がかかるので以下変更を推奨
- Administration -> Settings -> Job Settings
- 少なくとも Thumbnails はCPUコア数にする
- この処理だけはN100性能高めで良かったと思った
- Administration -> Settings -> Job Settings
Discussion