更新と自動デプロイ¶
手で更新する¶
クイックスタート の手順で立てたサーバは、次のように更新します。更新の前にバックアップを 取ってください。
cd /srv/chikuwachat/infra
CHIKUWA_PROD=1 ./backup.sh /srv/backups
git pull
docker compose -f docker-compose.yml -f docker-compose.prod.yml --profile proxy up -d --build
- データベースの移行は、アプリの起動のときに自動で適用されます。
- 切り替えの間、数秒だけ API が止まります。アプリは自動で再接続し、足りない分を取り寄せます。
- 後方互換のない変更があるときは、リリースノートに書きます。
更新の後に流すコマンド¶
ほとんどの更新は、上の手順だけで済みます。前からあるデータに新しい機能を当てるときだけ、サーバの infra のフォルダでコマンドを
流します(どれも何度流してもよく、止めても続きから流せます)。
| 上げたバージョン | 流すもの | 内容 |
|---|---|---|
| v0.1.74 から | drive-index --limit 500 |
ドライブの Word / Excel / PowerPoint の中身を検索に入れる(ドライブの管理) |
| v0.1.79 から | 任意:channel-files-backfill |
前からのチャンネルの添付をチャンネルのドライブの「投稿のファイル」に入れる(ドライブの管理) |
| v0.1.80 から | drive-photos --dry-run → drive-photos --limit 500 |
前からドライブにある写真の撮影日時と縮小版を作り、HEIC にもサムネイルを付ける(ドライブの管理) |
docker compose -f docker-compose.yml -f docker-compose.prod.yml exec app python -m app.cli drive-photos --dry-run
v0.1.80 から、サーバのイメージは Debian 13(trixie)です
app のイメージの土台を Debian 12(bookworm)から Debian 13(trixie)に上げました。中の ffmpeg が 5.1 から 7.1 になり、 Mac や Android から来た HEIC の写真にもサムネイルが付きます。Python は同じ 3.13 で、データベースの移行もありません。
- サーバの OS は変えなくてかまいません(Debian 12 の VPS のままで動きます。変わるのはコンテナの中だけです)。 データベース・オブジェクトストレージ・文書の変換・Web のイメージも変わりません。
- 土台が変わるので、上げた最初の更新では app のイメージを丸ごと(約 350 MB)取り直します。古いイメージを消すまで、ディスクを
その分だけ多く使います(
docker image pruneで消せます)。 - 戻すときは、前のリリースのイメージに戻すだけです(データの形は変わりません)。
タグから自動でデプロイする(GitHub Actions)¶
自分のリポジトリ(フォーク)で v1.2.3 の形のタグを push すると、GitHub Actions がテスト → イメージの作成 →
サーバへのデプロイまでを自動で実行します(.github/workflows/release.yml)。
flowchart TD
T["タグを push"] --> C["checks<br>テストとビルド"]
C --> I["images<br>イメージを作り<br>GitHub に置く"]
I --> D["deploy<br>SSH でサーバへ"]
subgraph server["サーバの上で"]
P["イメージの取得"] --> B["バックアップ"] --> U["入れ替え"] --> H{"動いている?"}
end
D --> P
H -- "はい" --> OK["新しいバージョンで公開"]
H -- "いいえ" --> RB["直前のリリースに<br>自動で戻す"]
- 秘密の値(
.env、secrets/)はサーバにだけ置き、GitHub には SSH の接続情報だけを置きます。 - サーバの初期設定は
infra/vps-bootstrap.shが行います(Docker、deployユーザー、デプロイ用の鍵の登録、.envのランダムな値、毎日のバックアップの cron)。 - 前のリリースに戻すときは、Actions の release を、戻したいタグを選んで手で実行します。
準備の手順(VPS・DNS・初期設定・GitHub の Environment と Secrets・最初のリリース)は infra/README.md の「自動デプロイ」 に詳しく書いてあります。
デスクトップ版の更新¶
公式のデスクトップ版は、起動のときと 6 時間ごとに新しいバージョンを確かめ、右下に「新しいバージョンがあります」と出します。 「更新して再起動」で更新できます。設定の「このアプリについて」からも確かめられます。 配布物は GitHub のリリース(kanotown/taylis) にあります。
ブラウザ版は、サーバを更新すると新しいバージョンになります。スマートフォンのアプリは、ストアから更新します(Android は Google Play。iOS は準備中)。
サーバとアプリのバージョン¶
アプリとサーバは同じ API の仕様(openapi/openapi.json) でやり取りします。新しい機能は、古いアプリが動かなくならないように(知らない項目は無視されるように)追加しています。 それでも、サーバとアプリはなるべく新しいバージョンにそろえてください。