Docker で Immich を立ち上げる:自宅サーバー本番稼働 編

Blog

前回の記事では、中古ミニPCに Ubuntu Server をインストールして SSH 接続するところまで進めました。

(まだ読んでいない方はこちら→一番ラクな始め方:中古ミニPC 編

さて。Ubuntu サーバーは立った。じゃあImmich はどうやって乗せるの?という話ですよね。

もうImmichのファイルをコピーすれば動くんじゃないの?

そうじゃないんです。ここで登場するのが Docker(ドッカー) です。

まず「この記事で何をやるか」を先にまとめておきます。

この記事でやること・結論
  • SSH で手元の PC からミニPC に接続する(前回のおさらい)
  • Docker をインストールする(コマンド1行)
  • Immich の設定ファイル(docker-compose.yml・.env)を取得・編集する
  • docker compose up -d で Immich を起動する
  • ブラウザで http://サーバーのIP:2283 にアクセスして初期画面を出す

導入手順からつまずきポイントまで、 ゼロからしっかりお伝えします!!ここを押さえれば詰まらずに進めます。

Docker ってそもそも何なのか

Docker を一言で言うと、アプリとその動作に必要な依存関係を、まとめて箱に詰める仕組みです。

管理人が最初に聞いたとき、こう思いました。「仮想マシンと何が違うの?」

例えば、荷物を運びたいとき。

仮想マシンは「トラックをゼロから用意する」ところから始まります。エンジン、タイヤ、シャーシ、全部。だから重くて遅い。起動に数十秒〜数分かかります。

Docker は違います。

「既存のトラックに積める規格に合わせたコンテナを用意する」。それをトラックに積むだけで運べます。トラック(OS)はもう目の前にある。コンテナを乗せるだけです。

Immich を自宅サーバーに立てるとき、コマンド数行で動かせるのはこのおかげです。

Immich 側が「この規格のコンテナに詰めておいたよ」と用意してくれている。それを、前回記事で準備した Ubuntu サーバーというトラックに積み込むだけで、すぐに動かせます。

「自分の環境では動かない」というストレスを大幅に減らせる、画期的な仕組みです。

まず SSH で接続する(おさらい)

この記事でやる作業は、すべて 手元の PC からミニPC に SSH 接続した状態 で行います。

前回記事でも触れましたが、改めて。手元の PC(Windows)でコマンドプロンプトか PowerShell を開いて、以下を実行します。

ssh ユーザー名@IPアドレス

IPアドレスの確認方法は、ミニPC の画面(またはルーター管理画面)で以下を実行します。

ip a

ユーザー名@ホスト名:~$ というプロンプトが出たら接続完了です。

以降のコマンドは、すべてこの SSH 接続中の画面(=ミニPC の中)で実行します。

sudo ってなに?

前回の記事でこんなコマンドをサラっと使ってしまいました・・・。説明が足りなかったので、ここで改めて解説します。

sudo apt update && sudo apt upgrade -y

sudo(スードゥ)は「管理者権限でこのコマンドを実行してください」という意味の接頭語です。

Linux ではセキュリティの仕組みとして、普段のユーザーはシステムの重要な設定を勝手に変えられないようになっています。

比喩で言うと、「このドアは管理人の許可が必要です」という部屋に、sudo という合言葉で入る ようなイメージです。

コマンドの先頭に sudo を付けることで、「管理者として実行する」ことができます。実行するとパスワードを求められるので、インストール時に設定したパスワードを入力してください。

この記事では sudo が必要な場面にはそのまま書いてあります。表示されているコマンドをそのままコピーして実行すれば OK です。

Docker をインストールする

ここからは SSH 接続中のターミナル(=ミニPC の中)での作業です。

Step.1 公式インストールスクリプトを実行する

まず curl(ウェブからファイルを取得するツール)がミニPC に入っているか確認します。

curl --version

curl 8.x.x のように表示されれば入っています。

何も表示されないか command not found と出た場合は、先にインストールします。

sudo apt install curl -y

curl が準備できたら、Docker の公式が提供するインストールスクリプトを取得して、ミニPC 上で実行します。

curl -fsSL https://get.docker.com | sh

このコマンドは「Docker の公式サイトからインストールスクリプトをダウンロードして、その場で実行する」という意味です。しばらく待つとコマンドが返ってきます。

終わったらバージョンを確認してみましょう。

docker --version

Docker version 27.x.x のように表示されれば成功です。

Step.2 sudo なしで docker コマンドを使えるようにする

インストール直後の状態では、docker コマンドを使うたびに sudo が必要になります。毎回打つのは面倒なので、自分のユーザーを docker グループに追加して解決します。

sudo usermod -aG docker $USER

$USER の部分は、実行時に自動で今ログイン中のユーザー名に置き換わります。コマンドはこのままコピーして実行してください。

コマンドを打ったら、一度 SSH を切断して再接続してください。グループの変更はログインし直すまで反映されません。

exit

手元の PC に戻るので、もう一度 SSH で接続し直します。

ssh ユーザー名@IPアドレス
つまずきポイント①:permission denied が出たら

permission denied while trying to connect to the Docker daemon socket というエラーが出た場合、グループ追加後にログインし直していないのが原因です。

切断して SSH で再接続するだけで解決します。

exit

Step.3 動作確認

再接続できたら、Docker が正しく動いているかテスト用のコンテナを起動して確認します。

docker run hello-world

出力に Hello from Docker! という文字が出れば完璧です。

つまずきポイント②:Cannot connect to the Docker daemon が出たら

Docker のサービスが起動していない状態です。以下のコマンドで起動して、再起動時にも自動で立ち上がるよう設定します。

sudo systemctl start docker
sudo systemctl enable docker

Immich の compose.yml を取得する

Docker が動くようになったので、次は Immich のファイルを用意します。

作業ディレクトリを作る

まず「ホームディレクトリ」について説明します。

Linux では、SSH でログインすると最初に ホームディレクトリ という場所に自動で移動します。/home/ユーザー名 というパスで、Windows で言う「マイドキュメント」に相当します。

今いる場所は pwd(Present Working Directory)コマンドで確認できます。

pwd

/home/dreht のように表示されるはずです(dreht の部分は自分のユーザー名)。

ファイルの一覧は ls コマンドで確認できます。

ls

さて、Immich 用のディレクトリをどこに作るかですが、将来的にサービスをいくつか追加することを考えると Applications フォルダを作って、その中に各サービスのフォルダを入れていく構成がおすすめです。

そんなことどうでもいい、動きゃいいんだって方はcompose.yml と .env をダウンロードするに進んでください。

ディレクトリ(フォルダ)を作るコマンドは mkdir です。-p オプションを付けると、途中の階層もまとめて作れます。

mkdir -p ~/Applications/immich

~(チルダ)はホームディレクトリを表す省略記号です。~/Applications/immich/home/ユーザー名/Applications/immich と同じ意味です。

作成できたか確認してみましょう。

ls ~/Applications

immich というディレクトリが表示されれば OK です。

次に、作ったディレクトリに移動します。

cd ~/Applications/immich

compose.yml と .env をダウンロードする

~/Applications/immich にいる状態で、以下のコマンドを実行します。

Immich の公式が compose ファイルを GitHub の最新リリースで公開しています。

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

URL の中に latest という単語が含まれています。これは「最新リリースを自動で指定する」という意味です。Immich がバージョンアップしても URL は変わりません。このコマンドをそのままコピーして使えば OK です。

実行後、ls コマンドでファイルが2つ作られたか確認できます。

ls -a

docker-compose.yml.env が表示されれば OK です(.env はドットから始まるので -a オプションが必要です)。

.env を編集する(ここが重要!!)

ダウンロードしたままの .envテンプレート です。最低でも以下の3項目を自分の環境に合わせて書き換えてください。

nano .env
項目名内容
UPLOAD_LOCATION写真・動画の保存先パス(絶対パスで書く)/mnt/hdd/immich
DB_PASSWORDデータベースのパスワード任意の英数字
※変更推奨
TZタイムゾーンAsia/Tokyo

編集できたら Ctrl+XYEnter の順に押して保存します(nano エディタの操作です)。

つまずきポイント③:UPLOAD_LOCATION は絶対パスで書く

./photosphotos のような書き方(相対パス)だと、コンテナの内部から見たパスで解釈されてしまい、ファイルがどこに保存されているか分からなくなります。

Linux の絶対パスは /(スラッシュ)から始まります。Windows の C:\Users\... に相当するものです。

  • ✗ 相対パス(NG):./photos
  • ✓ 絶対パス(OK):/mnt/hdd/immich/home/dreht/immich-data

また、指定したディレクトリは事前に作成しておく必要があります。

sudo mkdir -p /mnt/hdd/immich
注意:DB_PASSWORD はデフォルトのままにしない

テンプレートに書かれているパスワードはサンプルです。自宅サーバーとはいえ、デフォルトのまま放置するのはやめましょう。英数字混じりで適当に変えておいてください。記号は使わないほうが安全です(A-Za-z0-9 のみ推奨)。

Immich を起動する

設定ができたら、いよいよ起動します。

docker compose up

~/Applications/immich にいる状態で実行します。

docker compose up -d

-d はバックグラウンド起動のオプションです。コンテナのダウンロードが始まり、しばらく待つとコマンドが返ってきます。

起動確認

全コンテナが正常に動いているか確認します。

docker compose ps

各コンテナの STATUS 欄が Up または healthy になっていれば OK です。

つまずきポイント④:起動直後はすぐアクセスできないことがある

起動直後はデータベースのマイグレーション処理が走っています。ブラウザで開いても接続できない場合、30〜60秒ほど待ってから再アクセスしてみてください。焦って再起動すると逆効果です。

ポートを開放する

Ubuntu Server はデフォルトでファイアウォール(ufw)が有効になっています。Immich が使う 2283番ポート を開放します。

sudo ufw allow 2283
つまずきポイント⑤:別のサービスが2283を使っていたら

ポートが競合している場合、以下のコマンドで確認できます。

sudo ss -tlnp | grep 2283

何かが出力されたら他のサービスが使っています。その場合は .env をテキストエディタで開いて、IMMICH_SERVER_PORT=2283 の数字を別のポート番号(例:2284)に書き換えてください。書き換えたら以下を再実行して反映させます。

docker compose up -d

ブラウザで初回画面を確認する

手元の PC でブラウザを開いて、以下のURLにアクセスします。

http://ミニPCのIPアドレス:2283

ミニPCのIPアドレスは SSH 接続時に使ったものと同じです。忘れた場合は SSH 接続中のターミナルで以下を実行して確認できます。

ip a

inet 192.168.x.x のような行に記載されている数字がIPアドレスです。

管理者アカウントの作成画面が表示されれば、自宅フォトサーバーの本番稼働成功です!!!

管理人、この画面が初めて出たとき・・・正直テンションが上がりました。コマンド数行でここまで動いてしまうのか、と。

アカウント作成と写真の取り込みは次回記事でやります。今回は「画面が出た」ところで一区切りです。

まとめ

この記事のポイント
  • Docker=既存のトラック(Ubuntu)に規格コンテナを積む仕組み。だからコマンド数行で Immich が動く
  • sudo は管理者権限で実行する合言葉。パスワードを求められたらインストール時に設定したものを入力
  • Docker インストールは curl -fsSL https://get.docker.com | sh 1行で完了
  • グループ追加後は exit で切断して SSH で再接続(permission denied が出たらここを確認)
  • .env の書き換えは UPLOAD_LOCATION(絶対パス!)・DB_PASSWORDTZ の3項目
  • ポート2283を sudo ufw allow 2283 で開放してからブラウザでアクセス
  • 起動直後は30〜60秒待つ。焦らず docker compose ps で状態確認

次回は管理者アカウントを作成して、スマホアプリから写真を流し込むところまで進めます。

乞うご期待!!

コメント

タイトルとURLをコピーしました