Immichなる、Googleフォトっぽいサービスをローカルで立ち上げられるのに興味を持って、Raspberry Pi 4で動かしている家族写真共有ストレージを乗り換えた際の設定メモです。
今までのサーバ設定、他の方の記事見てその場その場で対応してたけど、久しぶりに触ると何もかも忘れているので、ちゃんと記録しておく。
今までの運用
/mnt/hdd/nashddにHDDをマウントしてSambaで共有
各自が以下の月毎のフォルダにスマホなどから画像、動画をアップロード
- /mnt/hdd/nashdd/写真
- 2015
- 201501
- 201502
- ...
- 2016
- 201601
- 201602
- ...
- ...
閲覧は、Plex Media Serverで/mnt/hdd/nashdd以下を読ませてサムネイルを出力
テレビからはDLNAサーバとして参照、大画面でも写真を見る
これからの運用
/mnt/hdd/nashdd/写真を外部ライブラリとして参照
今後のファイルはSamba経由ではなくImmichアプリからアップロード…と思ったんですが、
従来通りここに月別でユーザーごと分かれることなくファイルまとまっていて欲しいという要望があったのと、
LINEでもらったExifない写真とかを月変わってから保存→アップロードすると翌月のフォルダに入ってしまう問題を解消できないことから、
アップロード機能は実質封印して外部ライブラリ一本で行きます ![]()
(アップロード機能でアップロードしたものをここにrsync、とかも考えたんだけど、そしたら外部ライブラリにも同じファイルが二重に登録されてしまい、内部&外部ライブラリでの重複排除はできないので、ダメだった)
テレビからはImmich Android TV(非公式Android TVクライアント)をインストールして見られる
OSインストール
元の環境はRaspberry Pi OS (32-bit)だったんですが、64-bitである必要があるようなので、新しいmicroSDカードにRaspberry Pi ImagerでRaspberry Pi OS (64-bit)をインストール
sudo apt update && sudo apt upgrade -y
Dockerのセットアップ
# Dockerインストール
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# ユーザをdockerグループに追加 (sudoなしで実行するため)
sudo usermod -aG docker $USER
sudo reboot
HDDフォーマット、マウント
先に元々使っていたスティック型SSDで後続のImmichセットアップ作業を行なっていたんですが、一度Immich動かしてみたタイミングでライブラリのスキャンとかで老体に鞭打ったせいか壊れてしまい、新しくHDD買ってのトライとなります ![]()
(ファイルは別で2ヶ月前ぐらいぶんまでバックアップとってくれていたので助かりました)
前も使ってたLinuxでの速度&安定性のext4と、トラブル時Win/Macに繋いだらぱっと中身見られるexFATと天秤にかけたんですが、今回もext4で行きます。
lsblk
# 容量を見てデバイス名を特定 (例: sda1)
# ext4フォーマット
sudo mkfs.ext4 /dev/sda1
sudo blkid /dev/sda1
# UUIDをメモ
# マウントポイント作成
sudo mkdir -p /mnt/hdd/nashdd
# fstab編集
sudo nano /etc/fstab
以下を追記
UUID=メモしたUUID /mnt/hdd/nashdd ext4 defaults,nofail 0 2
# /etc/fstab の内容でマウント
sudo mount -a
Sambaセットアップ
# Sambaインストール
sudo apt install -y samba
以下追記
家庭内ローカルなので、ゲストでやりたい放題設定
[pi]
path = /mnt/hdd/nashdd
browseable = yes
writable = yes
read only = no
guest ok = yes
guest only = yes
create mode = 0777
directory mode = 0777
force user = pi
store dos attributes = no
# サービス再起動
sudo service smbd restart
sudo service nmbd restart
# OS再起動時も自動起動する
sudo systemctl enable smbd
sudo systemctl enable nmbd
これでWin/Mac/スマホのファイラーから\\raspi4.local\piが見えて、中にファイル入れられます。
バックアップから過去の写真を既存運用と同じフォルダ構成で復元します。
Immichセットアップ
# HDD内にデータ格納用、DB用フォルダ作成
mkdir -p /mnt/hdd/nashdd/immich/library
mkdir -p /mnt/hdd/nashdd/immich/postgres
# 作業ディレクトリ作成
mkdir ~/immich && cd ~/immich
# ファイル取得
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env
以下書き換えor追記
# The location where your uploaded files are stored
UPLOAD_LOCATION=/mnt/hdd/nashdd/immich/library
# The location where your database files are stored. Network shares are not supp
orted for the database
DB_DATA_LOCATION=/mnt/hdd/nashdd/immich/postgres
# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifi
er from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#
List
# TZ=Etc/UTC
TZ=Asia/Tokyo # cronジョブが想定通りの時刻に動くようタイムゾーンを明記
# (前略)
volumes:
# Do not edit the next line. If you want to change the media storage locat
ion on your system, edit the value of UPLOAD_LOCATION in the .env file
- ${UPLOAD_LOCATION}:/data
- /etc/localtime:/etc/localtime:ro
- /mnt/hdd/nashdd:/nashdd # 外部ライブラリを探すためマウントポイントを追加、多分roでも良い?
docker compose up -dして、暫くしたらブラウザからhttp://raspi4.local:2283でアクセスできます。
管理→外部ライブラリ
/nashdd/写真フォルダを追加する(volumesで指定したパス表記基準)
管理→設定
外部ライブラリのスキャン
毎時で行う
ストレージテンプレート
{{y}}/{{y}}{{MM}}/{{filename}}
運用に記載した通り、アップロード機能は封印ではあるんですが、一応既存の年月フォルダ形式に揃えています。
動画トランスコード設定
トランスコードポリシー→トランスコードポリシー: 全ての動画
初期設定のままだとTVでは再生エラーになる動画がいくらかあったし、再生負荷軽い方が良いので、全部あらかじめトランスコードします。
HDD入れ替えたので容量は余裕。
フォルダ構造をアルバム化する
Plex Media Serverの時はライブラリのフォルダごとで見ることができていたので、同じように月毎のフォルダ単位で見られるようにしておきます。
一応、Webやスマホアプリなら直フォルダ閲覧機能あるっぽいですが、TVの方はなさそうなのと、サムネイル出た方がテンション上がるので、月毎フォルダ単位でアルバムを作ります。
Immich Folder Album Creatorを使って、定期的にフォルダ構成をアルバム化し、中のファイルをアルバムに所属させます。
必要な権限を設定したAPIキーを発行
以下を追記
FOLDER_ALBUM_CREATOR_API_KEY=APIキー
ALBUM_SHARE_USER=アルバムを共有したいユーザー
services:
# (既存部分省略)
immich-folder-album-creator:
image: salvoxia/immich-folder-album-creator:latest
container_name: immich_folder_album_creator
restart: unless-stopped
environment:
- API_URL=http://immich_server:2283/api
- API_KEY=${FOLDER_ALBUM_CREATOR_API_KEY}
# adminユーザがImmichからアップロードしたファイルも同じアルバムに入れる対象としていた試行錯誤の名残
- ROOT_PATH=/data/library/admin,/nashdd/写真
- ALBUM_LEVELS=2,2 # yyyymmのフォルダ単位(ROOT_PATHから数えて2〜2階層目)でアルバムにする
- SYNC_MODE=2 # 物理移動した際に古いアルバムから削除する
- SHARE_WITH=${ALBUM_SHARE_USER}
- SHARE_ROLE=viewer
- CRON_EXPRESSION=30 * * * * # 毎時30分に実行
- TZ=Asia/Tokyo
volumes:
# immich-serverと同じボリューム設定にする必要があるっぽい
- ${UPLOAD_LOCATION}:/data:ro
- /mnt/hdd/nashdd:/nashdd:ro