Windows 11 ProとWSL2環境におけるImmichサーバー構築とTailscaleによるセキュアな外部アクセス実装

Windows 11 ProとWSL2を基盤に、Immichを用いたセルフホスト型写真管理サーバーを構築。Tailscaleによるセキュアな外部接続と、Upload Optimizerによるストレージ容量の動的制御を実装したエンジニアリングログ。

WSL2およびDocker Desktop環境におけるImmichの構築とTailscaleによるセキュアな外部アクセスの確立

Windows 11 Pro環境でImmichを運用するためには、Linuxネイティブなバイナリを実行するためのWSL2バックエンドが必須となります。まず、Windowsの機能の有効化から「Linux用Windowsサブシステム」および「仮想マシンプラットフォーム」を有効にします。再起動後、Docker Desktopをインストールしますが、この際「Use WSL 2 instead of Hyper-V」のオプションを必ず選択してください。

WSLのバージョンが古い場合、Dockerエンジンの起動に失敗するケースがあります。その際は、管理者権限のコマンドプロンプトから以下のコマンドを実行し、サブシステムを最新の状態に同期させます。

wsl --update
wsl --shutdown

これにより、2026年現在の最新カーネルが適用され、Immichのマイクロサービス群が要求するシステムコールとの互換性が確保されます。

Tailscaleを用いたメッシュVPNによる外部アクセス経路の確立

ポート開放や動的DNSの設定を回避し、セキュアなリモートアクセスを実現するためにTailscaleを導入します。TailscaleはWireGuardプロトコルをベースとしたメッシュVPNであり、キャリアグレードNAT(CGNAT)環境下でも安定した通信を可能にします。

🛠️ 構築手順:まずMini PC(サーバー側)にTailscaleをインストールし、認証を完了させます。次にTailscale管理コンソールから、当該デバイスに割り当てられた固定IP(例: 100.x.x.x)を確認します。モバイルデバイス(iOS/Android)にもTailscaleを導入し、同一アカウントでログインすることで、物理的なネットワーク構成に依存しないプライベートな通信路が確立されます。

この構成により、外出先からでもサーバーのローカルIPを指定するだけで、写真のバックアップと閲覧が可能になります。

Docker ComposeによるImmichスタックのデプロイと環境変数定義

Immichのデプロイには、保守性と再現性を担保するためにDocker Composeを利用します。まず、C:\immich-serverディレクトリを作成し、その配下にメディア保存用のlibraryフォルダを配置します。設定ファイルである.envおよびdocker-compose.ymlの構成を定義します。

.envファイル内でのパス指定は、Dockerのボリュームマウント仕様に基づき、Windows形式ではなくスラッシュを用いた形式で記述する必要があります。

UPLOAD_LOCATION=C:/immich-server/library
DB_PASSWORD=your_secure_password
TZ=Asia/Tokyo

次に、docker compose up -dを実行してコンテナ群を起動します。初期起動時にはPostgreSQLの拡張機能であるpgvecto-rsの初期化が行われるため、CPU負荷が一時的に上昇しますが、N100プロセッサの4コア環境であれば数分で安定状態に移行します。

Immich Upload Optimizerによるストレージ容量の動的制御

1TBのNVMe SSDを効率的に運用するため、アップロードされるメディアのファイルサイズを制限するImmich Upload Optimizerをプロキシとして導入します。このサービスは、クライアントからのリクエストをインターセプトし、指定された閾値を超えるファイルを圧縮してからImmichサーバーへ転送します。

docker-compose.ymlに以下のサービス定義を追加し、ポート2283をこのプロキシが占有するように構成します。

immich-upload-optimizer:
  image: ghcr.io/miguelangel-nubla/immich-upload-optimizer:latest
  ports:
    - "2283:2283"
  environment:
    - IUO_UPSTREAM=http://immich-server:2283
    - IUO_TASKS_IMAGE_MAX_SIZE=4MB
    - IUO_TASKS_VIDEO_MAX_SIZE=40MB
  depends_on:
    - immich-server
  restart: always

💡 この設定により、画像は4MB、動画は40MBを超える場合に自動的に最適化処理が実行され、ストレージの枯渇を遅延させることが可能です。

.envファイルの構文エラーおよびDockerイメージ取得失敗のトラブルシューティング

⚠️ 構築過程で発生しやすいエラーとして、.envファイル内の構文不備があります。特に「key cannot contain a space」というエラーは、変数名の前後に不可視のスペースや全角スペースが混入している場合に発生します。すべての行がKEY=VALUEの形式であり、コメントアウトが同一行に存在しないことを確認してください。

また、RedisやPostgreSQLのイメージ取得に失敗する場合は、ネットワークのDNS設定を確認するか、特定のタグを明示的に指定、あるいは以下のコマンドでイメージの強制再取得を試行してください。

docker compose pull

モバイルクライアントの統合とバックグラウンド同期の最適化

サーバー側の準備が整った後、各スマートフォンのImmichアプリを設定します。サーバーURLにはTailscaleで割り当てられたIPアドレス(例: http://100.64.0.5:2283)を入力します。この際、Upload Optimizerのポートを指定することが重要です。

バックグラウンド同期を安定させるため、アプリの設定から「Background Backup」を有効にし、OS側のバッテリー最適化設定からImmichを除外します。これにより、Wi-Fi接続時に自動的に写真がサーバーへ転送される「セット・アンド・フォーゲット」の環境が完成します。

システムの可搬性とディザスタリカバリの検証

本構成の最大の利点は、C:\immich-serverディレクトリを丸ごとバックアップするだけで、システム全体の移行が可能である点です。新しいハードウェアに移行する場合、Docker DesktopとTailscaleをインストールした後、当該ディレクトリをコピーしてdocker compose up -dを実行するだけで、ユーザーアカウント、メタデータ、既存の写真データがすべて復元されます。このポータビリティにより、ハードウェアの故障やアップグレード時にも最小限のダウンタイムで運用を継続できます。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。
Privacy Policy Disclaimer Contact