Больше не нужно искать работу мечты — присоединяйтесь к команде Клауда

Как развернуть веб-приложение при помощи Dockerfile в Timeweb Cloud Apps

Александр Бархатов
Александр Бархатов
Технический писатель
26 июня 2024 г.
34
12 минут чтения
Средний рейтинг статьи: 5

Чтобы собрать и развернуть свое веб-приложение, необходимо организовать среду для разработки, включающую в себя создание репозитория, в котором будет храниться исходный код разрабатываемого приложения, настройку CI/CD-процессов (а также выбор CI/CD-платформу) для сборки и выкатки готового приложения на production-серверы. Также необходимо арендовать доменное имя и сервер.

Однако, существует способ, который поможет значительно упростить и ускорить развертывание вашего приложения. В данной статье мы рассмотрим процесс публикации нескольких приложений с применением Dockerfile при помощи сервиса Apps облачного провайдера Timeweb Cloud.

Описание PaaS (Timeweb Cloud Apps)

Самый простой способ развернуть приложение, которое использует систему контейнеризации Docker, — использовать готовые решения типа Platform as a Service (PaaS). PaaS — это услуга, при помощи которой пользователь получает уже готовую платформу, где можно публиковать различные приложения, написанные на разных языках программирования с использованием различных фреймворков, и управлять ими, не занимаясь подготовкой и обслуживанием инфраструктуры, включая серверы, балансировщики, сети и т.д. Это очень удобный подход, поскольку он позволяет сосредоточиться только на написании кода приложения, при этом не затрачивая время и ресурсы на настройку и поддержку серверного оборудования.

Одним из таких решений является сервис Timeweb Cloud Apps. В нём достаточно указать ссылку на репозиторий с исходным кодом программы и при необходимости указать переменные для запуска приложения. Дальнейшие шаги, включая сборку и публикацию вашего проекта, платформа сделает за вас. 

Этапы, которые требуются выполнить со стороны пользователя, сводятся к следующим:

  • В качестве типа приложения выбрать Dockerfile;

  • Выбрать систему контроля версий. На выбор доступны три системы: GitHub, GitLab, Bitbucket. Также если ваша система контроля версий отсутствует в списке, то подключить репозиторий можно, введя URL. Поддерживаются как публичные так и частные репозитории с исходным кодом. При этом для последних необходимо ввести логин и пароль/токен от учетной записи;

  • Выбрать регион, в котором будет находиться сервер с запущенным приложением. На выбор доступно три региона: Россия (Санкт-Петербург), Польша и Нидерланды; 

  • Выбрать конфигурацию для сервера, на котором будет развернуто приложение;

  • При необходимости указать переменные, например, для хранения чувствительных данных (логины, пароли, ключи, токены и т.д.);

  • При желании можно указать имя приложения, комментарий и выбрать проект.

Перед тем как начать использовать сервис Apps для разворачивания приложений при помощи Dockerfile, необходимо учесть следующие требования:

  • Dockerfile должен быть размещен в корневой папке проекта (репозитория) и содержать корректные команды для сборки и запуска вашего приложения;

  • В Dockerfile должен присутствовать параметр EXPOSE, чтобы сервис мог быть доступен для Nginx. Если EXPOSE отсутствует, то по умолчанию будет задействован порт 8080;

  • Сервис Apps не поддерживает docker-compose-файлы. Можно использовать только обычные Docker-файлы.

Регистрация в Timeweb Cloud

Чтобы воспользоваться услугой Apps в Timeweb Cloud, необходимо пройти регистрацию. 

Переходим по ссылке для регистрации нового пользователя. Мы выберем регистрацию на физическое лицо и заполним следующие данные:

  • ФИО,

  • адрес электронной почты,

  • номер телефона.

После регистрации на указанный адрес почты придет сообщение с ссылкой для активации аккаунта и входа в панель — перейдите по ней.

Описание разворачиваемых приложений

В качестве теста мы развернем несколько приложений.

Первое приложение представляет из себя простейший сервис, написанный при помощи JavaScript-библиотеки React, который отображает веб-страницу с сообщением, что образ с React успешно собран и готов к дальнейшему использованию.

Второе приложение представляет собой сервис на языке программирования GO, которое выводит в браузере фразу “Hello, world!” и использует переменные окружения типа ARG.

Третье приложение — это сервис, написанный при помощи Node.js, который приветствует пользователя. При этом имя пользователя будет задано в переменной на этапе конфигурации приложения в сервисе Apps. 

Публикация приложения в Apps c помощью Dockerfile

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

1) После того как регистрация в системе Timeweb cloud завершена, можно приступать к использованию сервиса Apps. Для этого войдите в свой аккаунт. Далее на панели слева выберите раздел «Apps»:

Image11

В открывшемся окне нажмите на кнопку «Создать».

2) Первым шагом выбираем тип нашего приложения. В нашем случае переходим в раздел Dockerfile:

Image7

3) Выбираем репозиторий, где хранится исходный код веб-приложения. Также можно подключить репозиторий по URL нажав на кнопку «Подключите git-репозиторий по URL»:

Image21

В нашем случае код проекта хранится в системе GitHub. При выборе GitHub система предложит предоставить доступ до всех репозиториев, которые присутствуют в вашей учетной записи или только к одному конкретному репозиторию. Прежде чем выбрать репозиторий, необходимо войти в ваш аккаунт на GitHub. Далее выбираем пункт «Only select repositories» и указываем необходимый репозиторий при помощи кнопки «Select repositories»:

Image13

Далее нажимаем на кнопку «Install & Authorize».

При необходимости пройдите двухфакторную аутентификацию одним из предложенных способов:

Image29

4) После того как аутентификация в сервисе GitHub была успешно пройдена, возвращаемся обратно в сервис Apps. На шаге с выбором репозитория была добавлена новая информация, включающая в себя выбранный репозиторий и ветку.

По умолчанию всегда выбирается ветка main, однако вы можете выбрать любую другую ветку, которая присутствует в вашем репозитории. Для этого достаточно кликнуть по имени ветки и в выпадающем списке выбрать нужную:

 Image12

Также можно настроить такой параметр, как «Сборка по последнему выполненному коммиту». Если данный параметр включен, то сборка приложения будет выполняться с последнего коммита, т.е. с момента последнего внесения изменений в ваше приложение. При добавлении нового коммита система автоматически будет запускать сборку вашего приложения. Если же выключить данную опцию, то можно выбрать любой другой доступный коммит:

Image2

5) Далее необходимо выбрать регион, в котором будет находиться сервер с приложением. Выбирать рекомендуется тот регион, который ближе всего находится к вам физически. У каждого доступного региона справа вверху отображается ping, т.е. время, необходимое для передачи данных с вашего компьютера на сервер. Чем меньше указанное время, тем быстрее будет осуществляться передача данных:

Image9

6) Выбираем необходимую конфигурацию для сервера.

Так как в данной статье упор делается только на демонстрации возможностей сервиса Apps без использования реальной нагрузки на демонстрируемые приложения, мы выберем минимальную конфигурацию, включающую в себя одноядерный процессор, 1 ГБ оперативной памяти и 15 ГБ жесткого диска.

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

Выбираем соответствующий тариф:

Image19

7) При необходимости добавьте переменные окружения, если они используются в вашем Dockerfile. В переменных окружения обычно хранят чувствительные данные, такие как логины, пароли, ключи, токены и т.д:

Image20

Работа с переменными окружения будет продемонстрирована в следующем примере.

8) В последнем разделе «Информация о приложении» можно задать необходимое имя для приложения, которое будет отображаться в панели управления, а также выбрать проект:

Image24

9) Для запуска деплоя приложения необходимо нажать на кнопку «Запустить деплой»:

Image4

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

Image10

Первоначальная настройка может занять до 10 минут.

После того как деплой приложения будет полностью завершен, в разделе «Деплой» будет отображен соответствующий статус — «Успешно»:

Image16

При успешном деплое в логах будет отображена строка «Deployment successfully completed».

Также вы можете подключиться к оболочке контейнера (аналог команды docker exec). Для этого перейдите в раздел «Консоль»:

Image3

10) Для того чтобы перейти в веб-интерфейс вашего приложения, необходимо открыть раздел «Дашборд». Справа снизу будет отображено доменное имя, при клике на которое оно будет скопировано: 

Image5

Далее при переходе по доменному имени будет отображен интерфейс запущенного сервиса так, как его видят пользователи:

Image27

Стоит отметить, что сгенерированный домен это общедоступный домен, и любой пользователь может по нему перейти. При каждом переходе по доменному имени, в логах (раздел «Логи приложения») будет отображаться соответствующая строка:

Image28

Публикация приложения в Apps с помощью Dockerfile с использованием переменных

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

Синтаксис Dockerfile поддерживает два типа переменных окружения — ARG и ENV.

  • ARG —  ключевое слово, используемое для создания переменных окружения, которые используются только во время сборки образа. В отличие от ENV-переменных, ARG-переменные недоступны во время запуска контейнера;
  • ENV — ключевое слово, используемое для создания переменных окружения, которые доступны ТОЛЬКО во время запуска контейнера.

Рассмотрим использование переменных окружения на примере ARG. Код, который используется далее, доступен по ссылке. Воспользуемся Dockerfile, в котором происходит сборка приложения на языке программирования GO:

ARG GOLANG_VERSION=1.21-bookworm
ARG DEBIAN_VERSION=bookworm-slim

FROM golang:$GOLANG_VERSION as builder

WORKDIR /app

COPY go.* ./
RUN go mod download

COPY . ./

RUN go build -v -o server

FROM debian:$DEBIAN_VERSION

RUN set -x && apt update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
    ca-certificates && \
    rm -rf /var/lib/apt/lists/*

COPY --from=builder /app/server /app/server

EXPOSE 8080

CMD ["/app/server"]

В самом начале Dockerfile объявлены две переменные: GOLANG_VERSION и DEBIAN_VERSION, в которых хранятся теги для используемых образов Golang и Debian. Для использования переменных типа ARG в Dockerfile необходимо использовать символ доллара $ и указать имя переменной, например, $GOLANG_VERSION или $DEBIAN_VERSION

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

docker build -t arg_go_app .

Image26

Запустим данный образ при помощи команды:

docker run -dit -p 80:80 arg_go_app

Проверяем статус запущенного контейнера:

docker ps

Image22

Контейнер успешно запущен. Так как у контейнера открыт порт 80 и он проброшен, то мы можем открыть страницу в браузере, используя IP-адрес сервера: 

Image14

На странице отобразилась фраза «Hello, world!», которая сообщает о том, что приложение было успешно собрано и запущено.

Публикация приложения с использованием переменных типа ARG

Теперь запустим приложение содержащее в себе переменную типа ARG в сервисе Apps.

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

После того как деплой приложения будет полностью завершен, в разделе «Деплой» будет отображен соответствующий статус — «Успешно»:

Image8

Также при успешном деплое в логах будет отображена строка «Deployment successfully completed».

Для того чтобы перейти в веб-интерфейс приложения, необходимо открыть раздел «Дашборд» и скопировать доменное имя:

Image25

Далее при переходе по доменному имени будет отображен интерфейс запущенного сервиса так, как его видят пользователи:

Image17

Приложение, использующее при сборке переменные типа ARG, успешно задеплоено.

Публикация приложения с использованием встроенных переменных в сервисе Apps 

Выше мы рассмотрели пример с использованием переменных, которые указываются непосредственно в Dockerfile при помощи ключевого слова ARG. Однако переменные окружения могут присутствовать и в коде разрабатываемого приложения. С помощью сервиса Apps можно объявить такие переменные на этапе подготовки приложения к деплою. Тем самым в коде приложения не надо указывать чувствительные данные. В качестве примера воспользуемся сервисом, написанным на Node.js, который приветствует пользователя когда он открывает страницу в браузере. Код приложения доступен по ссылке.

Выполняем все шаги, описанные в главе «Публикация приложения в Apps c помощью Dockerfile». При этом в панели управления на шаге «5. Настройка приложения» нам нужно задать переменную окружения. Для этого необходимо нажать на кнопку «Добавить». Далее добавить ключ (имя переменной) и ее значение:

Image1

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

После того как деплой приложения будет полностью завершен, в разделе «Деплой» будет отображен соответствующий статус — «Успешно»:

Image6

Также при успешном деплое в логах будет отображена строка «Deployment successfully completed».

Для того чтобы перейти в веб-интерфейс приложения, откройте «Дашборд» и скопируйте доменное имя:

Image23

Далее при переходе по доменному имени будет отображен интерфейс запущенного сервиса так, как его видят пользователи:

Image18

Как можно увидеть на скриншоте выше, приложение было успешно запущено а также была применена ранее заданная переменная NAME со значением Alex.

Заключение

В рамках данной статьи мы подробно познакомились с процессом развертывания приложений, «упакованных» в Dockerfile, с помощью сервиса Apps.

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

26 июня 2024 г.
34
12 минут чтения
Средний рейтинг статьи: 5
Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
Комментарии 0