Docker Compose でデプロイする
1 台のマシンで BostonIvy 全体を動かします。PostgreSQL、サーバー、BostonIvy Web の構成は、bostonivy-os リポジトリの deploy/compose.yaml に書かれています。いちばん手早く始められる方法で、家族や小さなチームならこれで十分です。
始める前に
- Docker と Compose v2(
docker compose versionが v2.x と表示されること)。 - デプロイ用のファイル:bostonivy-os の
deployフォルダー。compose.yaml、https.yaml、.env.exampleが入っています。 - イメージへのアクセス権。 イメージは GitHub Container Registry の非公開パッケージです。
read:packagesスコープを持つ GitHub トークンで一度サインインします。
echo "$GITHUB_TOKEN" | docker login ghcr.io -u <GitHub のユーザー名> --password-stdin
BostonIvy を起動する
サンプルから設定ファイルを作ります。
cd deploy cp .env.example .envサーバーのシークレットを生成し、
.envのBOSTONIVY_AUTH_SECRETに貼り付けます。docker compose run --rm --no-deps bostonivy keygenすべてを起動します。
docker compose up -dhttp://localhost:8080 を開いてアカウントを作成します。新しいデータベースでは、最初のアカウントが管理者になります。その後ほかの人が登録できるかどうかは、
auth.open_registrationと管理パネルの設定で決まります。
docker compose ps で 3 つのサービスがすべて healthy になっていれば成功です。サーバーは起動のたびにデータベースをマイグレーションするので、ほかに実行するコマンドはありません。
サンプルの
.envはBOSTONIVY_COOKIE_SECURE=falseになっていて、これはhttp://localhostでしか使えません。ほかの人に使ってもらう前に HTTPS を設定し(後述)、trueに変更してください。
設定
設定はすべて deploy/.env にあります。
| 変数 | 意味 |
|---|---|
BOSTONIVY_AUTH_SECRET |
必須。署名と暗号化の鍵はすべてここから導出されます。失うと全員がサインインし直すことになり、暗号化して保存した TOTP や webhook のシークレットも復号できなくなります。必ずバックアップしてください |
BOSTONIVY_URL |
利用者が開くアドレス。メール内のリンクや共有リンクに使われます |
BOSTONIVY_PORT |
このマシンで公開するポート。既定は 8080 |
BOSTONIVY_COOKIE_SECURE |
本番では true(HTTPS が必要)。false は http://localhost で試すときだけにしてください。そうしないとページを再読み込みしたときにサインインが切れます |
BOSTONIVY_SMTP_URL、BOSTONIVY_MAIL_FROM |
メールの設定。例:smtps://user:password@smtp.example.com と BostonIvy <noreply@example.com>。空ならメールを送りません。log にするとメールをサーバーログに書き出すので、お試しに便利です |
POSTGRES_PASSWORD |
データベースのパスワード |
BOSTONIVY_VERSION |
イメージのタグ。latest は最新リリースに追従します |
BOSTONIVY_SITE |
Caddy のサイトアドレス。後述の HTTPS を参照してください |
そのほかのサーバー設定(レート制限、Redis、webhook、オブジェクトストレージ、アカウント削除の猶予期間など)は、BOSTONIVY_<セクション>__<キー> という名前の環境変数で設定できます。例:BOSTONIVY_STORAGE__KIND=s3。compose.yaml の bostonivy.environment に追加してください。すべての項目は bostonivy-os の bostonivy.example.toml にあります。
HTTPS
次のどちらかを選びます。
Caddy に証明書を取得させる。 ドメインをこのマシンに向けてから、
.envに次を設定します。BOSTONIVY_SITE=tasks.example.com BOSTONIVY_URL=https://tasks.example.com BOSTONIVY_COOKIE_SECURE=trueそして HTTPS 用のオーバーライドを付けて起動します。これでポート 80 と 443 が開きます。
docker compose -f compose.yaml -f https.yaml up -dCaddy が証明書の取得と更新を自動で行い、
caddyボリュームに保存します。既存のリバースプロキシの後ろに置く。
BOSTONIVY_SITE=:80のままにして、プロキシの転送先をBOSTONIVY_PORTにします。リアルタイム更新に使う/api/v1/realtimeの WebSocket 接続も転送されるようにしてください。
バックアップとアップグレード
バックアップするものは 3 つです。
データベース:
docker compose exec postgres pg_dump -U bostonivy bostonivy > backup.sql添付ファイルとアバター:
filesボリューム(S3 に移した場合はそのバケット)。シークレット:
.envのBOSTONIVY_AUTH_SECRET。
アップグレードは、新しいイメージを取得して再起動するだけです。
docker compose pull && docker compose up -d
新しいバージョンは起動時にデータベースをマイグレーションします。マイグレーションは追加だけで削除はしないので、バックアップと組み合わせれば前のバージョンに戻せます。
コマンドライン
docker compose exec bostonivy bostonivy admin promote <ユーザー名> # 管理者にする
echo "新しいパスワード" | docker compose exec -T bostonivy bostonivy admin set-password <ユーザー名>
docker compose exec bostonivy bostonivy health # ヘルスチェック
イメージを自分でビルドする
bostonivy-web を bostonivy-os の隣にチェックアウトするか、.env の BOSTONIVY_WEB_SOURCE でその場所を指定します。Web アプリは非公開の BostonIvy デザインパッケージを使うため、ビルドには IvyLabsApp の非公開リポジトリを読めるトークンが必要です。トークンはビルド用シークレットとしてだけ使われ、イメージには残りません。
cd deploy
GITHUB_TOKEN=$(gh auth token) docker compose build
docker compose up -d