Добро пожаловать в нашу серию статей о Голанг в Зеропс! Если вы пропустили предыдущую публикацию, взгляните на Создание простого приложения TODO с Gin-gonic в Zerops: пошаговое руководство, чтобы наверстать упущенное.

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


1. Настройте свой проект в Zerops

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

Выполните следующие шаги, чтобы Zerops был готов для вашего приложения:

  1. Войти в Зеропс
  2. Создать новый проект
  3. Добавить новый Голанг оказание услуг

Запишите названия проекта и сервиса, они понадобятся вам в будущем. Для нашего примера приложения мы создали проект с именем мой проект и сервис Golang под названием Привет, мир.


1.1. Запуск конвейера (GUI/zCLI)

Как только у вас есть zerops.yml готовы, есть два варианта запуска конвейера сборки и развертывания:


Интеграция с Git + графический интерфейс Zerops

Рекомендуется, если исходный код вашего приложения уже имеет версию в мерзавец репозиторий. Подробно о вашем сервисе Go см. Строить, развертывать, запустить настройки конвейераподключитесь к репозиторию Github или Gitlab и Активировать триггер конвейера в соответствии с вашими потребностями.


zCLI

Если командная строка — ваш лучший друг или она просто лучше подходит для вашего варианта использования, вы можете:

  1. Установить zCLI
  2. Войдите в zCLI с токен доступа генерируется в графическом интерфейсе
  3. Запустите zcli push <project_name> <service_name> команда (в нашем случае это zcli push myProject helloworld)

Тем не менее, как только конвейер запущен, вы можете следить за его ходом в графическом интерфейсе Zerops с дополнительной информацией.


1.2. Пример приложения

Был выбран самый простой пример, чтобы исключить необходимость локального тестирования приложения, прежде чем пробовать Zerops.

Мы более чем приветствуем сборку, развертывание и запуск твой собственный Go в Zerops, следуя этому примеру только в качестве руководства.

Наш пример приложения представляет собой небольшую модификацию знаменитого «Hello, World!» программа. Есть только один файл, main.go. main функция сначала устанавливает getHelloWorld функция обработчика для /hello-world path, а затем запускает http-сервер с библиотекой gin-gonic. getHelloWorld функция печатает только «Hello, World!». Сервер слушает порт 8080что по умолчанию порт создан для сервисов Go в Zerops.

package main

import (
  "fmt"
  "log"
  "net/http" "github.com/gin-gonic/gin"
)

func main() {
  fmt.Println("Running http server")

  router := gin.Default()
  router.GET("/hello-world", getHelloWorld)
  log.Fatal(router.Run(":8080"))
}

func getHelloWorld(c *gin.Context) {
  fmt.Println("received /hello-world request\n")
  c.String(http.StatusOK,"Hello, World!")
}
Войти в полноэкранный режим

Выйти из полноэкранного режима

Нам также необходимо инициализировать перейти модульчто создает go.mod а также go.sum файлы. Вы можете сделать это самостоятельно или скопировать содержимое из нашего репозитория. Структура проекта следующая:

myProject
├── go.mod
├── go.sum
├── zerops.yml
└── main.go
Войти в полноэкранный режим

Выйти из полноэкранного режима


2. Создание и развертывание пайплайна объясняется

Сначала мы проиллюстрируем процесс, а затем объясним ключевые слова при редактировании zerops.yml файл. Все начинается с образа. Он либо создается путем объединения base изображение с prepare команды, либо загруженные из кеша предыдущих сборок, если ничего не изменилось (который содержит ваши cached файлы тоже). Затем образ запускается внутри контейнера сборки. После этого все build выполняются команды и создается артефакт развертывания. Он «разворачивается» в другом контейнере «времени выполнения», где он запускается.

Теперь давайте посмотрим на build раздел zerops.yml файл, в котором вы можете настроить описанный выше процесс для своих сервисов Go. Обратите внимание, что имя службы является корневым ключом в zerops.yml файл.

helloworld:
  build:
    base: # optional
    prepare: # optional
    build: # required
    deploy: # required
    cache: # optional
run:
  ...
Войти в полноэкранный режим

Выйти из полноэкранного режима

Чтобы создать приложение Go, вам обязательно нужно запустить go build ... команда. Вот что требуемая сборка раздел для! Следующая команда компилирует наш пакет с одним main.go исходный файл в исполняемый файл с именем app.

...
  build:
    - go build -o app main.go
...
Войти в полноэкранный режим

Выйти из полноэкранного режима

Вот и все? Ну, на данный момент команда не удалась, так как мы не установили go себя и установить среду. К избавь тебя от проблем поиска нужного пакета и прохождения процесса установки, Zerops создал несколько база изображения с предустановленными наиболее распространенными зависимостями, такими как идти а также мерзавец в go@1 базовое изображение:

...
  base: [go@1]
  build:
    - go build -o app main.go
...
Войти в полноэкранный режим

Выйти из полноэкранного режима

Если вам нужно использовать более старую версию go или вы хотите каким-либо образом настроить зависимости, используйте подготовить раздел. Он предназначен для любых команд, которые могут потребоваться для успешного запуска команд сборки. Например, у вас есть git или же wget в уме? Нет проблем, вот пример:

...
    prepare:
      -|
        add-apt-repository ppa:longsleep/golang-backports
        apt update
        apt install -y golang-1.17 git wget
        ln -s /usr/lib/go-1.17/bin/go /usr/bin/go
        ln -s go-1.17 /usr/lib/go
    build:
      - go build -o app main.go
...
Войти в полноэкранный режим

Выйти из полноэкранного режима

Другая требуется ключ в строить часть zerops.yml файл развертывать. Вам нужно сообщить Zerops, какие файлы или папки необходимо развернуть в контейнере, где будет работать ваше приложение. В нашем случае нам понадобится только app исполняемый. Значение представляет собой массив путей, позволяющий развертывать отдельные файлы или целые папки, см. документация для всех поддерживаемых форматов.

...
  build:
    base: [ go@1 ]
    build:
      - go build -o app main.go
    deploy: [ app ]
...
Войти в полноэкранный режим

Выйти из полноэкранного режима

Последняя часть раздела сборки является необязательной. тайник. После каждой сборки результирующий образ базового образа и команды подготовки кэшируются и используются в следующий раз, если в этих разделах ничего не изменилось. zerops.yml. Однако все файлы в корневом каталоге вашего проекта отбрасываются, если вы явно не укажете Zerops кэшировать и их. В сервисе Go не так много кеширования, которое значительно ускорило бы процесс сборки по сравнению с node_modules папка в Node.js обслуживание, например. Однако давайте посмотрим, как мы можем также кэшировать зависимости go — но берите это только как пример!

Кешировать можно любые файлы и папки в корневом каталоге проекта, кроме .git папка. Поскольку папка по умолчанию, в которой хранятся модули go, ~/go/pkg/modнам нужно изменить его, например, на $(pwd)/mod (рабочий каталог по умолчанию является корнем вашего проекта), а затем мы можем кэшировать эту папку. Ожидаемый формат такой же, как и для развертывания.

...
  build:
    base: [ go@1 ]
    build:
      - go env -w GOMODCACHE=$(pwd)/mod
      - go build -o app main.go
    deploy: [ app ]
    cache: [ mod ]
...
Войти в полноэкранный режим

Выйти из полноэкранного режима

Чтобы убедиться, что кеш применяется, вы должны увидеть в логах, что зависимости загружаются только во время первой сборки.

Пустой кеш сборки

Сборка с использованием кеша

Теперь мы закончили! Последнее, что нужно бежать развернутый код. Единственный необходимый ключ для сервисов Go — это startожидается, что его значение будет командой, которая запускает ваше приложение, например ./app управляет app исполняемый в нашем примере.

Полная работа zerops.yml файл для сборки, развертывания и запуска нашего приложения helloworld выглядит следующим образом:

helloworld:
  build:
    base: [ go@1 ]
    build:
      - go build -o app main.go deploy: [ app ]
    run:
      start: ./app
Войти в полноэкранный режим

Выйти из полноэкранного режима

Чтобы убедиться, что приложение запущено и работает, откройте Журнал выполнения раздел в деталях сервиса Golang.

Журнал выполнения

Если вы последовали нашему примеру или у вас есть собственный http-сервер, вы также можете протестировать его, выполнив включение поддомена (в целях развития) или же настройка вашего домена. Так или иначе, когда /hello-world запрос сделан, вы должны увидеть «Hello, World!» напечатано.

Вывод в браузере

логирование

Легко, верно? 🙂 Мы прекрасно понимаем, что реальное приложение будет более сложным. Если у вас есть какие-либо вопросы, присоединяйтесь к нашему дискорд сервер задать любые вопросы и / или поделиться своими решениями с другими. Также проверьте наш документация чтобы узнать больше о Zerops.

Мы с нетерпением ждем запуска ваших собственных конвейеров!


Заключение (tl;dr)

  • всегда указать build команда
  • использовать предопределенные base изображения или укажите пользовательские prepare команды для создания вашего приложения — или оба!
  • всегда указать, какие файлы вы хотите deploy в контейнер времени выполнения
  • Вы можете необязательно cache любые развернутые файлы для ускорения будущих сборок