📸

脱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 というエラーで動きません。

  1. Raspberry Pi Imager を使用
  2. OS選択で 「Raspberry Pi OS (64-bit)」 を選択
  3. 歯車アイコンから、ホスト名、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にアクセスして認証するだけです。

スマホ側の設定

  1. スマホに Immichアプリ と Tailscaleアプリ を入れる
  2. TailscaleをONにする
  3. Immichの接続先URLに http://(TailscaleのIP):2283/api を入力

まとめ

exFAT形式のHDDを使うことで、万が一ラズパイが壊れても、HDDをMacやWindowsに繋げばすぐにデータを読み出せる安心感があります。
Immichの操作感はGoogleフォトに非常に似ていて(個人的にはGoogleフォトより)非常に良いです!

Discussion