レジストリ

レジストリは、アプリケーションやファイルのバージョン管理を担うDewyの中核コンポーネントです。 Dewyはセマンティックバージョニングに基づいて最新版を自動検出し、継続的なデプロイメントを実現します。

対応レジストリ

Dewyは以下のレジストリタイプに対応しています。

  • GitHub Releases (ghr://): GitHubのリリース機能
  • AWS S3 (s3://): Amazon S3ストレージ
  • Google Cloud Storage (gs://): Google Cloudストレージ
  • OCIレジストリ (img://): OCI準拠のコンテナレジストリ(Docker Hub、GHCR、GCR、ECRなど)
  • gRPC (grpc://): カスタムgRPCサーバー

共通オプション

すべてのレジストリで使用できる共通オプションがあります。

オプション説明
pre-releaseboolプレリリースバージョンを含めるかどうか
artifactstring自動選択されないアーティファクト名を明示指定

GitHub Releases

GitHubリリースをレジストリとして使用する最も一般的な方法です。

基本設定

# 基本形式
ghr://<owner>/<repo>

# 例
dewy server --registry ghr://linyows/myapp -- /opt/myapp/current/myapp

認証

DewyはGitHubの認証方式として、Personal Access Token(PAT)とGitHub Appの2つをサポートしています。

Personal Access Token(PAT)

最もシンプルな認証方式です。環境変数で設定します:

# GH_TOKENが優先されます(GitHub Actionsの自動上書きを避けるため推奨)
export GH_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx

# またはGITHUB_TOKENを使用
export GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
note

PATの有効期限は最長1年です。長期運用にはGitHub App認証を推奨します。

GitHub App認証(本番環境推奨)

本番環境ではGitHub App認証を推奨します。以下のメリットがあります:

  • 自動トークン更新: 手動でのトークンローテーションが不要
  • きめ細かな権限設定: 必要な権限のみをリクエスト
  • セキュリティ向上: 長期間有効なトークンの管理が不要
  • 監査ログ: API使用状況の追跡が容易

環境変数:

変数名説明必須
GITHUB_APP_IDGitHub App IDYes
GITHUB_APP_INSTALLATION_IDInstallation IDYes
GITHUB_APP_PRIVATE_KEYPEM形式の秘密鍵(直接指定)いずれか
GITHUB_APP_PRIVATE_KEY_PATH秘密鍵ファイルのパスいずれか

GITHUB_APP_PRIVATE_KEYまたはGITHUB_APP_PRIVATE_KEY_PATHのいずれかが必要です。

使用例:

export GITHUB_APP_ID=123456
export GITHUB_APP_INSTALLATION_ID=789012
export GITHUB_APP_PRIVATE_KEY_PATH=/path/to/private-key.pem

dewy server --registry ghr://owner/repo -- /opt/app/current/app

認証の優先順位

複数の認証方式が設定されている場合、Dewyは以下の優先順位で使用します:

  1. GitHub AppGITHUB_APP_IDが設定されている場合)
  2. PATGH_TOKEN > GITHUB_TOKEN

GitHub Enterprise Server

GitHub Enterprise Serverを使用する場合は、APIエンドポイントを設定します:

export GITHUB_API_URL=https://github.example.com/api/v3/
# または
export GITHUB_ENDPOINT=https://github.example.com/api/v3/

GitHub Appの作成

GitHub App認証を使用するには、GitHub Appを作成する必要があります。

1. Appの作成

  1. SettingsDeveloper settingsGitHub AppsNew GitHub App に移動
  2. 基本設定を入力:
    • GitHub App name: 例: dewy-deployer
    • Homepage URL: リポジトリURLまたはドキュメント
  3. Webhookの設定:
    • Active: チェックを外す(DewyはWebhookではなくポーリングを使用)
  4. 権限の設定:
    • Repository permissions:
      • Contents: Read & Write(リリース、アセット、デプロイ監査記録に必要)
  5. インストール範囲を選択:
    • Only on this account または Any account
note

Write権限はデプロイ監査機能に必要です。この機能はデプロイ情報をリリースアセットとして記録します。

2. 秘密鍵の生成

  1. App作成後、App設定ページに移動
  2. Private keys セクションまでスクロール
  3. Generate a private key をクリック
  4. ダウンロードされた .pem ファイルを安全に保管

3. Appのインストール

  1. App設定 → Install App に移動
  2. 組織またはユーザーアカウントを選択
  3. Only select repositories を選択し、対象リポジトリを選択
  4. Install をクリック

4. 必要な値の取得

  • App ID: App設定ページの「App ID」に記載
  • Installation ID: インストール後のURLを確認:
    • https://github.com/settings/installations/XXXXXX
    • XXXXXX の部分がInstallation ID

オプション付きの例

# プレリリース版も含める(ステージング環境)
dewy server --registry "ghr://linyows/myapp?pre-release=true"

# 特定のアーティファクトを指定
dewy server --registry "ghr://linyows/myapp?artifact=myapp-server.tar.gz"

# 両方のオプションを使用
dewy server --registry "ghr://linyows/myapp?pre-release=true&artifact=myapp-server.tar.gz"

アーティファクトの自動選択

アーティファクト名を指定しない場合、Dewyは以下の規則で自動選択します:

  1. 現在のOS(linux, darwin, windows)を含むファイル名
  2. 現在のアーキテクチャ(amd64, arm64等)を含むファイル名
  3. 最初にマッチしたアーティファクトを選択

例:Linux amd64環境では myapp_linux_amd64.tar.gz が自動選択されます。

important

新しく作成されたリリースについては、CI/CDでのアーティファクトビルド時間を考慮して30分間のグレースピリオドがあります。 この間は「アーティファクトが見つからない」エラーが発生しても通知されません。

AWS S3

S3互換ストレージをレジストリとして使用できます。

基本設定

# 基本形式
s3://<region>/<bucket>/<path-prefix>

# 例
dewy server --registry s3://ap-northeast-1/my-releases/myapp

環境変数

export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

# オプション:エンドポイントURL(S3互換サービス用)
export AWS_ENDPOINT_URL=https://s3.isk01.sakurastorage.jp

オブジェクトパス規則

S3内のオブジェクトは以下の構造で配置する必要があります:

<path-prefix>/<semver>/<artifact>

実際の例:

my-releases/myapp/v1.2.4/myapp_linux_amd64.tar.gz
my-releases/myapp/v1.2.4/myapp_linux_arm64.tar.gz
my-releases/myapp/v1.2.4/myapp_darwin_arm64.tar.gz
my-releases/myapp/v1.2.3/myapp_linux_amd64.tar.gz
my-releases/myapp/v1.2.3/myapp_linux_arm64.tar.gz
my-releases/myapp/v1.2.3/myapp_darwin_arm64.tar.gz

オプション付きの例

# カスタムエンドポイント(さくらのクラウド等)
dewy server --registry "s3://jp-north-1/my-bucket/myapp?endpoint=https://s3.isk01.sakurastorage.jp"

# プレリリース版を含める
dewy server --registry "s3://us-west-2/releases/myapp?pre-release=true"

Google Cloud Storage

Google Cloud StorageをレジストリとSupport使用できます。

基本設定

# 基本形式
gs://<bucket>/<path-prefix>

# 例
dewy server --registry gs://my-releases-bucket/myapp

環境変数

# サービスアカウントキーを使用
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json

または、Google Cloud SDKの認証情報やWorkload Identityを使用することも可能です。

オブジェクトパス規則

S3と同様の構造で配置します:

myapp/v1.2.4/myapp_linux_amd64.tar.gz
myapp/v1.2.4/myapp_darwin_arm64.tar.gz
myapp/v1.2.3/myapp_linux_amd64.tar.gz

OCIレジストリ

OCI準拠のコンテナレジストリは、dewy containerコマンドでコンテナイメージのデプロイメントに使用できます。

caution

OCIレジストリでは監査追跡(Audit tracking)に対応していません。

対応レジストリ

DewyはOCI Distribution Specification準拠のすべてのレジストリをサポートしています:

  • GitHub Container Registry (ghcr.io)
  • Docker Hub (docker.io)
  • Google Artifact Registry (gcr.io, us-docker.pkg.dev)
  • Amazon Elastic Container Registry (ECR)
  • Azure Container Registry (azurecr.io)
  • プライベート/セルフホスト型レジストリ (Harbor、Nexusなど)

基本設定

# GitHub Container Registry
img://ghcr.io/<owner>/<repository>

# Docker Hub
img://docker.io/<owner>/<repository>
# または短縮形式
img://<owner>/<repository>

# Google Artifact Registry
img://gcr.io/<project-id>/<repository>

# プライベートレジストリ
img://registry.example.com/<repository>

認証

Dewyは、Dockerの認証システムを使用します。docker loginで認証してください:

# レジストリにログイン(認証情報は~/.docker/config.jsonに保存されます)
docker login ghcr.io
docker login docker.io

# Dewyは自動的にこれらの認証情報を使用します
dewy container --registry img://ghcr.io/myorg/myapp

オプション付きの例

# 基本的な使用法
dewy container --registry img://ghcr.io/myorg/myapp

# プレリリースバージョンを含める
dewy container --registry "img://ghcr.io/myorg/myapp?pre-release=true"

# コンテナオプション付き
dewy container --registry img://ghcr.io/myorg/myapp \
  --port 8000:8080 \
  --health-path /health

レジストリ別の例

GitHub Container Registry (GHCR)

# パブリックイメージ
dewy container --registry img://ghcr.io/owner/app

# プライベートイメージ(認証が必要)
docker login ghcr.io
dewy container --registry img://ghcr.io/owner/private-app

Docker Hub

# 公式イメージ(libraryネームスペース)
dewy container --registry img://docker.io/library/nginx

# ユーザーイメージ
dewy container --registry img://docker.io/myuser/myapp

# 短縮形式(docker.ioはデフォルト)
dewy container --registry img://myuser/myapp

Google Artifact Registry

# gcloudで認証
gcloud auth configure-docker gcr.io

# イメージをデプロイ
dewy container --registry img://gcr.io/my-project/myapp

AWS ECR

# ECRにログイン
aws ecr get-login-password --region ap-northeast-1 | \
  docker login --username AWS --password-stdin \
  123456789.dkr.ecr.ap-northeast-1.amazonaws.com

# イメージをデプロイ
dewy container --registry img://123456789.dkr.ecr.ap-northeast-1.amazonaws.com/myapp

タグとバージョン選択

Dewyはセマンティックバージョニングに基づいてコンテナイメージタグを自動的に選択します:

# レジストリ内のタグ:
# - v1.2.3
# - v1.2.2
# - v1.2.3-beta.1
# - latest

# 本番環境(安定版のみ、v1.2.3を選択)
dewy container --registry img://ghcr.io/myorg/myapp

# ステージング環境(プレリリースを含む、新しい場合はv1.2.3-beta.1を選択)
dewy container --registry "img://ghcr.io/myorg/myapp?pre-release=true"

マルチアーキテクチャサポート

DewyはOCI Image Index(マニフェストリスト)を使用して、適切なアーキテクチャを自動的に選択します:

# ホストシステムに基づいてamd64、arm64、または他のアーキテクチャを自動的にプル
dewy container --registry img://ghcr.io/myorg/myapp

ローリングアップデートワークフロー

OCIレジストリをdewy containerコマンドと使用する場合:

  1. Dewyは指定された間隔でレジストリの新しいタグをポーリングします
  2. セマンティックバージョニング準拠の新しいタグが自動的に検出されます
  3. 新しいコンテナイメージがプルされます
  4. 新しいコンテナのヘルスチェックが実行されます(設定されている場合)
  5. 古いコンテナはドレインされて削除されます
# すべての機能を使用した完全な例
dewy container \
  --registry img://ghcr.io/myorg/myapp \
  --interval 300 \
  --port 8000:8080 \
  --health-path /health \
  --health-timeout 30 \
  --drain-time 30 \
  --log-level info
important

OCIレジストリは、コンテナデプロイメント用のdewy containerコマンドでのみ使用されます。 バイナリデプロイメントには、GitHub Releases、S3、またはGCSレジストリを使用してください。

gRPC

カスタムgRPCサーバーをレジストリとして使用できます。

基本設定

# 基本形式
grpc://<server-host>

# 例
dewy server --registry grpc://registry.example.com:9000

# TLS無しの場合
dewy server --registry "grpc://localhost:9000?no-tls=true"

特徴

  • gRPCサーバーがアーティファクトURLを動的に提供
  • pre-releaseartifactオプションは使用不可
  • カスタムロジックによる柔軟な制御が可能

セマンティックバージョニング

Dewyはセマンティックバージョニング(semver)に準拠したバージョン管理を行います。

対応形式

# 標準的なバージョン
v1.2.3
1.2.3

# プレリリース版
v1.2.3-rc
v1.2.3-beta.2
v1.2.3-alpha.1

プレリリース版の使い分け

# 本番環境(安定版のみ)
dewy server --registry ghr://myorg/myapp

# ステージング環境(プレリリース版も含む)
dewy server --registry "ghr://myorg/myapp?pre-release=true"

CI/CDパイプラインでの使用

# GitHub Actions
- name: Deploy with Dewy
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  run: |
    dewy server --registry ghr://${{ github.repository }} \
      --log-level info --port 8080 -- /opt/app/current/app

マルチステージデプロイメント

# ステージング環境
ENVIRONMENT=staging dewy server \
  --registry "ghr://myorg/myapp?pre-release=true" \
  --notifier "slack://staging-deploy?title=myapp-staging"

# 本番環境
ENVIRONMENT=production dewy server \
  --registry "ghr://myorg/myapp" \
  --notifier "slack://prod-deploy?title=myapp-prod"

トラブルシューティング

アーティファクトが見つからない

  1. バージョンタグの確認: セマンティックバージョニングに準拠しているか
  2. アーティファクト名の確認: OS/アーキテクチャが含まれているか
  3. 権限の確認: 認証情報が正しく設定されているか

デバッグ方法

# デバッグログを有効にして詳細を確認
dewy server --registry ghr://owner/repo --log-level debug

レジストリは Dewy の動作の中核となる重要なコンポーネントです。用途に応じて適切なレジストリタイプを選択し、効率的なデプロイメント環境を構築してください。