概要
Googleアカウントの容量がいっぱいになっているという怖い警告を沢山頂戴していて夜も眠れません。
そんな訳で半年前に買って箱のまま眠っていたミニ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の作成&管理を行うことができます。
サーバー側(ミニPC)のデバイスに合わせて環境を選択すると、インストールのためのスクリプトが表示されます。注意書きにもある通り、tokenはcredentialなので隠してあります。dockerのコマンドを実行する際は、記事に従って-d
と--network=host
を付けます。サーバー側でこのコマンドを実行すると下部のConnectors
に表示されるので、Next
を押します。
上段の設定はお好みでいいと思います。私はimmichというサブドメインを付けました。
これで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にはファイル名などが出ているのでマスクしてあります。)
これでしばらく(私の場合は2時間弱)待つとImmichへのインポートが完了します。完了した画面は下記のようになります。
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アカウントの容量の値段を見てみましょう。
なんと100GBに容量を増やすのにたったの¥2,500/年です。私の場合はドメインの維持とミニPC代だけで計算してもGoogleに課金するのが割高になるまで20年くらいかかります。しかもこちらは、ブレーカーが落ちてサーバーが死ぬみたいなことは(滅多に)起こりません。でっかい企業ってやっぱりすごいんですね。