Развертывание приложения Go (с Gin) в приложении-контейнере Azure

Одна из первых вещей, которая заставила меня захотеть изучить Go, помимо неутолимого любопытства, — это возможность писать веб-API. Для этого я нашел структуру Gin довольно простой в использовании. Тем не менее, API всегда необходимо развертывать, и, поскольку Microsoft Azure является моей предпочтительной платформой для развертывания API, я решил попробовать.

Предпосылки

Чтобы следовать этому руководству, вам понадобится несколько инструментов:

  • Подписка Azure. Это может быть бесплатная подписка. Для получения дополнительной информации см. здесь
  • Visual Studio Code установлен на вашем компьютере. Вы можете скачать это сздесь.
  • Установка Go на вашем компьютере, у меня на компьютере установлена ​​версия 1.20.1. На этой странице вы можете найти установщики.
  • Докер установлен рабочий стол и учетная запись концентратора Docker
  • Аккаунт на гитхаб является необязательным.

Что мы строим

Мы создадим очень простой веб-API, состоящий только из вызова API, возвращающего базовое сообщение JSON.

Настройка проекта go

Сначала убедитесь, что у вас есть каталог, в котором вы можете собрать это, и что выполнены необходимые предварительные условия.

Для ясности: я работаю на машине с Windows, используя терминал. Если вы используете Mac Os, вы также можете использовать инструмент терминала, а если вы работаете в Linux, доступно несколько терминалов.

В инструменте командной строки по вашему выбору введите:

go mod init github.com/<yourname>/azuregotut

Создается файл go.mod. В этом файле определены все зависимости нашего проекта.

Установка Джина

В этом проекте я буду использовать Gin в качестве основного backend-фреймворка. Gin прост в использовании, достаточно эффективен и удобен для разработчиков.

Чтобы установить Gin в свой проект, просто используйте:

go get -u github.com/gin-gonic/gin

Откройте свой проект в Visual Studio Code (VSCode) с помощью

code .

В VS Code создайте файл с именем gotut.go

Теперь введите в этот файл следующий код:

package main

import (
  "net/http"

  "github.com/gin-gonic/gin"
)

func main() {
  router := gin.Default()

  api := router.Group("/api")

  api.GET("/ping", func(c *gin.Context) {
    c.JSON(http.StatusOK, gin.H{"message": "OK"})
  })

  router.Run()
}

Коротко о том, что здесь происходит

Сначала мы определяем пакет и импорт. Для этого простого API нам нужны только два импорта: стандартная библиотека net/http и пакет gin.

В основной функции мы определяем маршрутизатор и группу API (последнее необязательно, но я всегда делаю это, чтобы мои API были аккуратно организованы).

В этой группе API я определяю действие GET, которое возвращает некоторый JSON.

Сохраните этот файл, а затем в VS Code откройте терминал и введите:

go run .

Теперь перейдите к и если все правильно, вы должны JSON в своем браузере.

Сборка Docker-файла

Теперь, когда у нас есть работающий веб-API, мы хотим запустить его в Azure. Для этого нам нужно создать образ докера.

Для сборки такого образа нам понадобится Dockerfile. В проекте VS Code добавьте новый файл с именем Dockerfile и введите следующее содержимое:

FROM golang:1.20-alpine

WORKDIR /app

COPY go.mod .
COPY go.sum .
RUN go mod download

COPY . .

RUN go build -o gotut .

EXPOSE 8080

CMD ["./gotut"]

Краткий обзор этого Dockerfile

Мы начинаем с использования небольшого образа go, затем определяем рабочий каталог и загружаем все моды. В нашем случае это только один: джин. Затем мы копируем остальную часть кода и собираем приложение.

После этого выставляем порт 8080, это будет важно в дальнейшем, а затем запускаем исполняемый файл.

Теперь убедитесь, что у вас запущен либо демон Docker, либо рабочий стол Docker, и введите:

docker build -t <your dockerhub username>/gotut:v1 .

Теперь Docker создаст образ, это может занять несколько минут, так что наберитесь терпения.

Чтобы иметь возможность использовать этот образ в Azure, нам нужно отправить его в концентратор Docker. Сначала нам нужно авторизоваться

docker login

При необходимости введите свои учетные данные

Теперь мы готовы отправить образ в Docker Hub.

docker push <your dockerhub username>/gotut:v1

В зависимости от скорости вашего интернет-соединения это может занять несколько минут.

Подготовка среды Azure

Чтобы развернуть этот образ в Azure, нам нужно настроить среду Azure и необходимые ресурсы.

Настройка группы ресурсов

Все ресурсы Azure, такие как приложение-контейнер Azure, которое мы будем создавать, являются частью группы ресурсов, поэтому ее мы настроим в первую очередь.

После входа в систему вы увидите домашний экран, поверх которого вы увидите эту панель.

Лазурный бар

Отсюда выберите значок группы ресурсов, и вы увидите этот экран.

Нажмите кнопку «Создать» в левом верхнем углу экрана, и вы увидите этот экран:

Для этого урока я выбрал название группы ресурсов «rg-gotut» и ближайший к вам регион (в моем случае это «Западная Европа»):

Нажмите кнопку «Проверить + создать», и ваша установка будет подтверждена, и вам будет представлен этот экран:

Нажмите кнопку «Создать», и группа ресурсов будет создана:

Добавление приложения контейнера Azure

Теперь пришло время добавить приложение-контейнер в группу ресурсов. Приложение-контейнер в Azure состоит из двух частей:

  1. Приложение контейнера Azure
  2. Среда приложения контейнера Azure

На данный момент не беспокойтесь об этом, если вы создадите приложение-контейнер с порталом, среда будет создана автоматически.

Прежде всего перейдите в группу ресурсов, которую вы только что создали:

Нажмите кнопку «Создать» в верхнем левом углу, и вы попадете на этот экран:

Введите «приложение Azure + контейнер» в строке поиска и выберите «Приложение-контейнер» в поле ниже.

Вы попадете на этот экран:

Нажмите кнопку «Создать»:

Назовите свое приложение-контейнер gotut и выберите ближайший к вам регион. Оставьте все остальные настройки без изменений и нажмите «Настройки приложения».

Это приведет вас к этому экрану:

  1. Снимите флажок «Использовать изображение быстрого запуска»
  2. Выберите «Docker Hub или другие реестры».
  3. Тип изображения «Общедоступный»
  4. В «Изображение и тег» введите «<ваше имя пользователя докера>/gotut:v1
  5. Вход включен
  6. Выберите «Принимать трафик откуда угодно»
  7. Тип входящего трафика — «HTTP».
  8. Установите целевой порт на «8080». Это порт, который мы выставляем из образа.

Нажмите «Просмотреть + создать».

Нажмите «Создать»:

И через некоторое время вы увидите такой экран:

Нажмите «Перейти к ресурсу».

Вот и все. Чтобы проверить установку, скопируйте «URL-адрес приложения» и вставьте его в браузер следующим образом:

Если все пойдет хорошо, вы должны это сообщение браузера.

Не стесняйтесь играть с кодом. Что было бы действительно неплохо, так это настроить CI/CD для этого небольшого проекта. Это будет темой моего следующего поста.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *