© 2026 kanakanho
- okarin
- issueを管理するリポジトリ。issueと各リポジトリのPRを紐づけてアップデートを管理する
- kaede
- 今回のシステムの基幹リポジトリでモバイルからのデータを取得しPythonサーバーやDBとの接続などを行う
- nozomi
- Pythonパッケージを用いてセンサデータを処理するためのサーバー
- rikka
- ロジックに全集中したパッケージリポジトリ
999/feat-add-something
イシュー番号/プレフィックス-ブランチ詳細
cd apps/kaede
pnpm install
pnpm run devcd apps/nozomi
uv sync --all-groups
uv run devHOST と PORT は環境変数で上書きできます。
HOST=0.0.0.0 PORT=8080 uv run startこのリポジトリはルートで lefthook を使います。
lefthook installgit commit 時に、kaede と nozomi のチェックが両方実行されます。
kaede を手動で確認する場合:
cd apps/kaede
pnpm lint
pnpm exec prettier --check .
pnpm exec tsc --noEmit
pnpm buildnozomi を手動で確認する場合:
cd apps/nozomi
uv run ruff check .
uv run ruff format --check .
uv run mypy .
uv run pytestapps/kaede/**を変更するとKaede CIが実行されます(lint / format / typecheck / build / docker image build)。apps/nozomi/**を変更するとNozomi CIが実行されます(lint / format / typecheck / pytest / docker image build)。
compose.yml: 共通定義(kaede/nozomi)compose.local.yml: ローカル用オーバーレイ(postgres/seaweedfs追加、ローカルビルド)compose.test.yml: test 用オーバーレイ(ローカルに近い構成で test 用 env を使用)compose.staging.yml: staging 用オーバーレイ(環境変数ファイルを staging に切替)compose.production.yml: production 用オーバーレイ(環境変数ファイルを production に切替)
初回はテンプレートから実ファイルを作成:
cp deploy/env/local.env.example deploy/env/local.env
cp deploy/apps/kaede.local.env.example deploy/apps/kaede.local.env
cp deploy/apps/storage-bootstrap.local.env.example deploy/apps/storage-bootstrap.local.env
cp deploy/seaweedfs/s3.local.conf.example deploy/seaweedfs/s3.local.confdocker compose -p okarin-local -f compose.yml -f compose.local.yml up -d --build --remove-orphans停止:
docker compose -p okarin-local -f compose.yml -f compose.local.yml downローカルの共通環境変数は deploy/env/local.env を使います。
kaede と nozomi で共有する Sentry 設定は deploy/env/local.env、kaede 用の S3 設定は deploy/apps/kaede.local.env、storage-bootstrap 用の認証情報は deploy/apps/storage-bootstrap.local.env を使います。
deploy/seaweedfs/s3.local.conf で S3 認証情報(accessKey / secretKey)を管理しています。
キーを変更する場合は deploy/seaweedfs/s3.local.conf と deploy/apps/kaede.local.env / deploy/apps/storage-bootstrap.local.env の対応する値を同じに更新してください。
これら実ファイルは .gitignore で除外されるため、GitHubには上がりません。
deploy/env/test.env.exampleをベースに test 用の共通 env 実ファイルを作成してください。deploy/apps/kaede.test.env.exampleをベースに test 用のkaedeenv を作成してください。deploy/apps/storage-bootstrap.test.env.exampleをベースに test 用のstorage-bootstrapenv を作成してください。deploy/seaweedfs/s3.test.conf.exampleをベースに test 用の SeaweedFS 実ファイルを作成してください。deploy/env/staging.env.exampleとdeploy/env/production.env.exampleをベースに共通 env の実ファイルを作成してください。deploy/apps/kaede.staging.env.exampleとdeploy/apps/kaede.production.env.exampleをベースにkaede用 env を作成してください。deploy/apps/storage-bootstrap.staging.env.exampleとdeploy/apps/storage-bootstrap.production.env.exampleをベースにstorage-bootstrap用 env を作成してください。deploy/seaweedfs/s3.staging.conf.exampleとdeploy/seaweedfs/s3.production.conf.exampleをベースに SeaweedFS の実ファイルを作成してください。- 各環境の compose override が対応する
env_fileを持ちます。必要ならENV_FILEで上書きできます。
ENV_FILE=./deploy/env/test.env \
docker compose -p okarin-test -f compose.yml -f compose.test.yml up -d --build --remove-orphans停止:
ENV_FILE=./deploy/env/test.env \
docker compose -p okarin-test -f compose.yml -f compose.test.yml downENV_FILE=./deploy/env/staging.env \
docker compose -p okarin-staging -f compose.yml -f compose.staging.yml up -d --build --remove-orphansENV_FILE=./deploy/env/production.env \
docker compose -p okarin-production -f compose.yml -f compose.production.yml up -d --build --remove-orphans停止:
ENV_FILE=./deploy/env/production.env \
docker compose -p okarin-production -f compose.yml -f compose.production.yml down環境ごとにデプロイスクリプトを分ける想定です。
./deploy/scripts/deploy-test.sh [release_ref]
./deploy/scripts/deploy-staging.sh [release_ref]
./deploy/scripts/deploy-production.sh [release_ref]- 各スクリプト内で対象環境を固定しています
- 各スクリプトは
docker composeを直接実行します - 既定では
sudo docker composeを使います。不要な環境ではDOCKER_COMPOSE_BIN='docker compose'で上書きしてください docker inspectも既定ではsudo /usr/bin/dockerを使います。不要な環境ではDOCKER_BIN='docker'で上書きしてくださいpostgresとseaweedfsだけを pull し、kaedeとnozomiはup --buildで更新します- 各スクリプトは
postgres/seaweedfs起動後にdbmate upとstorage-bootstrapを実行してからアプリを起動します - deploy 成功時の revision は
/var/tmp/okarin/revisions/*.last_successfulに保存します - 引数が空なら
SSH_ORIGINAL_COMMANDを使います - それも空なら
mainを deploy 対象にします
直前に成功した revision は以下で確認できます。
cat /var/tmp/okarin/revisions/staging.last_successful
cat /var/tmp/okarin/revisions/production.last_successful手動 rollback は、保存済みの REVISION をそのまま deploy スクリプトへ渡して実行します。deploy スクリプトは branch / tag / commit SHA のいずれも受け付けます。
REVISION=$(sed -n 's/^REVISION=//p' /var/tmp/okarin/revisions/staging.last_successful)
./deploy/scripts/deploy-staging.sh "$REVISION"REVISION=$(sed -n 's/^REVISION=//p' /var/tmp/okarin/revisions/production.last_successful)
./deploy/scripts/deploy-production.sh "$REVISION"注意:
- DB migration を含むため、rollback 対象 revision が現在の DB スキーマと互換かを確認してください
- deploy 失敗時は
docker compose psと各サービスログを確認してから rollback を判断してください
