3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cloudflare tunnelとミニPCを使ってGoogleフォトライクな写真管理サーバをセルフホストする

Last updated at Posted at 2024-10-17

概要

Googleアカウントの容量がいっぱいになっているという怖い警告を沢山頂戴していて夜も眠れません。
image.png

そんな訳で半年前に買って箱のまま眠っていたミニPCで写真サーバーをセルフホストしてGoogleフォトからおさらばしたいと思います。

前提

  • ミニPCのスペック
    • CPUはIntel N100(4コア4スレッド)
    • RAMは16GB
    • SSDは512GB
    • OSはwindows11 proのWSL上のUbuntu 22.04
  • メインPCもwindows11です、MacやLinuxの人は適宜読み替えてください
  • 写真管理はImmich
  • Cloudflare tunnelを使ってサーバーを公開
  • 取得済みのドメインが必要です(もし持っていない場合、Cloudflareで買うと後の設定が少し簡単に出来るし更新料も安いです)
  • ドメインの取得以外全て無料で行えます!

Immichのインストール&セットアップ

写真管理サーバーにはImmichというものを使います。公式のスマホアプリがあり、UIが綺麗で自動バックアップなども付いているそうなのでこれにしました。

公式アプリなどの挙動はデモアカウントで試してみることができます。

Docker Composeを使ってとても簡単にインストールできます。せっかちな方向けに必要なスクリプトだけ記しておきますが、もしドキュメントが変わっていたりしても責任は一切持ちません。この操作はサーバー側(ミニPC)で行います。(クライアント側ですることは公式アプリのダウンロードぐらいしかないかも...?)

mkdir ./immich-app
cd ./immich-app
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
docker compose up -d

これでインストールができました。次にブラウザでhttp://localhost:2283/にアクセスして管理者アカウントのセットアップなどを行います。こちらは画面に従えば可能だと思います。

初期設定時にストレージテンプレートというものを設定するのですが、こちら個人的にはオンにすることをオススメします。オンにしないとハッシュ値かなんかの訳の分からないフォルダ名に写真が振り分けられます。もちろん後から設定で変える事もできます。

Cloudflare Tunnelの設定

Cloudflare Tunnelを使ってローカルのサーバーをグローバルに公開します。

下記の記事に従って

  • Cloudflareアカウントを作成
  • ドメインをCloudflareに追加(Cloudflare経由でドメインを買っている場合、ここのステップがいらない)
  • Cloudflare tunnel の作成

を行います。

基本的には上記の記事で出来るのですが、tunnel作成の部分のUIが少し変わっていそうなので一応説明を付しておきます。

サイドバーのZero trustをクリックして画面が遷移した後のサイドバーでNetwroks > tunnnelsでtunnelの作成&管理を行うことができます。

真ん中のAdd a tunnnelを押します。
image.png

こちらでCloudflaredを選択。
image.png

こちらで適当なtunnel名を決めます。
image.png

サーバー側(ミニPC)のデバイスに合わせて環境を選択すると、インストールのためのスクリプトが表示されます。注意書きにもある通り、tokenはcredentialなので隠してあります。dockerのコマンドを実行する際は、記事に従って-d--network=hostを付けます。サーバー側でこのコマンドを実行すると下部のConnectorsに表示されるので、Nextを押します。
image.png

上段の設定はお好みでいいと思います。私はimmichというサブドメインを付けました。
image.png

これでCloudflare tunnelの設定は終わりです!

スマホアプリの設定

公式のスマホアプリをダウンロードして、さきほど設定したサーバーのエンドポイントのURLと設定したログイン情報を入力することで使うことができるようになります!
これで晴れてセルフホスト完了~~~~~~~🎉🎉🎉🎉

Googleフォトからのデータの移行

さて、セルフホストが完了してもやらなければいけないことがいくつか残っています。
まずはGoogleフォトのデータをImmichに移行します。

まずは下記記事に従ってGoogleフォトのデータをエクスポートします。こちらですが、ファイルサイズは50GBで形式はzipにした方が後々の都合上楽です。

さて、エクスポートしたデータをImmich-goというツールを使って、Immichにインポートします。

下記動画を参考にしてImmichへのインポートを行います。私はこの部分はミニPCではなく自分のメインPCで行っています。

簡単にやることの説明を行うと、

  • リポジトリのreleaseから自分のデバイスに合わせたファイルをダウンロードする
  • ダウンロードしたファイルを解凍して、その中にエクスポートしたGoogleフォトのzipファイルを入れる。
  • ImmichのAPIキーを発行する。
  • Immich-goのコマンドを実行してImmichへインポートする。

の4点です。

場合によっては、zipファイルを解凍した際にWindows defenderにTrojan:Win32/Wacatac.B!mlなるトロイの木馬だという誤判定を受けて強制的に実行ファイルを消されてしまいます。defenderから元には戻せますが、不安な場合は代替としてImmich CLIの使用もご検討ください。

Immich-goのコマンドの一例は以下の通りです。細かなオプションなどはリポジトリのREADMEに書いてあります。

もし作業中のPCとサーバー(ミニPC)が同じLAN内にいるのなら、下記コマンドのAPIのURLはCloudflare tunnelで設定したものではなく、http://{server loacl IP}:2283にすることをオススメします。Cloudflare tunnelは無料プランでは100MBのファイルサイズ制限があり、それを超えたものは送れません。

.\immich-go -server={your API endpoint} -key={your API key} upload -create-albums -auto-archive -google-photos takeout-*.zip 

実行すると下記のような画面になります。(logにはファイル名などが出ているのでマスクしてあります。)

image.png

これでしばらく(私の場合は2時間弱)待つとImmichへのインポートが完了します。完了した画面は下記のようになります。

image.png

6つの動画がアップロードに失敗したようですが、この程度ならば手動でアップロードしようと思います。これで移行は完了しました!

Syncthingによるバックアップ

さて移行も済んだのですが、Googleフォトからの移行によってGoogle様の堅固なサーバーではなくなってしまいました。ImmichのREADMEでも⚠️ Always follow 3-2-1 backup plan for your precious photos and videos!と言っているので、メインのPCにもバックアップを取れるようにしておきます。

下記記事に従って、サーバー(ミニPC)のUbuntuとメインPCのWindowsにSyncthingを入れて同期を行うようにします。

こちらも記事に従えば可能だと思いますが、簡単にやることを説明すると、

  • 同期元と同期先にSyncthingをインストール
  • 2台のデバイスを接続
  • 同期元で同期したいフォルダを選択(私の場合は~/immich-app/library/library/adminでした。細かい内容はImmichのドキュメントをご確認ください)
  • 同期先に同期するフォルダを追加(同期元と同じフォルダIDを指定する)
  • 同期フォルダの編集から同期するデバイスを選択

の5点です。

同期元で同期するフォルダを選択する際に、パーミッションがないため出来ない的なことが言われる事があります。その場合は、同期したフォルダの直下でsudoなどで.stfolderというフォルダを直接作成すると上手くいきます。

3-2-1ルールには程遠いですが、やらないよりは幾分かマシでしょう。

終わりに

さてここまで色々やったところで、Googleアカウントの容量の値段を見てみましょう。

image.png

なんと100GBに容量を増やすのにたったの¥2,500/年です。私の場合はドメインの維持とミニPC代だけで計算してもGoogleに課金するのが割高になるまで20年くらいかかります。しかもこちらは、ブレーカーが落ちてサーバーが死ぬみたいなことは(滅多に)起こりません。でっかい企業ってやっぱりすごいんですね。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?