Найти в Дзене
AERONYTE

Как развернуть приложение в облаке сloud.ru в Docker контейнере

Развернуть приложение в облаке Cloud.ru в Docker контейнере с помощью: Artifact Registry - облачное хранилище Docker-образов. Хранит ваши docker image, как GitVerse или GitHub хранит ваш код. Container Apps - выполняет облачный запуск ваших Docker-контейнеров с автоматическим масштабированием в зависмости от нагрузки на ваше приложение. В сloud.ru у меня подключен бесплатный VPS сервер для разработчиков с Linux Ubuntu 22.04.5 LTS. Параметры сервера: 4 ГБ ОЗУ, 30 ГБ SSD, 100 ГБ S3 бакет AWS. Чтобы мой сервер имел связь с интернетом я подключил к нему внешний IP адрес за 150 руб/мес. Для удобства работы на удаленном сервере я подключился к нему через SSH по публичному ключу с помощью VSCod. В этом случае я могу работать на сервере через графический интерфейс и командную строку VSCod . Это очень удобно и наглядно в работе с кодом и файлами на удаленном сервере. Инструкцию как подключиться к удаленному серверу через VSCod читайте по ссылке. Установим Docker Engine, Docker CLI: Обновляем
Оглавление

🚀 Цель:

Развернуть приложение в облаке Cloud.ru в Docker контейнере с помощью:

  • Artifact Registry (репозиторий образов Docker),
  • Container Apps (управляемый запуск контейнеров в облаке).

🔧 ЧАСТЬ 1. Подготовка и структура проекта

1.1 Что такое Artifact Registry и Container Apps?

Artifact Registry - облачное хранилище Docker-образов. Хранит ваши docker image, как GitVerse или GitHub хранит ваш код.

Container Apps - выполняет облачный запуск ваших Docker-контейнеров с автоматическим масштабированием в зависмости от нагрузки на ваше приложение.

1.2 Установка необходимых инструментов

✅ Требования:

  • Операционная система: Linux/macOS/Windows;
  • Установленный Docker Engine, Docker CLI;
  • Установленный cloud-cli от Cloud.ru

В сloud.ru у меня подключен бесплатный VPS сервер для разработчиков с Linux Ubuntu 22.04.5 LTS.

Параметры сервера: 4 ГБ ОЗУ, 30 ГБ SSD, 100 ГБ S3 бакет AWS.

Чтобы мой сервер имел связь с интернетом я подключил к нему внешний IP адрес за 150 руб/мес.

Для удобства работы на удаленном сервере я подключился к нему через SSH по публичному ключу с помощью VSCod. В этом случае я могу работать на сервере через графический интерфейс и командную строку VSCod . Это очень удобно и наглядно в работе с кодом и файлами на удаленном сервере.

Инструкцию как подключиться к удаленному серверу через VSCod читайте по ссылке.

1.2.1 Установка Docker Engine, Docker CLI в Linux Ubuntu

Установим Docker Engine, Docker CLI:

Обновляем индекс пакетов apt, чтобы получить самую свежую информацию о доступных пакетах:

sudo apt update

Устанавливаем пакет docker.io — это версия Docker из стандартного репозитория Ubuntu.

⚠️ Внимание: это не самая свежая версия Docker. Для продакшена обычно используют docker-ce.

sudo apt install docker.io -y

Включаем сервис Docker в systemd, чтобы он автоматически запускался при старте системы:

sudo systemctl enable docker

Запускаем Docker прямо сейчас, без перезагрузки

sudo systemctl start docker

Добавляем текущего пользователя в группу docker, чтобы можно было выполнять команды docker без sudo

⚠️ После выполнения команды нужно выйти из системы и войти снова (или выполнить newgrp docker)

sudo usermod -aG docker $USER

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

newgrp docker

Проверьте установку:

docker --version

Результат на моем сервере:

Docker version 27.5.0, build a187fa5

1.2.2 Установка cloud-cli

cloud-cli — это инструмент командной строки (CLI) для работы с облачной платформой Cloud.ru. Он позволяет управлять ресурсами (серверы, хранилище, контейнеры и др.) напрямую из терминала, без использования веб-интерфейса.

Это как «пульт управления» для Cloud.ru, только не графический, а текстовый. Через него вы можете:

  • запускать виртуальные машины (VPS),
  • разворачивать контейнеры в Container Apps,
  • управлять S3-хранилищем,
  • просматривать логи и метрики,
  • автоматизировать деплой и DevOps-процессы.

Установка cloud-cli:

sudo curl -sSL https://sbc-cli.obs.ru-moscow-1.hc.sbercloud.ru/cli/latest/cloud_install.sh \
-o ./cloud_install.sh && sudo bash ./cloud_install.sh

Результат:

Рисунок 1. Вывод в консоль после выполнения команды sudo curl -sSL https://sbc-cli.obs.ru-moscow-1.hc.sbercloud.ru/cli/latest/cloud_install.sh \
-o ./cloud_install.sh && sudo bash ./cloud_install.sh.
Рисунок 1. Вывод в консоль после выполнения команды sudo curl -sSL https://sbc-cli.obs.ru-moscow-1.hc.sbercloud.ru/cli/latest/cloud_install.sh \ -o ./cloud_install.sh && sudo bash ./cloud_install.sh.

Проверьте версию cloud-cli:

sudo cloud version

Результат:

Рисунок 2. Вывод в консоль после выполнения команды sudo cloud version.
Рисунок 2. Вывод в консоль после выполнения команды sudo cloud version.
Current Cloud CLI version: 4.2.12

Включите автодополнение в cloud-cli::

sudo cloud auto-complete on

Результат:

Autocomplete (bash only) turned on. If it does not work, run the `bash` command.

Получение справки по командам cloud-cli:

sudo cloud --help

Результат

Рисунок 3. Вывод в консоль после выполнения команды sudo cloud --help.
Рисунок 3. Вывод в консоль после выполнения команды sudo cloud --help.

Настройка профиля доступа в Cloud CLI AKSK

Что потребуется заранее:

  • Access Key (AK) — строка вида AKIA************
  • Secret Key (SK) — строка вида abc123************
  • Регион — например: ru-moscow-1
  • Project ID — можно найти в панели Cloud.ru → IAM → Проекты

Создание именованного профиля (например, prod):

Создайте .env файл в корневой папке вашего проекта:

# .env
CLOUD_CLI_USERNAME=94d121e29ee3b81d75cc8629813fa42d
CLOUD_CLI_PASSWORD=a92d48387eb597e4044cf72a1b985cbc
CLOUD_CLI_REGION=ru-moscow-1
CLOUD_CLI_PROJECT_ID=8e63e869-24bc-4d78-98b5-35818d0edcee
CLOUD_CLI_DOMAIN_ID=dc6ff359-dabe-4eee-b425-d3178c09619c

Загрузите переменные в сессию терминала.

export $(grep -v '^#' .env | xargs)

Так вы сможете использовать переменные в CLI-командах без их раскрытия в истории терминала.

Проверьте переменные (для уверенности):

echo $CLOUD_CLI_USERNAME

Настройте профиль prod для cloud cli, возьмите секреты из .env:

# Подгружаем переменные окружения из .env
export $(grep -v '^#' .env | xargs)
# Настраиваем профиль prod, используя переменные из .env
sudo cloud configure set \
--cli-profile=prod \
--cli-mode=token \
--cli-domain="$CLOUD_CLI_USERNAME" \
--cli-password="$CLOUD_CLI_PASSWORD" \
--cli-domain-id="$CLOUD_CLI_DOMAIN_ID" \
--cli-project-id="$CLOUD_CLI_PROJECT_ID" \
--cli-region="$CLOUD_CLI_REGION"

Авторизация через токен вручную

Cloud CLI не использует --cli-password напрямую. Вместо этого:

  • вам нужно получить токен вручную через API,
  • затем передать его в CLI через --cli-x-auth-token.

Шаг 1. Отправим curl-запрос, чтобы получить токен

Создайте скрытый файл .auth.json:

Рисунок 4. Содержимое скрытого файла .auth.json.
Рисунок 4. Содержимое скрытого файла .auth.json.

Затем выполните команду:

curl -s -X POST https://iam.ru-moscow-1.api.cloud.ru/v3/auth/tokens \
-H "Content-Type: application/json" \
-d @.auth.json \
-i

Диагностика:

curl -v -X POST https://iam.ru-moscow-1.api.cloud.ru/v3/auth/tokens \
-H "Content-Type: application/json" \
-d @.auth.json \
-i

Результат: