Развертывание приложения 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 состоит из двух частей:
- Приложение контейнера Azure
- Среда приложения контейнера Azure
На данный момент не беспокойтесь об этом, если вы создадите приложение-контейнер с порталом, среда будет создана автоматически.
Прежде всего перейдите в группу ресурсов, которую вы только что создали:
Нажмите кнопку «Создать» в верхнем левом углу, и вы попадете на этот экран:
Введите «приложение Azure + контейнер» в строке поиска и выберите «Приложение-контейнер» в поле ниже.
Вы попадете на этот экран:
Нажмите кнопку «Создать»:
Назовите свое приложение-контейнер gotut и выберите ближайший к вам регион. Оставьте все остальные настройки без изменений и нажмите «Настройки приложения».
Это приведет вас к этому экрану:
- Снимите флажок «Использовать изображение быстрого запуска»
- Выберите «Docker Hub или другие реестры».
- Тип изображения «Общедоступный»
- В «Изображение и тег» введите «<ваше имя пользователя докера>/gotut:v1
- Вход включен
- Выберите «Принимать трафик откуда угодно»
- Тип входящего трафика — «HTTP».
- Установите целевой порт на «8080». Это порт, который мы выставляем из образа.
Нажмите «Просмотреть + создать».
Нажмите «Создать»:
И через некоторое время вы увидите такой экран:
Нажмите «Перейти к ресурсу».
Вот и все. Чтобы проверить установку, скопируйте «URL-адрес приложения» и вставьте его в браузер следующим образом:
Если все пойдет хорошо, вы должны это сообщение браузера.
Не стесняйтесь играть с кодом. Что было бы действительно неплохо, так это настроить CI/CD для этого небольшого проекта. Это будет темой моего следующего поста.