脱Googleフォト!ラズパイ4 + Immich + HDDでメディアサーバを構築する
[備忘録] 脱Googleフォト!ラズパイ4 + Immich + exFAT HDDで最強のメディアサーバを構築する
はじめに
Googleフォトの容量制限やスマホの容量が限界になったので、セルフホスト型のメディアサーバ 「Immich」 をRaspberry Pi 4で構築しました。
データ保存先には手持ちの exFAT形式の外付けHDD を使用し、外出先からも安全にアクセスできるように Tailscale を導入しています。
構築中に「32bit OSの罠」や「exFATのマウント権限」でハマったので、その解決策も含めてまとめます。
環境
- ハードウェア: Raspberry Pi 4 Model B
- OS: Raspberry Pi OS (64-bit) Bookworm
- ストレージ: 外付けHDD (exFAT形式)
- ソフトウェア: Docker, Docker Compose, Tailscale
1. OSのインストール (最大の罠)
Immichは機械学習ライブラリを使用するため、64-bit OSが必須です。
Raspberry Piのデフォルト(推奨)が32-bitだった時期があるため注意が必要です。32-bit版だと no matching manifest for linux/arm/v8 というエラーで動きません。
- Raspberry Pi Imager を使用
- OS選択で 「Raspberry Pi OS (64-bit)」 を選択
-
歯車アイコンから、ホスト名、SSH有効化、ユーザ(
pi)設定、Wi-Fi設定を事前に済ませて書き込む
2. Dockerのセットアップ
OSが起動したらSSHで接続し、Docker環境を整えます。
# システム更新
sudo apt update && sudo apt upgrade -y
# 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
3. 外付けHDD (exFAT) の自動マウント
ここが重要です。exFATはLinux標準の権限管理(chmodなど)が効かないため、マウント時に「誰が使うか」を指定する必要があります。
準備: exFAT用ドライバのインストール
Raspberry Pi OSでexFATを安定して扱うためのパッケージを入れます。
sudo apt install exfat-fuse exfat-utils -y
HDDの特定
lsblk
# 容量を見てデバイス名を特定 (例: sda3)
sudo blkid /dev/sda3
# -> UUID="xxxx-xxxx-xxxx" と TYPE="exfat" であることを確認してUUIDをメモ
マウント設定 (fstab)
# マウントポイント作成
sudo mkdir -p /mnt/hdd
# fstab編集
sudo nano /etc/fstab
追記内容 (exFATの場合):
UUID=メモしたUUID /mnt/hdd exfat defaults,uid=1000,gid=1000,umask=0022 0 0
マウントの確認
設定後、エラーが出ないか確認します。
sudo mount -a
df -h | grep hdd
# /mnt/hdd が表示されれば成功
4. Immichの構築
公式のDocker Composeファイルを使用します。私はHDD内に専用フォルダを作ってマウントして運用しています。
# HDD内にデータ用フォルダ作成
mkdir -p /mnt/hdd/immich_data
# Immich用作業ディレクトリ作成
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
.env の編集
nano .env
データの保存先をHDDに向けます。
# 変更前
# UPLOAD_LOCATION=./library
# 変更後 (HDD上のフォルダを指定)
UPLOAD_LOCATION=/mnt/hdd/immich_data
起動
docker compose up -d
初回はイメージのダウンロードとDB初期化で数分かかります。
ブラウザから http://(ラズパイのIP):2283 にアクセスし、管理者アカウントを作成します。
5. Tailscaleで外部アクセス
ポート開放をせずに、外出先からスマホでバックアップするためにTailscaleを使います。
# インストール
curl -fsSL https://tailscale.com/install.sh | sh
# 起動
sudo tailscale up
表示されたURLにアクセスして認証するだけです。
スマホ側の設定
- スマホに Immichアプリ と Tailscaleアプリ を入れる
- TailscaleをONにする
- Immichの接続先URLに
http://(TailscaleのIP):2283/apiを入力
まとめ
exFAT形式のHDDを使うことで、万が一ラズパイが壊れても、HDDをMacやWindowsに繋げばすぐにデータを読み出せる安心感があります。
Immichの操作感はGoogleフォトに非常に似ていて(個人的にはGoogleフォトより)非常に良いです!
Discussion