はい、このドキュメントを日本語に翻訳いたします。
Docker Composeを使用してリモートサーバーにプロジェクトをデプロイできます。
このプロジェクトでは、外部との通信とHTTPS証明書を処理するTraefikプロキシがあることを前提としています。
CI/CD(継続的インテグレーションと継続的デプロイメント)システムを使用して自動的にデプロイできます。GitHub Actionsで実行するための設定がすでに用意されています。
ただし、最初にいくつかの設定を行う必要があります。🤓
- リモートサーバーが準備され、利用可能な状態であること。
- ドメインのDNSレコードを、作成したサーバーのIPを指すように設定すること。
- ドメインのワイルドカードサブドメインを設定し、異なるサービスに対して複数のサブドメインを持てるようにすること。例:
*.fastapi-project.example.com。これはdashboard.fastapi-project.example.com、api.fastapi-project.example.com、traefik.fastapi-project.example.com、adminer.fastapi-project.example.comなどの異なるコンポーネントにアクセスする際に役立ちます。また、staging環境用のdashboard.staging.fastapi-project.example.com、adminer.staging.fastapi-project.example.comなどにも使用できます。 - リモートサーバーにDockerをインストールし、設定すること(Docker Engineを使用し、Docker Desktopではありません)。
着信接続とHTTPS証明書を処理するためにTraefikプロキシが必要です。
以下の手順は一度だけ実行する必要があります。
- TraefikのDocker Composeファイルを保存するリモートディレクトリを作成します:
mkdir -p /root/code/traefik-public/TraefikのDocker Composeファイルをサーバーにコピーします。ローカルターミナルでrsyncコマンドを実行して行うことができます:
rsync -a compose.traefik.yml root@your-server.example.com:/root/code/traefik-public/このTraefikは、スタックとの通信のためにtraefik-publicという名前のDocker "パブリックネットワーク"を想定しています。
これにより、外部世界との通信(HTTPとHTTPS)を処理する単一のパブリックTraefikプロキシがあり、その背後に1つまたは複数のスタックを持つことができます。これらのスタックは、同じ単一のサーバー上にあっても異なるドメインを持つことができます。
traefik-publicという名前のDocker "パブリックネットワーク"を作成するには、リモートサーバーで次のコマンドを実行します:
docker network create traefik-publicTraefikのDocker Composeファイルは、起動前にターミナルでいくつかの環境変数を設定することを想定しています。リモートサーバーで次のコマンドを実行して設定できます。
- HTTP Basic認証用のユーザー名を作成します。例:
export USERNAME=admin- HTTP Basic認証用のパスワードを環境変数に設定します。例:
export PASSWORD=changethis- opensslを使用してHTTP Basic認証用のパスワードの"ハッシュ化"バージョンを生成し、環境変数に保存します:
export HASHED_PASSWORD=$(openssl passwd -apr1 $PASSWORD)ハッシュ化されたパスワードが正しいことを確認するには、次のように表示できます:
echo $HASHED_PASSWORD- サーバーのドメイン名を環境変数に設定します。例:
export DOMAIN=fastapi-project.example.com- Let's Encrypt用のメールアドレスを環境変数に設定します。例:
export EMAIL=admin@example.com注意:異なるメールアドレスを設定する必要があります。@example.comのメールアドレスは機能しません。
リモートサーバーでTraefikのDocker Composeファイルをコピーしたディレクトリに移動します:
cd /root/code/traefik-public/環境変数を設定し、compose.traefik.ymlが配置されたら、次のコマンドを実行してTraefikのDocker Composeを起動できます:
docker compose -f compose.traefik.yml up -dTraefikが設置されたら、Docker Composeを使用してFastAPIプロジェクトをデプロイできます。
注意:GitHub Actionsを使用した継続的デプロイメントのセクションに進むこともできます。
まず、いくつかの環境変数を設定する必要があります。
ENVIRONMENTを設定します。デフォルトはlocal(開発用)ですが、サーバーにデプロイする場合はstagingやproductionなどを設定します:
export ENVIRONMENT=productionDOMAINを設定します。デフォルトはlocalhost(開発用)ですが、デプロイ時には独自のドメインを使用します。例:
export DOMAIN=fastapi-project.example.com以下のような複数の変数を設定できます:
PROJECT_NAME:プロジェクト名。APIのドキュメントやメールで使用されます。STACK_NAME:Docker Composeのラベルとプロジェクト名に使用されるスタック名。staging、productionなどで異なる必要があります。ドットをハイフンに置き換えたドメインを使用できます(例:fastapi-project-example-comやstaging-fastapi-project-example-com)。BACKEND_CORS_ORIGINS:許可されるCORSオリジンのリスト(カンマ区切り)。SECRET_KEY:FastAPIプロジェクトの秘密鍵。トークンの署名に使用されます。FIRST_SUPERUSER:最初のスーパーユーザーのメールアドレス。このスーパーユーザーが新しいユーザーを作成できます。FIRST_SUPERUSER_PASSWORD:最初のスーパーユーザーのパスワード。SMTP_HOST:メール送信用のSMTPサーバーホスト。メールプロバイダー(Mailgun、Sparkpost、Sendgridなど)から提供されます。SMTP_USER:メール送信用のSMTPサーバーユーザー。SMTP_PASSWORD:メール送信用のSMTPサーバーパスワード。EMAILS_FROM_EMAIL:メール送信元のメールアカウント。POSTGRES_SERVER:PostgreSQLサーバーのホスト名。同じDocker Composeで提供されるデフォルトのdbのままにできます。サードパーティのプロバイダーを使用しない限り、通常は変更する必要はありません。POSTGRES_PORT:PostgreSQLサーバーのポート。デフォルトのままにできます。サードパーティのプロバイダーを使用しない限り、通常は変更する必要はありません。POSTGRES_PASSWORD:Postgresのパスワード。POSTGRES_USER:Postgresのユーザー名。デフォルトのままにできます。POSTGRES_DB:このアプリケーションで使用するデータベース名。デフォルトのappのままにできます。SENTRY_DSN:Sentryを使用している場合のDSN。
GitHub Actionsでのみ使用される環境変数があります:
LATEST_CHANGES:GitHub Action latest-changesで使用され、マージされたPRに基づいてリリースノートを自動的に追加します。これは個人用アクセストークンです。詳細はドキュメントを参照してください。SMOKESHOW_AUTH_KEY:Smokeshowを使用してコードカバレッジを処理し公開するために使用されます。Smokeshowの指示に従って(無料の)Smokeshowキーを作成してください。
.envファイル内のいくつかの環境変数は、デフォルト値がchangethisになっています。
これらを秘密鍵に変更する必要があります。秘密鍵を生成するには、次のコマンドを実行できます:
python -c "import secrets; print(secrets.token_urlsafe(32))"出力内容をコピーし、パスワード/秘密鍵として使用します。別の安全な鍵を生成するには、このコマンドを再度実行します。
環境変数を設定したら、Docker Composeでデプロイできます:
docker compose -f compose.yml up -d本番環境ではcompose.override.ymlのオーバーライドは不要なため、明示的にcompose.ymlをファイルとして指定しています。
GitHub Actionsを使用してプロジェクトを自動的にデプロイできます。😎
複数の環境デプロイメントを持つことができます。
すでにstagingとproductionの2つの環境が設定されています。🚀
- リモートサーバーで
rootユーザーとして実行している場合、GitHub Actions用のユーザーを作成します:
adduser githubgithubユーザーにDockerの権限を追加します:
usermod -aG docker github- 一時的に
githubユーザーに切り替えます:
su - githubgithubユーザーのホームディレクトリに移動します:
cd-
ラベルについて尋ねられたら、環境のラベル(例:
production)を追加します。後でラベルを追加することもできます。
インストール後、ガイドではランナーを開始するコマンドを実行するよう指示されますが、そのプロセスを終了したり、サーバーへのローカル接続が失われると停止してしまいます。
起動時に確実に実行され、継続的に実行されるようにするには、サービスとしてインストールできます。そのために、githubユーザーを終了し、rootユーザーに戻ります:
exitこれを行うと、再びrootユーザーになります。また、rootユーザーに属する以前のディレクトリにいることになります。
githubユーザーのホームディレクトリ内のactions-runnerディレクトリに移動します:
cd /home/github/actions-runner- セルフホストランナーを
githubユーザーでサービスとしてインストールします:
./svc.sh install github- サービスを開始します:
./svc.sh start- サービスのステータスを確認します:
./svc.sh status詳細は公式ガイドを参照してください:セルフホストランナーアプリケーションをサービスとして設定する。
リポジトリで、上記で説明した環境変数(SECRET_KEYなど)のシークレットを設定します。リポジトリのシークレットを設定する公式GitHubガイドに従ってください。
現在のGitHub Actionsワークフローは以下のシークレットを想定しています:
DOMAIN_PRODUCTIONDOMAIN_STAGINGSTACK_NAME_PRODUCTIONSTACK_NAME_STAGINGEMAILS_FROM_EMAILFIRST_SUPERUSERFIRST_SUPERUSER_PASSWORDPOSTGRES_PASSWORDSECRET_KEYLATEST_CHANGESSMOKESHOW_AUTH_KEY
.github/workflowsディレクトリには、環境(ラベル付きのGitHub Actionsランナー)へのデプロイ用にすでに設定されたGitHub Actionワークフローがあります:
staging:mainブランチへのプッシュ(またはマージ)後。production:リリース公開後。
追加の環境が必要な場合は、これらを出発点として使用できます。
fastapi-project.example.comを自分のドメインに置き換えてください。
Traefik UI: https://traefik.fastapi-project.example.com
フロントエンド: https://fastapi-project.example.com
バックエンド: https://fastapi-project.example.com/api/
Swagger UI: https://fastapi-project.example.com/docs
Adminer: https://adminer.fastapi-project.example.com
フロントエンド: https://staging.fastapi-project.example.com
バックエンド: https://staging.fastapi-project.example.com/api/
Swagger UI: https://staging.fastapi-project.example.com/docs
Adminer: https://adminer.staging.fastapi-project.example.com