GoをAzure App ServiceにContainer Deploy
はじめに
こんにちは、立命館大学と同志社大学を中心に活動している学生IT団体watnow代表のまーしーです。Azure App ServiceにGo製のアプリをContainer化してDeployする方法について解説します。
準備
Azureのアカウントを作成してください。
Azure App Serviceには(F1)というインスタンスがあり、制限の範囲内で無料で使うことができます。また、学生の方は大学のメールアドレスで登録することで300$のクレジットをもらうことができます。
Githubのアカウントを作成してください
Docker Hubのアカウントを作成してください
Azure App Serviceとは
Azure App ServiceはAzureが提供するPaas(Platform as a Service)です。サーバの知識がなくても任意のプログラミング言語でWebアプリケーション、backendAPIをホスティングできます。
1.Go製のアプリを用意
用意するアプリは、gin,chi,echo,httpなどなんでも大丈夫です。
例(echo)
teminalで以下のコマンドを実行してecho製のアプリを作成します。
$ mkdir myapp && cd myapp
$ go mod init myapp
$ go get github.com/labstack/echo/v4
main.goを作成します
package main
import (
"net/http"
"os"
"github.com/labstack/echo/v4"
)
func main() {
e := echo.New()
e.GET("/", func(c echo.Context) error {
return c.String(http.StatusOK, "Hello, World!")
})
port := os.Getenv("PORT")
if port == "" {
port = "8080"
}
e.Logger.Fatal(e.Start(":" + port))
}
Dockerfileを用意
dockerfileを作成します。
# build環境
FROM golang:1.20.2-alpine as builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o main .
# 実行環境
FROM alpine
RUN apk update && apk upgrade
RUN mkdir /app
WORKDIR /app
COPY /app/main ./main
CMD ["./main"]
2.ローカルで動作確認
以下を実行してサーバを起動
go run main.go
http://localhost:8080 にアクセスするし
このように出力されればOKです
Hello, World!
3.Github Actionsの設定を行う
yaml設定
./.github/workflows/push-dockerhub.yamlを作成します。
Github Actionsからdockerのbuildを行いDocker HubにpushするAcitonsになります。
name: Build Docker image and push to Docker Hub
on:
push:
branches:
- main
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Check out the repo
uses: actions/checkout@v3
- name: Log in to Docker Hub
uses: docker/login-action@v2.0.0
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push
uses: docker/build-push-action@v3
with:
context: .
push: true
tags: ${{ secrets.DOCKER_USERNAME }}/exampleapp:latest
secretsを設定
GitHubの今回使用するレポジトリで Settings/Secrets and variavles/Actions に行きNew repository secretsに以下の値を設定します
- 設定項目
- 1
- Name
- DOCKER_USERNAME
- Secret
- DockerHubのusername
- Name
- 2
- Name
- DOCKER_PASSWORD
- Secret
- DockerHubのpassword
- Name
- 1
4.Githubに保存
Githubに今回のプロジェクトで使うレポジトリを作成して、Githubにコードをpushしてください。
このときActionsでJobが成功していることを確認してください。
5.DockerHubを確認
DockerHubにアクセスしActionでpushしたdocker imageがあることを確認してください。
6.Azure App Serviceを設定
設定をおこないApp Serviceを作成します。
設定項目
-
基本
- サブスクリプション : 任意
- リソースグループ : 任意
- 名前 : 任意
- 公開 : Dockerコンテナー
- オペレーティングシステム : Linux
- 地域 : 任意
- 価格プラン : Free F1
- サブスクリプション : 任意
-
Docker
- オプション : 単一コンテナー
- イメージソース : Docker Hub
- アクセスの種類 : パブリック
- イメージとタグ : {Docker_UserName}/exampleapp:latest
7.確認
デプロイが完了したら、App Serviceが発行するURLにアクセスして結果を確認します。
このように出力されれば成功です
Hello, World!
Discussion