Python: GitHub Actions でデプロイする

GitHub Actions を使って Python コードをデプロイする方法

👋 Stackheroのドキュメントへようこそ!

Stackheroは、数多くの利点を提供するPythonクラウドソリューションを提供しています。主な利点は以下の通りです:

  • シンプルなgit pushでアプリケーションを数秒でデプロイ
  • 独自のドメイン名を使用し、HTTPS証明書の自動設定による強化されたセキュリティを享受。
  • 自動バックアップワンクリックアップデート、そしてシンプルで透明性のある予測可能な価格設定で安心を提供。
  • プライベートで専用のVMによる最適なパフォーマンスと強固なセキュリティを実現。

時間を節約し、生活を簡素化: StackheroのPythonクラウドホスティングソリューションを試すのに5分しかかかりません

GitHub Actions を利用すると、Python コードの本番サーバーへのデプロイを含む様々なタスクを自動化できます。

このガイドでは、GitHub Actions を安全かつ信頼性高く設定し、Python コードをステージング環境と本番環境の両方にデプロイする方法を解説します。

運用を整理するために、stagingproduction の2つのブランチを使用します。これらのブランチにコードを push するたびに、対応する Stackhero インスタンスへ自動的にデプロイされます。

ステージングインスタンスの用意は必須ではありません。このガイドに従い、本番インスタンスのみで運用することも可能です。 ただし、スムーズなデプロイと本番環境への安心したリリースのためには、ステージングと本番の両インスタンスを維持することを強く推奨します。 この運用は業界標準であり、多くの問題を未然に防ぐ堅実なアプローチです。

始める前に、GitHub アカウントとコードをホストしているリポジトリがあることを確認してください。

Stackhero ダッシュボードにアクセスし、ステージング用と本番用の2つの Stackhero サービスを作成します。分かりやすくするために、それぞれ「Production」と「Staging」といった名前を付けると良いでしょう。

まだ Stackhero アカウントをお持ちでない場合は? 無料で2分ほどで登録でき、その後 Python クラウドサービス を数クリックで作成できます。

本番・ステージングサービスの例本番・ステージングサービスの例

SSH キーは、GitHub Actions が安全に Python サービスへ接続し、コードをデプロイするために必要です。このステップは Stackhero サービスの保護において非常に重要です。

ローカル環境で新しい SSH キーを生成するには、以下のコマンドを実行します:

ssh-keygen -C "" -f /tmp/ssh_key -N ""

まず、生成した公開鍵を表示します:

cat /tmp/ssh_key.pub

次に、Stackhero ダッシュボードで「production」Python サービスを選択し、「Configure」ボタンをクリックします。

サービス設定の取得サービス設定の取得

以下の手順に従ってください:

  1. SSH public keys の下で Add a public key をクリックします。
  2. Description には GitHub Action と入力します。
  3. Key には先ほどコピーした公開鍵を貼り付けます。

公開鍵の追加公開鍵の追加

GitHub プロジェクトページで SettingsEnvironments をクリックし、New environment を選択します。

GitHub 環境の設定GitHub 環境の設定

Name フィールドに「production」と入力し、確定します。

環境の設定環境の設定

No restriction ボタンをクリックし、Selected branches and tags を選択します。

環境制限の設定環境制限の設定

次に、Add deployment branch or tag rule をクリックし、Name pattern フィールドに「production」と入力して Add rule をクリックします。

環境ブランチの設定環境ブランチの設定 環境ブランチの設定環境ブランチの設定

Environment secrets セクションで Add secret をクリックします。

シークレットの追加シークレットの追加

先ほど生成した秘密鍵を表示します:

cat /tmp/ssh_key

シークレットの設定では、Name に STACKHERO_SSH_PRIVATE_KEY、Value に秘密鍵を貼り付けてください。

SSH 秘密鍵シークレットの設定SSH 秘密鍵シークレットの設定

続いて、Environment variables セクションで Add variable をクリックします。

変数の設定変数の設定

Name に STACKHERO_ENDPOINT を入力し、Value には Stackhero ダッシュボードで確認できる Python サービスのエンドポイントを貼り付けます。

エンドポイント変数の設定エンドポイント変数の設定

サービスのドメイン名をカスタマイズしている場合は、<XXXXXX>.stackhero-network.com の代わりにカスタマイズしたドメインを使用してください。

セキュリティのため、これらの SSH キーはもう必要ありませんので、ローカルから削除しておきましょう:

rm /tmp/ssh_key /tmp/ssh_key.pub

リポジトリ内に .github/workflows ディレクトリがなければ作成し、その中に deploy-to-stackhero.yml というファイルを追加します。

# File: .github/workflows/deploy-to-stackhero.yml

name: Deploy to Stackhero
run-name: Deploy branch "${{ github.ref_name }}" to Stackhero

on:
  push:
    # git push 時にデプロイアクションをトリガーするブランチのリストです。
    # GitHub の「Settings」→「Environments」で、ブランチ名に対応する環境を作成するのを忘れずに。
    # その環境に対応するシークレット "STACKHERO_SSH_PRIVATE_KEY" と変数 "STACKHERO_ENDPOINT" を追加してください。
    branches: [ "production", "staging" ]

jobs:
  Deploy:
    environment: ${{ github.ref_name }}
    runs-on: ubuntu-latest
    steps:
    - uses: stackhero-io/github-actions-deploy-to-stackhero@v1
      with:
        # シークレット "STACKHERO_SSH_PRIVATE_KEY" と変数 "STACKHERO_ENDPOINT" は、GitHub の「Settings」→「Environments」で該当ブランチの環境に設定してください。
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

ワークフローファイルを追加したら、変更をコミットします:

git add -A .
git commit -m "Add GitHub Actions to deploy to Stackhero"

本番ブランチを作成するには:

git checkout -b production

そして、変更を GitHub に push します:

git push --set-upstream origin production

これで、production ブランチが GitHub に push され、GitHub Actions がトリガーされて Stackhero インスタンスへコードがデプロイされます。

デプロイ状況を確認するには、GitHub プロジェクトページで Actions をクリックしてください。

本番環境にデプロイされた GitHub Actions本番環境にデプロイされた GitHub Actions

以上で、GitHub Actions を使った本番環境への自動デプロイが完了です。

ステージング環境のセットアップは本番環境とほぼ同じです。上記の手順を productionstaging に置き換えて繰り返してください。

環境の設定後、以下のようにしてステージングブランチを作成できます:

git checkout -b staging

その後、ステージングブランチを GitHub に push します:

git push --set-upstream origin staging

これで、ステージングブランチが指定した Python インスタンスに自動的にデプロイされます。

production および staging ブランチへの直接 push を防ぐため、これらのブランチを保護することをおすすめします。この構成では、チームメンバーは staging ブランチへのプルリクエストを作成し、適切な権限を持つユーザーがレビュー・マージする必要があります。ステージング環境で変更が検証された後、認可された担当者が production ブランチへマージできます。

このワークフローにより、承認済みの変更のみが本番環境に反映されるとともに、新機能を本番公開前にステージングでテストできるため、信頼性も向上します。