😽

GitHub Actionsを使ってAPIのデプロイを自動化する

2023/11/18に公開

はじめに

WebAPIを使っていて、デプロイを毎回手元でするのが大変なのでGitHub Actionsで自動化したいと前々から考えていました!

この前に以下のAPIを作ったので、今回はこちらのAPIをGitHub ActionsでDeployを自動化していきます
https://zenn.dev/midra_lab/articles/911cd2a4346575

環境

  • GitHubアカウント(Free)
  • Modal

deployの設定

今回は開発環境もDockerを使っているので、デプロイ時にもDockerを使っていきます。

Dockerの設定

ModalにAPIをデプロイするときに、tokenが必要になってくるため、.modal.toml を起動時にローカルからコピーするようにします。(こちらの生成はActionsでSecretから生成します)

DockerFile

FROM python:3.10.12-slim

WORKDIR /usr/src/app/

COPY requirements.txt ./

#Install build tools necessary for compiling hnswlib
RUN pip install --no-cache-dir -r requirements.txt

#.modal.tomlファイルをコンテナの/root/.modal.tomlにコピーする
COPY .modal.toml /root/.modal.toml

compose.yml

services:
  clip-api:
    build: .
    restart: always
    volumes:
      # ./srcのディレクトリを仮想環境の/usr/src/app/llm-serverにマウントする
      # rwと記述することで書き込みも可能なディレクトリとして認識される
      - ./src:/usr/src/app/:rw

    tty: true

Actionsファイルの設定

mainブランチにpushしたタイミングでDeployをしてほしいので、トリガーをmain branchに設定します

また、GitHub ActionsでDockerを起動する際にttyがSupportされていないと怒られるため、-T を付けて実行します
action.yml

name: Deploy Clip API

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4.1.1

      - name: Create .modal.toml File
        run: echo "$MODAL_TOML" > .modal.toml
        env:
          MODAL_TOML: ${{ secrets.MODAL_TOML }}

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1

      - name: Start Docker Compose
        run: docker-compose up -d

      - name: Execute Deploy Command in Docker Container
        run: docker-compose exec -T clip-api modal deploy clip_api.py

デプロイの実行と結果

pushされたタイミングで以下のように実行されます!

APIも無事にデプロイされていますね!

MidraLab(ミドラボ)

Discussion