はじめに:脱Google Photos。最強の自前写真サーバーを構築する
スマートフォンのカメラが高画質化するにつれ、あっという間に底をつくクラウドストレージの容量。サブスクリプション費用を払い続けるループから抜け出すため、完全自前の写真バックアップサーバーを構築するベストプラクティスを解説します。
本記事では、Linuxやサーバー構築が初めての初心者の方でも絶対に迷わずに完成できるよう、画面の遷移から入力するコマンドまで、すべての手順を1つも省略せずに解説します。記事の通りに進めれば、Google Photosの「保存容量の節約モード」と全く同じ環境がご自宅に完成します。
前提:選べる3つのハードウェア構成
サーバーとなるPCは、ご自身の予算や余っている機材に合わせて以下の3パターンから選択できます。どの構成でも本記事の手順で構築可能です。
- 【推奨】ミニPC + デュアルSSD構成(例: N95搭載機など)
OS用に256GB、写真データ用に2TBのSSDを搭載する構成。OSとデータ領域を物理的に分けることで、将来的な拡張や復旧が容易になります。第12世代のN95などは、QSV(ハードウェアエンコード)が強力に効くため超省電力かつ爆速です。 - 【初心者向け】シングルSSD構成(例: 1TB×1枚)
OSも写真データも1つのSSDに保存する構成。面倒な「ディスクのマウント作業」をスキップできるため、最も簡単に構築できます。 - 【エコ運用】古いPCの再利用(OS用SSD + データ用HDD)
余っている旧型PCを活用する構成。OSをSSDに入れてシステムを高速化し、大容量の写真データは安価なHDDに保存します。設定手順は「パターン1」と全く同じです。
ステップ0:Ubuntu Serverの完全インストール手順
Windows等のデスクトップOSはリソースを大きく消費するため、今回はマウス操作の画面(GUI)を持たない「Ubuntu Server」を採用し、サーバーの全パワーを写真処理に回します。
事前準備:インストール用USBメモリの作成
- 容量8GB以上の空のUSBメモリを用意し、普段使っているメインPCに挿します。
- Ubuntu公式サイトにアクセスし、「Download Ubuntu Server 24.04 LTS」をクリックしてISOファイル(ディスクイメージ)をダウンロードします。
- USB書き込みソフトRufusをダウンロードして起動します。
- Rufusの画面で「デバイス」にUSBメモリを、「ブートの種類」で先ほどダウンロードしたISOファイルを選択し、「スタート」を押します。(※警告が出ても「OK」で進めてください。USBの中身はすべて消去されます)
インストール作業(全画面の遷移手順)
作成したUSBメモリをサーバー用PCに挿し込み、電源を入れます。メーカーロゴが出た瞬間にキーボードの F7 または Delete 等(メーカーによる)を連打し、起動メニューからUSBメモリを選択します。
【重要】ここから先はマウスが使えません。キーボードの「矢印キー」「Tabキー」「スペースキー」「Enterキー」のみで操作します。
- 最初のメニュー画面:「Try or Install Ubuntu Server」を選んで
Enterを押します。 - Choose your language(言語): 必ず English を選んで
Enter。(※日本語を選ぶと後の作業で文字化けし、パニックの原因になります) - Keyboard configuration(キーボード): 「Layout」に合わせて
Enterを押し、リストからJapaneseを選択。一番下の「Done」を選んでEnter。 - Choose type of install(種類): デフォルトの「Ubuntu Server」が選ばれている状態で「Done」を選んで
Enter。 - Network connections(ネットワーク): 自動で
192.168.0.70のようなIPアドレスが表示されます。このIPアドレスを必ずスマホで写真を撮るかメモしてください。確認したら「Done」でEnter。 - Proxy / Archive mirror: 何も変更せず、どちらも「Done」で
Enter。 - Storage configuration(ストレージ / 【超重要】): インストール先のディスクを選びます。デュアルドライブ(パターン1・3)の場合、ここでOS用の小さな容量のディスク(256GBなど)に [X] がついていることを確認してください。大容量ディスクの方にインストールしないよう注意!確認したら「Done」→警告が出たら「Continue」で
Enter。 - Profile setup(プロフィール): 以下の項目を入力し、「Done」で
Enter。
・Your name:hoge(何でもOK)
・Your server’s name:myserver(何でもOK)
・Pick a username:hoge(ログインに使うユーザーネーム)
・Choose a password: 任意のパスワードを入力
・Confirm your password: パスワードを再入力 - Upgrade to Ubuntu Pro: デフォルトの「Skip for now」のまま「Continue」で
Enter。 - SSH Setup(【超重要】): 「Install OpenSSH server」の項目に合わせ、スペースキーを押して [X] マークをつけます(これを忘れると遠隔操作ができません)。「Done」で
Enter。 - Featured Server Snaps: 何も選ばず、一番下の「Done」で
Enter。
インストールが開始されます。画面下部に [ Reboot Now ] という文字が表示されるまで数分待ち、表示されたら選択して Enter を押します。
画面に「Please remove the installation medium, then press ENTER」と表示されたら、USBメモリを引っこ抜いてから Enter を押します。
再起動後、黒い画面に hoge login: と表示されれば基礎工事は完璧に完了です!サーバー用PCからモニターやキーボードを外し、以降はメインPCから遠隔操作を行います。
ステップ1:SSH接続とシステムの最新化
メインPCのターミナル(WindowsならコマンドプロンプトやPowerShell、Macならターミナルアプリ)を開き、以下のコマンドを入力します。
※ hoge は先ほど作成したユーザー名、192.168.x.x はメモしたサーバーのIPアドレスに読み替えてください。
# サーバーへ遠隔接続する
ssh hoge@192.168.x.x
【初心者が不安になるポイント解説】
初回接続時のみ Are you sure you want to continue connecting (yes/no/[fingerprint])? と聞かれます。これは「本当にこのサーバーを信用して繋ぎますか?」という確認なので、キーボードで yes と入力して Enter を押してください。
次にパスワードを聞かれます。キーボードを叩いても画面には一切文字(***など)が表示されませんが、内部的にはしっかり入力されています。気にせずパスワードを打ち込み、Enter を押してください。
無事にログインできたら、サーバーの中身を最新状態にアップデートします。以下のコマンドを1行ずつコピペして実行してください。
sudo apt update
sudo apt upgrade -y
ステップ2:データ用ドライブのマウント(※パターン1・3のみ)
※【シングルSSD構成(パターン2)の方】はこのステップを完全に飛ばして「ステップ3」へ進んでください。
デュアルドライブ構成の場合、増設した2TBのSSD(またはHDD)をOSに認識させ、/mnt/data というフォルダとして使えるように接続(マウント)します。
# 1. 接続されているディスクの一覧を確認します
lsblk
結果の中に、nvme0n1 や sda、sdb といった名前で、容量が 2TB(1.8Tなどと表示されます)のディスクがあるのを見つけてください。ここでは例として nvme0n1 だったとして進めます。ご自身の環境に合わせて適宜コマンド内の名前を書き換えてください。
# 2. ディスクをLinux用の「ext4」形式でフォーマットします(中身はすべて消えます)
# 以下の2行を1行ずつ実行します
sudo parted /dev/nvme0n1 --script mklabel gpt mkpart primary ext4 0% 100%
sudo mkfs.ext4 /dev/nvme0n1p1
# 3. /mnt/data という名前の接続口(フォルダ)を作成し、そこにディスクを合体させます
sudo mkdir -p /mnt/data
sudo mount /dev/nvme0n1p1 /mnt/data
# 4. 今ログインしているユーザー(hoge)が自由に読み書きできるように権限を変更します
sudo chown -R hoge:hoge /mnt/data
# 5. サーバーを再起動しても自動でマウントされるように設定ファイル(fstab)に書き込みます
sudo cp /etc/fstab /etc/fstab.bak
echo "UUID=$(sudo blkid -s UUID -o value /dev/nvme0n1p1) /mnt/data ext4 defaults 0 2" | sudo tee -a /etc/fstab
# 6. エラーが出ないかテストします(何も表示されなければ成功です!)
sudo mount -a
ステップ3:ブラウザ管理ツール「CasaOS」の導入
黒い画面でのコマンド操作を最小限にするため、ブラウザからマウス操作でサーバーを管理できる「CasaOS」をインストールします。以下のコマンド1行をコピペするだけです。
curl -fsSL https://get.casaos.io | sudo bash
数分待って「CasaOS is running…」と表示されればインストール完了です。メインPCのブラウザ(Chromeなど)を開き、アドレスバーに 192.168.x.x (サーバーのIPアドレス)を入力します。
CasaOSの歓迎画面が出るので、初期アカウント(ユーザー名とパスワード)を作成してダッシュボードを開いておいてください。
ステップ4:Immichの構築準備とファイルの取得
いよいよコアとなる写真管理アプリ「Immich」の構築です。再びターミナル(黒い画面)に戻り、データを保存するベースフォルダを作成し、公式から設計図を取得します。
# 【パターン1・3(デュアルドライブ)の場合】
sudo mkdir -p /mnt/data/immich
cd /mnt/data/immich
# 【パターン2(シングルSSD)の場合】
mkdir -p ~/immich
cd ~/immich
移動できたら、以下の2行を1行ずつ実行して、公式の設定ファイルをダウンロードします。
sudo wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
sudo wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env
ステップ5:保存先の設定(.env の編集)
ダウンロードした環境変数ファイル(.env)を編集し、実際の写真データが保存されるパスを指定します。ターミナル上でテキストエディタ「nano」を使います。
sudo nano .env
エディタが開いたら、十字キーで移動して、ご自身のハードウェア構成に合わせて以下の2箇所を書き換えます。
# --- パターン1・3(デュアルドライブ)の場合 ---
【変更前】
UPLOAD_LOCATION=./library
DB_DATA_LOCATION=./postgres
【変更後】
UPLOAD_LOCATION=/mnt/data/immich/library
DB_DATA_LOCATION=/mnt/data/immich/postgres
# --- パターン2(シングルSSD)の場合 ---
【変更前】
UPLOAD_LOCATION=./library
DB_DATA_LOCATION=./postgres
【変更後】(※hogeはご自身のユーザー名にしてください)
UPLOAD_LOCATION=/home/hoge/immich/library
DB_DATA_LOCATION=/home/hoge/immich/postgres
【保存して閉じる操作(nano共通)】
1. キーボードの Ctrl を押しながら O(オー)を押す。
2. 画面下部にファイル名が表示されたら、そのまま Enter を押す。
3. Ctrl を押しながら X を押してエディタを閉じる。
ステップ6:アーキテクチャの魔改造(docker-compose.yml)
ここが本記事の最大のキモです。Immichの公式設計図を編集し、動画変換を爆速にする「QSV有効化」と、画質を保ったまま容量を激減させる「Upload Optimizer」の追加を行います。
sudo nano docker-compose.yml
修正箇所1:デバイスのパススルーと既存ポートの閉鎖
十字キーで下にスクロールし、immich-server: と immich-machine-learning: を探します。それぞれに devices: を追記します。また、immich-server: の下にある ports: は行頭に # をつけて無効化(コメントアウト)します。
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
# ↓ここから2行を追加(行の左側の空白の数を上と揃えてください)
devices:
- /dev/dri:/dev/dri
# ↓portsの2行は先頭に # をつけてコメントアウトします
# ports:
# - "2283:2283"
immich-machine-learning:
container_name: immich_machine_learning
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
# ↓ここから2行を追加
devices:
- /dev/dri:/dev/dri
修正箇所2:Optimizerの追加
ファイルの一番下付近までスクロールすると volumes: という行があります。その「すぐ上の空行」に、以下のブロックを丸ごとコピー&ペーストで追記します。一番左の空白(インデント)がズレないように注意してください。
# ↓↓↓ ここから追記 ↓↓↓
immich-upload-optimizer:
container_name: immich_upload_optimizer
image: ghcr.io/miguelangel-nubla/immich-upload-optimizer:latest
ports:
- "2283:2283"
environment:
- IUO_UPSTREAM=http://immich-server:2283
depends_on:
- immich-server
restart: always
# ↑↑↑ ここまで追記 ↑↑↑
volumes: # ←この行の「すぐ上」に追記する
model-cache:
【技術Tips】
このOptimizerは、標準設定(デフォルト)のまま動かすのが最も安定して優秀です。自動で画質80の最適化が行われます。自作のタスクファイルを読み込ませると拡張子エラーでアップロードできなくなるため、上記のスッキリした記述が最適解となります。
追記できたら、先ほどと同じように Ctrl+O → Enter → Ctrl+X で保存して閉じます。
ステップ7:システム起動と最終セットアップ
準備がすべて整いました。以下のコマンドを実行してシステム全体を起動します(ダウンロードに数分かかります)。最後に Started と並べば成功です!
sudo docker compose up -d
1. CasaOSアイコンのリンク修正
ブラウザでCasaOS(http://192.168.x.x)を開きます。ポートをOptimizerに変更したため、そのままImmichアイコンをクリックしてもエラーになります。
アイコン右上の「⋮(3点リーダー)」→「設定(Settings)」を開き、少し下にある「Web UI ポート」の欄に 2283 を入力して右上(または下部)の「保存」を押してください。これでアイコンから一発でアクセス可能になります。
2. ハードウェアアクセラレーションの有効化
ブラウザで http://192.168.x.x:2283 を開き、「Welcome to Immich!」の画面から初期の管理者アカウントを作成します。
ログイン後、右上のアイコンから「管理(Administration)」→「設定(Settings)」へ進み、以下の2つを設定します。
- Video Transcoding: 開いて Hardware Acceleration を
Quick Sync Video(古いPCならVAAPI)に変更し、保存(Save)を押す。 - Machine Learning: 開いて Hardware Acceleration を
OpenVINOに変更し、保存(Save)を押す。
完成!
以上で、「見た目の画質は保ちながらファイルサイズが数MBから数百KBに激減する、完全自前版Google Photos」の構築がすべて完了しました!お疲れ様でした!
スマートフォンの専用アプリ(iOS/Android対応)から「バックグラウンドアップロード」を設定すれば、日々の写真が自動的に最適化され、ご自身のサーバーに蓄積されていきます。
大容量ストレージと省電力サーバーを組み合わせたこのインフラ環境で、容量を気にせず一生分の写真を保存できる最強の自宅サーバーライフをお楽しみください。