セルフホスト Immich: オープンソースの Google フォトの代替手段
Immich は、プライバシーに重点を置いた、Google フォトに代わる無料のオープンソースです。サーバー ソフトウェアとモバイル クライアント アプリケーションは両方とも GitHub 上でオープンに開発されています。コンテナー テクノロジーのおかげで、Immich のプライベートな自己ホスト型インスタンスをデプロイするのは非常に簡単です。このチュートリアルでは、Docker を使用して自己ホスト型 Immich インスタンスを実行し、写真やビデオを管理およびバックアップする方法を学びます。
このチュートリアルでは次のことを学びます:
- Docker または Podman を使用して Immich のセルフホスト型インスタンスをデプロイする方法
- ブラウザーおよびモバイルアプリから Immich にアクセスする方法
導入
クラウドは単なる他人のコンピューターであり、信頼すべきではありません。 Android は最も普及しているモバイル オペレーティング システムです。その結果、Google 製 OS 上の写真やビデオの管理と同期に使用されるデフォルトのアプリケーションである Google フォトは、毎日何百万ものユーザーによって使用されています。大切な写真やビデオのバックアップなどの重要な作業を独自のソフトウェアに依存するのは、実際にはデータを管理できないため、良い考えとは言えません。 Immich は、Google フォトに代わる無料のオープンソースであり、Docker を使用して独自のマシンやストレージに簡単にデプロイできます。方法を見てみましょう。
Docker/Podman を使用して Immich を実行する
Immich の自己ホスト型インスタンスを実行する最も簡単かつ簡単な方法は、Docker (または Podman) と docker-compose を使用することです。事前構成された docker-compose.yml
ファイルは、プロジェクトの GitHub リポジトリで入手できます。次のコマンドを使用して、コマンド ラインから直接ダウンロードできます。
$ curl -LO https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
上記のコマンドは、現在の作業ディレクトリにファイルをダウンロードします。ファイル内では、Postgres データベースのユーザー名やパスワードなどの機密情報に加え、アップロードされたメディアを保存するパスなどの重要な情報を提供するためにいくつかの変数が使用されます。明らかな理由により、この情報をファイル内にハードコーディングすることはできません。ただし、これらは .env
環境ファイルから自動的に読み取られます。このファイルは構成ファイルと同じディレクトリに配置する必要があります。ファイルのサンプルは、GitHub からダウンロードできます。
$ curl -L -o .env https://github.com/immich-app/immich/releases/latest/download/example.env
ファイル内では、すべての変数にデフォルト値があることがわかります。
# You can find documentation for all the supported env variables at https://im
The location where your uploaded files are stored
UPLOAD_LOCATION=./library
The location where your database files are stored
DB_DATA_LOCATION=./postgres
The Immich version to use. You can pin this to a specific version like "v1.7
IMMICH_VERSION=release
Connection secret for postgres. You should change it to a random password
DB_PASSWORD=postgres
The values below this line do not need to be changed
##############################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
コメントで明確に説明されているように、UPLOAD_LOCATION
変数と DB_DATA_LOCATION
変数は、アップロードされた画像の保存に使用されるホスト ディレクトリのパスを渡すために使用されます。 Postgres データベース ファイル。代わりに、DB_DATABASE_NAME
、DB_USERNAME
、および DB_PASSWORD
変数を使用して、データベース名、ユーザー名、およびパスワードを渡します。 (データベースはスタックを初めて起動するときに自動的に作成されます)。
Docker CE (Community Edition) の最新バージョンでは、docker-compose がプラグインとしてインストールされるため、例内の docker-compose
コマンドを docker compose
に置き換える必要があります。 。代わりに、非推奨の Python バージョンの docker-compose を使用している場合は、そのまま従うことができます。 Podman を内部で使用している場合でも、docker-compose を使用できることに注意してください。基本的に知っておくべきことは、Podman ソケットにスターを付けることだけです。
SELinuxの使用
SELinux が有効な場合に docker-compose.yml ファイルに記述されているバインド マウントを機能させるには、ホスト ディレクトリの SELinux コンテキストが自動的に設定されるように、マウント オプションとして z
を追加する必要があります。 コンテナファイル_t
。変更する必要がある行は、17、36、および 73 です。
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload:z
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload:z
volumes:
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data:z
メモリのオーバーコミットを有効にする
コンテナー スタックを起動する前に、メモリのオーバーコミットを有効にすることをお勧めします。有効にしないと、メモリが少ない状況ではメールの特定の操作が失敗します。メモリのオーバーコミットを永続的に有効にするには、/etc/sysctl.conf
ファイルを編集するか、/etc/sysctl.d
の下に専用のドロップイン ファイルを作成します。次の内容:
vm.overcommit_memory = 1
変更は起動時に自動的に適用されます。これをすぐに有効にするには、次のコマンドを実行します。
$ sysctl -p
コンテナスタックの起動
コンテナ スタックを起動するには、次のコマンドを実行します。
$ docker-compose up
どのコンテナもホストの特権ポートにマップされないため、root 権限を使用せずに docker-compose を実行できます (特権のないコンテナに特権ポートを使用させることは可能です)。コマンドを実行すると、次のエラーが表示される場合があります。
ERROR: The Compose file './docker-compose.yml' is invalid because:
'name' does not match any of the regexes: '^x-'
これは、docker-compose のレガシー バージョンを使用していることを意味します。回避策としては、docker-compose ファイルの 9 行目をコメント化するだけで十分です。
# name: immich
完了したら、docker-compose up
コマンドを再起動するだけです。すべてが予想通りに進んでいる場合は、数秒後に http://localhost:2283
にある Immich 管理ページにアクセスできるようになります。
管理者アカウントを作成するには、「はじめに」ボタンをクリックし、フォームに必要な情報を入力します。
安全な接続の使用
ホーム ネットワークの外から Immich インスタンスに安全にアクセスしたい場合は、基本的に 2 つのオプションがあります。1 つ目は、Wireguard などの VPN を使用して接続することです。 2 つ目は、SSL/TLS 証明書の使用です。パブリック ドメインをお持ちの場合は、Let's Encrypt から有効な証明書を取得できます。 Immich を個人使用のみを目的として設定している場合は、代わりに自己署名証明書を生成して使用できます。
この文脈において、証明書を利用する最も簡単な方法は、Nginx や Caddy などのリバース プロキシを介して Immich にサービスを提供することです。リバース プロキシは、Immich スタックの一部としてコンテナとして実行することも、ホスト上で直接実行することもできます。以下に、すべてのリクエストを https://immich.mydomain.com
から http://192.168.0.39:2283
に渡す Nginx リバースプロキシ構成の例を示します。 (コンテナが実行されているマシンのローカル IP とポート)、Let's Encrypt から取得した証明書を使用します。
server {
listen 443 ssl;
server_name immich.mydomain.com;
ssl_certificate /etc/letsencrypt/live/immich.mydomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/immich.mydomain.com/privkey.pem;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://192.168.0.39:2283;
proxy_read_timeout 90;
}
}
このような構成を使用する場合は、ポート 443
を通過するトラフィックも許可する必要があります。 UFW をファイアウォール マネージャーとして使用している場合は、次を実行できます。
$ sudo ufw allow "WWW Secure"
代わりに Firewalld を使用して、デフォルト ゾーンのポート 443 を通過するトラフィックを永続的に許可する場合は、次のコマンドを実行できます。
$ sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
ルールを特定のゾーンに適用するには、代わりに、ゾーン名の名前を引数として --zone
オプションに渡すことができます。
Androidアプリのインストール
Immich クライアント アプリは、Android Play ストアと iOS App Store の両方で入手できます。 Immich サーバーにアクセスするには、アプリケーションを起動し、インストール中に作成したアカウントでログインします。エンドポイント URL として、サーバー IP と /api
パスを使用します。
最後に
Immich は、モバイル デバイス上のビデオや写真を管理およびバックアップするための、Google フォトに代わる無料のオープンソースです。このチュートリアルでは、Docker を使用して Immich をデプロイする方法を説明しました。ローカル ネットワークの外部からセルフホスト型 Immich インスタンスに安全にアクセスするには、VPN を使用して接続するか、TLS/SSL 証明書とリバース プロキシを使用します。チュートリアルの一部として、そのようなセットアップを実現するために可能な Nginx 構成を確認しました。