# チュートリアル: DockerでKolleKをセルフホストする このチュートリアルでは、何もない状態のマシンから、稼働するKolleKインスタンスまでを作り上げます。プロジェクトをクローンし、環境を設定し、アプリケーションキーを生成し、スタックを起動し、最初のアカウントを作成し、最初のインスタンス管理者を付与します。最後には、実際に動くインスタンスが手に入り、より詳しい運用ガイドがどこから始まるかもわかるようになります。 自宅の小さなサーバーで、コレクタークラブ向けのインスタンスを立ち上げようとしているAlexに沿って進めます。手順は、VPSでもノートパソコンでも同じです。 所要時間の目安は15分から30分で、そのほとんどは最初のビルドを待つ時間です。 ## 始める前に 必要なもの: - **Docker Engine 24以降**と**Composeプラグイン**(古い`docker-compose`ではなく`docker compose`コマンド)が動くマシン。 - プロジェクトをクローンするための**Git**。 - ターミナルと、そこで基本的なコマンドを実行できる程度の慣れ。 先に[セルフホスティング概要](https://getkollek.com/ja/docs/serufu-hosutingu/serufu-hosutingu)にざっと目を通しておくのもおすすめです。このチュートリアルが繰り返し強調する唯一のルール、アプリケーションキーは一度だけ設定し、絶対に変更しないという点が説明されているためです。 ## ステップ1: プロジェクトをクローンし、設定ファイルを作成する ```bash git clone https://github.com/djaiss/kollek.git kollek cd kollek cp .env.docker.example .env ``` `.env`ファイルは、あなたのインスタンスの設定そのものです。運用者が日常的に触れるものはすべてここにあり、[設定ガイド](https://getkollek.com/ja/docs/serufu-hosutingu/insutansu-no-settei)ではグループごとに詳しく説明しています。最初の起動には、次の2つの手順だけが必須です。 ## ステップ2: アプリケーションキーを生成する KolleKは、一度だけ生成するキーを使って、機密データを保存時に暗号化します。 ```bash docker compose run --rm app php artisan key:generate --show ``` 出力された値(`base64:`で始まります)をコピーし、`.env`の`APP_KEY`の値として貼り付けます。 :::warning アプリケーションキーは一度だけ設定し、稼働中のインスタンスでは絶対に変更しないでください。名前、アイテム、セッションを含め、暗号化されたものはすべて、別のキーのもとでは恒久的に読み取れなくなります。キーのコピーはどこか安全な場所に保管してください。データベースのバックアップは、それを暗号化したキーがなければ復元できないからです。 ::: 意図的なキーローテーションがどうサポートされているかを含む詳しい説明は[アプリケーションキーと暗号化](https://getkollek.com/ja/docs/serufu-hosutingu/apurikeshon-ki-to-angoka)にあります。 ## ステップ3: パスワードとURLを確認する エディタで`.env`を開き、次の3点を確認します。 - **`DB_PASSWORD`と`DB_ROOT_PASSWORD`。** どちらもプレースホルダーの値で出荷されています。最初の起動の前に、自分で決めた強力なパスワードに変更してください。データベースはこれらの値を使って最初の起動時に作成されるためです。 - **`APP_URL`。** ユーザーが入力するアドレスです。Alexはクラブのネットワーク用に`http://server.local:8000`を設定します。デフォルトは`http://localhost:8000`です。 - **`APP_PORT`。** 公開されるポートで、変更しなければ`8000`です。 ## ステップ4: スタックを起動する ```bash docker compose up -d --build ``` 最初の実行ではイメージのビルドが行われ、数分かかります。その後、Composeは4つのコンテナを起動します。 - **app**、Webサーバー。データベースマイグレーションを実行するのはこの役割だけで、スキーマはちょうど一度だけセットアップされます。 - **queue**、メール送信やジョブ処理を行うバックグラウンドワーカー。 - **scheduler**、日次のメンテナンスジョブを実行します。 - **mysql**、データベース。 `docker compose ps`で、すべてが起動しているか確認します。appコンテナがhealthyと表示されたら、ブラウザで`APP_URL`を開いてください。KolleKのサインイン画面が表示されるはずです。 ## ステップ5: 最初のアカウントを作成する 登録ページに行き、サインアップします。これはどのユーザーの場合とも全く同じで、手順は[アカウントを作成する](https://getkollek.com/ja/docs/hajimeni/akaunto-no-sakusei)にあります。これにより、あなたはインスタンス最初のアカウントのオーナーになります。 Alexは登録し、はじめにチェックリストにたどり着きますが、運用作業が終わるまでは何もカタログ化せずにこらえます。 ## ステップ6: 最初のインスタンス管理者を付与する インスタンス管理者は、インスタンス管理パネルから、インスタンス上のすべてのアカウントを横断的に見ることができます。このフラグはコマンドラインから付与します。 ```bash docker compose exec app php artisan kollek:make-instance-administrator you@example.com ``` 先ほど登録したメールアドレスを使います。同じコマンドに`--revoke`を付けると、フラグを取り消せます。このフラグが何をし、意図的に何をしないかについては、[インスタンス管理者権限を付与する](https://getkollek.com/ja/docs/serufu-hosutingu/kanrisha-kengen-no-fuyo)で説明しています。 ## 結果 これで、稼働するインスタンスが手に入りました。あなたのURLで応答するWebアプリ、その隣で動くqueueワーカーとscheduler、名前付きのデータベースボリュームに保存されたデータ、そしてアカウントオーナーとインスタンス管理者を兼ねる自分自身です。クラブのメンバーは自分自身のアカウントを登録できますし、あなたが[自分のアカウントに人を招待する](https://getkollek.com/ja/docs/chuutoriaru/kazoku-ya-kurabu-o-shoutai)こともできます。 ## ひと息つく前にやっておくべきこと 初期状態では、このインスタンスは送信メールを送る代わりにログファイルに書き込むだけです。実際のメーラーを設定するまで、招待、マジックリンク、パスワードリセットは、何も知らせずにどこにも届きません。これは意図的な仕様で、対処は短い作業で済みます。[メール配信を設定する](https://getkollek.com/ja/docs/serufu-hosutingu/meru-haishin-no-settei)を参照してください。 ## 避けるべきよくある間違い - **アプリケーションキーを失うこと。** データベースとは別に、今すぐバックアップを取ってください。キーがなければ、バックアップは暗号文のままです。 - **プレースホルダーのデータベースパスワードをそのままにしておくこと。** 最初の起動の後ではなく、前に変更してください。 - **メール設定を後回しにすること。** 最初に来る「招待メールが届かない」という報告は、たいていこれが原因です。 ## 次に読むべきもの - 飛ばした設定項目をすべて[インスタンスを設定する](https://getkollek.com/ja/docs/serufu-hosutingu/insutansu-no-settei)で確認しましょう。 - カタログが大切なものになる前に、[バックアップ](https://getkollek.com/ja/docs/serufu-hosutingu/bakkuappu-to-fukugen)を用意しましょう。 - 新しいバージョンがリリースされたら、[インスタンスをアップグレードする](https://getkollek.com/ja/docs/serufu-hosutingu/insutansu-no-appugureido)に従いましょう。