С помощью этого руководства вы научитесь:
вайб-кодить бэкенд-приложение на Python (фреймворк Django) с использованием VS Code и Foundation Models;
создавать фронтенд с помощью готовых промптов к Foundation Models в VS Code;
подключать кастомный AI-агент для работы с MCP-сервером в VS Code;
автоматизировать деплой приложения в Container Apps, используя промпты к MCP-серверу.
Вы будете использовать набор готовых промптов для всех шагов создания и деплоя приложения.
На примере этих промптов вы сможете не только с нуля создать работающее приложение и разместить его в Container Apps, но и полностью автоматизировать процесс обновления и публикации новой версии приложения.
Вы будете использовать следующие сервисы:
Artifact Registry для хранения, совместного использования и управления Docker-образами и Helm-чартами.
Container Apps — сервис для запуска контейнерных приложений в облаке. Не требует знания Kubernetes и создания виртуальных машин.
Object Storage — объектное S3-хранилище с бесплатным хранением файлов, объемом до 15 ГБ.
Foundation Models — сервис для доступа к API популярных фундаментальных моделей машинного обучения с открытым исходным кодом.
Систему контроля версий GitVerse.
VS Code — редактор кода, который поддерживает множество языков программирования, включая Python, Java, C++, JavaScript и многие другие.
Roo Code или Kilo Code — плагин для анализа, написания, рефакторинга и отладки кода. Поддерживает различные API и локальные модели. Позволяет создавать собственных AI-ассистентов для определенных задач и ролей, переключать режимы и настраивать промпты.
Шаги:
Перед началом работы
Если вы уже зарегистрированы, войдите под своей учетной записью.
1. Подготовьте среду
Убедитесь, что у вас есть доступ к Foundation Models.
Убедитесь, что баланс в личном кабинете положительный. Если он нулевой или отрицательный — пополните баланс. Небольшое количество запросов в Foundation Models будет стоить не больше рубля, подробнее — в тарифах.
-
Используйте следующие параметры:
При создании сервисного аккаунта выберите роль внутри проекта — «Администратор пользователей» для создания контейнеров Container Apps от лица этого сервисного аккаунта в дальнейшем.
При создании API-ключа укажите в поле Сервисы значение Foundation Models.
В поле Модель в плагине VS Code выберите одну из следующих моделей:
zai-org/GLM-4.6
Qwen/Qwen3-Coder-480B-A35B-Instruct
openai/gpt-oss-120b
Для решения задач этого руководства рекомендуется использовать модель zai-org/GLM-4.6.
Чтобы увидеть полное описание моделей и стоимость токенов:
Перейдите в личный кабинет.
Перейдите в раздел AI Factory –> Foundation Models.
В разделе Модели найдите описание, параметры и стоимость токенов для нужной модели.
Вы можете использовать бесплатные модели, доступные в режиме Public Preview.
2. Подготовьте окружение и создайте приложения с помощью промпта
Если вы хотите не писать Django-приложение с нуля, обращаясь к AI-модели с помощью промптов, а попробовать развернуть уже готовое приложение из репозитория GitVerse, перейдите к практическому руководству по развертыванию django-приложения.
В этом проекте используются:
Django 5.2.7
Python 3.13
База данных SQL Lite
Пример с использованием SQLite предназначен исключительно для демонстрационных целей и быстрого запуска приложения.
Для production-среды настоятельно рекомендуется использовать полноценную СУБД, например PostgreSQL — она обеспечит надежность, масштабируемость и поддержку конкурентного доступа.
С помощью промптов создается приложение для добавления рекордов (как в «Книге рекордов Гиннеса»). В приложении должна быть возможность модерировать рекорды (подтверждать добавленную запись) в административной панели. В приложении должны храниться изображения с текстом описания. Фронтенд приложения должен быть опубликован в сети с фиксированным адресом и заданным дизайном.
Чтобы создать проект и приложения с помощью выбранной модели ИИ, используйте промпт:
Создай проект под названием «Рекордасьон» (по-английски — Recordacion) с использованием следующих технологий:- Django 5.2.7- Python 3.13- База данных: SQLiteСоздай новое виртуальное окружение и размести его в папке .venvВнутри проекта создай два приложения:- recordacion — для основных настроек Django (settings, urls и т.д.) создан через startproject;- records — для работы с моделями создан через startapp.Функционал: Любой пользователь может добавить свой рекорд и просматривать рекорды других.В приложении records создай модель RecordEntry со следующими полями:- название- описание- картинка для preview- картинки (картинок может быть несколько, должна быть связь ManyToMany)- поля "Дата создания" и "Дата обновления" (должны заполняться автоматически)- модель принята администратором или нет, поле is_approved- связь с тем, кто принял рекорд approved_by на django user
В процессе создания приложения AI-модель предлагает использовать стандартные команды фреймворка Django. AI-модель периодически запрашивает подтверждение действий.
После завершения работы AI-модели в папке проекта появляются папки:
./recordacion — для хранения основных настроек Django (settings, urls).
../records — для хранения модели рекорда.
Чтобы ускорить работу AI-модели по созданию окружения, рекомендуется добавить все промпты из Шагов 2–5 в виде сплошного текста.
Промпт целиком для создания проекта, окружения, приложения Django, модели и базы данных (Шаги 2–5):
### Создай проект под названием «Рекордасьон»(по-английски — Recordacion) с использованием следующих технологий:- Django 5.2.7- Python 3.13- База данных: SQLite1. Создай новое виртуальное окружение и размести его в папке .venv2. Внутри проекта создай два приложения:recordacion — для основных настроек Django (settings, urls и т.д.) создан через startproject;records — для работы с моделями создан через startapp.Функционал:Любой пользователь может добавить свой рекорд и просматривать рекорды других.В приложении records создай модель RecordEntry со следующими полями:- название- описание- картинка для preview- картинки (картинок может быть несколько, должна быть связь ManyToMany)- поля дата создания и дата обновления (должны заполняться автоматически)- модель принята администратором или нет is_approved- связь с тем кто принял рекорд approved_by на django user3. Зарегистрируй модель RecordEntry в админке Django, чтобы можно было управлять записями через интерфейс администратора.4. Добавь кастомную Django-команду create_admin_user, которая создаёт суперпользователя с логином admin и паролем admin. Если такой пользователь уже существует — команда должна пропустить создание.5. Версии Python библиотек сохрани в requirements.txt.6. Создай файл README.md с кратким описанием проекта и пошаговой инструкцией по его запуску (включая активацию виртуального окружения, миграции и запуск сервера).
При использовании промпта целиком после того, как AI-модель закончит работу, перейдите к проверке работоспособности Django-приложения.
3. Создайте модель RecordEntry и зарегистрируйте ее в Django-админке с помощью промпта
Используйте промпт:
Зарегистрируй модель RecordEntry в админке Django, чтобы можно было управлять записями через интерфейс администратора.
AI-модель добавила в ../records/models.py модель с заданными параметрами.
AI-модель добавила в настройки admin.py новую модель для работы с приложением. Также AI-модель самостоятельно накатила миграции для работы с Django и создала базу данных db.sqlite3.
4. Создайте пользователя admin с помощью промпта
Используйте промпт:
Добавь кастомную Django-команду create_admin_user, которая создаёт суперпользователя с логином admin и паролем admin.Если такой пользователь уже существует, команда должна пропустить создание.
AI-модель запускает команду create-admin-user.
5. Сохраните версии Python-библиотек и создайте документацию по проекту c помощью промпта
В процессе разработки AI-модель самостоятельно загружает недостающие библиотеки Python.
На этом шаге попросите модель сохранить версии скачанных библиотек в отдельном файле requirements.txt.
Используйте промпт:
Версии Python библиотек сохрани в requirements.txt
Попросите модель создать инструкцию по работе с проектом.
Используйте промпт:
Создай файл README.md с кратким описанием проекта и пошаговой инструкцией по его запуску (включая активацию виртуального окружения, миграции и запуск сервера).
AI-модель создает файлы requirements.txt и README.md в корне проекта.
6. Проверьте работоспособность Django-приложения
Для запуска и проверки работоспособности приложения воспользуйтесь автоматически созданной инструкцией в файле README.md в корне проекта.
Запустите сервер с помощью команды:
python manage.py runserverИспользуйте адрес 127.0.0.1:8000/admin для проверки работоспособности приложения.
Отобразится окно входа в панель администратора.
7. Создайте фронтенд-приложение с помощью промпта
Создайте фронтенд-приложение с заданным дизайном для просмотра добавленных рекордов, добавления рекордов и просмотра отдельного рекорда.
Используйте новое контекстное окно модели.
Используйте промпт:
### Реализуй три страницы в records.views1. Главная страницаМаршрут: GET /Отображает только одобренные (is_approved=True) пользовательские рекорды.Рекорды упорядочены по возрастанию даты создания — самый новый должен находиться в начале списка.Для каждого рекорда показывай:- Название- Картинку из Preview (если есть)- Дату созданияРекорды отображай по 3 на одной строчке.Добавь фильтр:- по названию- выбор сортировки по дате- добавь пагинацию по 10 рекордов- кнопку сброса фильтрафии2. Страница добавления рекордаМаршрут: GET /records и POST /recordsФорма для создания нового RecordEntry с полями:- Название- Описание- Картинка для preview- Несколько картинок для постаПосле успешной отправки формы отобрази сообщение:«Ваш рекорд успешно добавлен и будет рассмотрен администратором в ближайшее время.»Не перенаправляй пользователя — просто покажи это сообщение на той же странице.3. Страница отдельного рекордаМаршрут: GET /records/<record_id>Отображает все данные конкретного рекорда:- Название- Описание- Все прикрепленные изображения (без изображения с preview)- Дату созданияТребования к оформлению всех страниц:Используй наследование шаблонов (base.html → дочерние шаблоны).Все стили должны находиться в одном CSS-файле (например, static/css/style.css).Используй формулу цветов:60% основной цвет, 30% акцентный цвет, 10% яркий цветЦветовая палитра:Основной акцент - персик/терракота #FFF9F5Фон - очень светлый кремовый #4B3F72Текст - мягкий тёмно-фиолетовый #FF6F61Дополнительно (для UI-состояний):Hover на кнопке: #FF5C4D (чуть темнее акцента)Disabled-состояние: #E0D9D0 (светло-бежевый, на фоне кремового)Тени / разделители: rgba(75, 63, 114, 0.1) — полупрозрачный оттенок основного текстового цветаКнопки должны быть одинаковыми по высоте.Стиль должен быть чистым, современным и напоминать немного сайт Книги рекордов Гиннеса.
AI-модель самостоятельно находит модель данных в проекте и создает HTML-страницы.
AI-модель периодически запрашивает подтверждение действий. Модель самостоятельно тестирует полученный код и решает проблемы, например, отсутствие таблицы стилей CSS.
Записи добавлены в файл ../records/views.py.
8. Проверьте работоспособность фронтенд-приложения
Используйте адрес localhost:8000 для проверки работоспособности приложения. Отобразится домашняя страница со строкой поиска рекордов и кнопкой Добавить рекорд.
Добавьте запись о рекорде через сайт.
Перейдите по адресу 127.0.0.1:8000/admin, войдите с логином и паролем admin/admin и подтвердите добавленную запись.
Проверьте по адресу localhost:8000, что запись отобразилась в списке рекордов.
9. Заполните админку записями с помощью промпта
Скопируйте в репозиторий с проектом папку init-data. Используйте новое контекстное окно модели.
Используйте промпт:
Заполни рекорды (EntryRecords)Создай django manage.py команду fill_records, которая добавит первые записи Используя данные из prompts/init-data/data.jsonЕсли рекорд с таким именем уже существует, его можно пропустить.Запустите итоговую команду.
Откройте адрес localhost:8000 и проверьте, что рекорды отображаются.
При ошибках, например, если не отображаются изображения, в том же контекстном окне AI-модель введите промпт:
Не работает отображение картинок, поправьПосле отработки команды повторно откройте адрес localhost:8000 и проверьте, что рекорды отображаются корректно.
10. Создайте Docker-файл с приложением с помощью промпта
В промпте предусмотрены параметры для деплоя проекта в Container Apps, в том числе:
.dockerignore — чтобы исключить из сборки статичные папки для хранения данных.
Переменные окружения: ALLOWED_HOSTS, CONTAINER_APP_NAME (заполняется сервисом Container Apps), CSRF_TRUSTED_ORIGINS (необходимо для отправки формы).
FILE_UPLOAD_PERMISSIONS — настройка, необходимая для подключения в дальнейшем Object Storage.
Непривилегированный пользователь с UID 1000 для работы в непривилегированном режиме. По умолчанию контейнеры в Container Apps запускаются от имени пользователя с идентификатором (UID) 1000.
Точка входа, в которой указаны команды при запуске контейнера.
Используйте промпт:
### Создай Docker-образна основе официального образа python:3.13.9-bookworm (Debian Bookworm) со следующими требованиями:1. Зависимости и игнорирование файловДобавь файл requirements.txt с необходимыми Python-зависимостями (включая Django 5.2.7).Создай файл .dockerignore и исключи из сборки:```db/media/staticfiles/.venv/```2. Расположение базы данныхНастрой проект так, чтобы файл SQLite (db.sqlite3) сохранялся в папке ./db (в корне проекта).Обнови settings.py, указав путь к базе данных:DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / 'db' / 'db.sqlite3',}}3. Настройки для запуска в Cloud.ru Container AppsДобавь в settings.py следующие параметры:```pythonimport osCONTAINER_APP_NAME = os.environ.get("CONTAINER_NAME", "-") # будет установлен средой Cloud.ru Container AppsALLOWED_HOSTS = [f'{CONTAINER_APP_NAME}.containerapps.ru',f'{CONTAINER_APP_NAME}.internal.containers.cloud.ru','localhost','127.0.0.1',]CSRF_TRUSTED_ORIGINS = [f'https://{CONTAINER_APP_NAME}.containerapps.ru',f'https://{CONTAINER_APP_NAME}.internal.containers.cloud.ru',]# Django пытается изменить права доступа к загруженным файлам — отключаем это поведениеFILE_UPLOAD_PERMISSIONS = None```4. Пользователь и права доступаВ Dockerfile создай непривилегированного пользователя с UID 1000.Предоставь этому пользователю права на запись в папки:./db (для базы данных)./media (для загружаемых изображений)5. В Dockerfile добавьRUN python manage.py collectstatic --noinputENTRYPOINT entrypoint.shв котором:- запусти миграции- запусти django команду для создания admin пользователя create_admin_user- запусти django команду fill_recordsCMD добавь запуск runserver6. Добавь в Readme.md способ запуска приложения через Docker
В корне проекта создан образ Dockerfile.
На следующих шагах добавьте в плагин MCP-сервер и задеплойте приложение с помощью промптов.
11. Зарегистрируйте в плагине MCP-сервер для передачи промптов в Container Apps и Artifact Registry
Используйте кастомный AI-агент для взаимодействия с MCP-сервером.
MCP-сервер работает совместно с VSCode-плагинами, например Kilo Code, Roo Code, Claude, и использует MCP-протокол для обращения к внешним системам (Container Apps и Artifact Registry).
Перед началом работы с AI-агентом для взаимодействия с MCP-сервером установите последнюю версию Golang с официального сайта.
Выполните команду по установке AI-агента по работе с MCP-сервером:
go install github.com/Nick1994209/cloudru-containerapps-mcp/cmd/cloudru-containerapps-mcp@latestПерейдите в сервисный аккаунт, созданный на этапе подготовки среды.
Перейдите в раздел Ключи доступа.
Нажмите Создать ключ.
Скопируйте в надежное место KeyID (логин) и Key Secret (пароль).
Скопируйте значения KeyID (логин) и Key Secret (пароль), а также project ID своего проекта в json-файл.
Вы можете узнать projectId своего проекта, открыв cloud.console.ru:
https://console.cloud.ru/spa/svp?customerId=&projectId=<***********>Используйте следующий JSON-файл, дополнив своими значениями:
{"mcpServers": {"cloudru-containerapps-mcp": {"command": "cloudru-containerapps-mcp","args": [],"env": {"CLOUDRU_KEY_ID": "********","CLOUDRU_KEY_SECRET": "********","CLOUDRU_PROJECT_ID": "********",},"alwaysAllow": ["cloudru_containerapps_description","cloudru_get_containerapp","cloudru_get_list_containerapps","cloudru_start_containerapp","cloudru_get_list_docker_registries"],"timeout": 900,"disabledTools": []}}}В плагине, который вы добавили в VS Code на этапе подготовки среды, перейдите в раздел MCP Servers и добавьте json-файл по кнопке Edit Global MCP.
В разделе MCP Servers отобразится добавленный MCP-агент и набор команд.
Запустите AI-агент:
cloudru-containerapps-mcp
12. Выполните деплой приложения с помощью промпта
На этом шаге выполняется создание реестра в Artifact Registry, сборка и отправка в созданный реестр Docker-образа приложения и создание контейнерного приложения в Container Apps на основе Docker-образа.
MCP-сервер обращается к Public API Artifact Registry и Public API Container Apps для выполнения команд.
Последовательно выполните промпты, заменив название реестра на свое значение:
### Деплой приложения в Cloud.ru Evolution Container AppsВыполни MCP команду и создай в Cloud.ru реестр, где будет храниться Docker image с приложением recordacionреестр называется = <ваше_название_реестра>Сделай docker build and push в Cloud.ru Artifact Registry используяназвание реестра = <ваше_название_реестра>название репозитория = recordacionназвание тэга = v0.0.1Убедитесь, что в личном кабинете в сервисе Artifact Registry отображается реестр с указанным именем и в нем содержится репозиторий recordacion.
Выполните промпт для создания контейнерного приложения:
Создай ContainerApps используяназвание контейнер аппа = recordacionдокер образ возьми из предыдущего шагавключи автодеплой, тэг паттерн "*"установи время простоя в 30 минутвключи автодеплой, тэг паттерн "*"cpu = 0.5Если название recordacion уже занято, укажите ваше название.
Убедитесь, что в личном кабинете в сервисе Container Apps отображается контейнерное приложение <ваше_название_контейнерного_приложения> и статус ревизии изменился на «Выполняется».
Не меняя контекстное окно, используйте промпт:
Получи публичный адрес приложенияПолучи логи приложенияЕсли команда не вернула логи или публичный URL-адрес приложения, попробуйте ещё раз спустя 10–15 секунд.
Так как включена опция Автоматическое развертывание, при каждой загрузке в Artifact Registry новой версии образа (например, с помощью промпта) на стороне Container Apps будет автоматически создаваться новая ревизия контейнера на базе обновленной версии образа.
13. Проверьте работоспособность приложения в Container Apps
Вставьте публичный адрес контейнерного приложения в адресную строку браузера.
Откроется страница приложения.
Ваше приложение запущено и работает. Но оно может потерять недавно добавленные рекорды при развертывании новой версии приложения или при масштабировании до нуля.
На следующем шаге подключите постоянное хранилище для базы данных и медиафайлов.
14. Создайте бакеты в Object Storage для хранения данных
Создайте бакеты в Object Storage, как описано в Шаге 7 практического руководства по развертыванию django-приложения.
Используйте следующие пути для монтирования
/app/db — для тома базы данных;
/app/media — для тома загружаемых изображений.
Примонтируйте созданные бакеты, как указано в Шаге 8 практического руководства по развертыванию django-приложения.
Теперь при каждом новом деплое Django-приложения данные не будут теряться, сохраняясь в постоянных томах Object Storage.
Монтирование папки с базой данных SQLite уместно только в демонстрационных или тестовых целях. Если вы не планируете в ближайшее время переходить на другую СУБД и ожидаете, что у вашего приложения будет много пользователей, рекомендуется выполнить следующий шаг.
15. (Опционально) Синхронизируйте файлы из БД с папкой, смонтированной для контейнера, с помощью промпта
Если вы планируете продолжать использовать SQL Lite, с помощью этого скрипта синхронизируйте файлы базы данных SQL Lite с папкой, примонтированной для контейнера Object Storage.
При запуске приложения этот скрипт будет скачивать БД из смонтированной папки во временную, а затем синхронизировать содержимое временной БД с постоянной примонтированной.
Используйте промпт:
### Добавь синхронизацию db файлов из одной папки в другую1. добавь скрипт background-sync-folders.sh```bash#!/bin/bash# === Проверка аргументов ===if [ "$#" -ne 2 ]; thenecho "Передан только 1 или меньше аргументов, скрипт не будет синхронизировать данные"echo "Использование: $0 <SOURCE_DIR> <TARGET_DIR>"exit 0fiSOURCE_DIR="$1"TARGET_DIR="$2"# === Вспомогательная функция: есть ли обычные файлы в директории? ===has_files() {local dir="$1"[ -d "$dir" ] || return 1for f in "$dir"/*; do[ -e "$f" ] && [ -f "$f" ] && return 0donereturn 1}# === Функция однократной синхронизации: SOURCE → TARGET ===sync_once() {local src="$1"local tgt="$2"for f in "$src"/*; do[ -e "$f" ] || continueif [ -f "$f" ]; thencp "$f" "$tgt/"fidone}# === Инициализация ===mkdir -p "$SOURCE_DIR" "$TARGET_DIR"if ! has_files "$SOURCE_DIR"; thenif has_files "$TARGET_DIR"; thenecho "SOURCE_DIR=$SOURCE_DIR пуста — копирую из TARGET_DIR=$TARGET_DIR..."sync_once "$TARGET_DIR" "$SOURCE_DIR"echo "Данные в SOURCE_DIR=$SOURCE_DIR восстановлены."elseecho "Обе директории пусты."fielseecho "SOURCE_DIR=$SOURCE_DIR содержит данные — используем как источник."fi# === Запуск бесконечной синхронизации в фоне ===(while true; dosync_once "$SOURCE_DIR" "$TARGET_DIR"sleep 5done) &echo "Скрипт завершил инициализацию. Синхронизация запущена в фоновом режиме: файлы копируются каждые 5 секунд из SOURCE_DIR=$SOURCE_DIR в TARGET_DIR=$TARGET_DIR."```Добавьте этот скрипт в ./entrypoint.sh и запустите его до выполнения миграций: `./entrypoint.sh /app/db "$MOUNTED_DB_FOLDER"`Также включите в ./entrypoint.sh проверку: если директория /app/db/ пуста или не содержит файлов, автоматически выполните следующие Django-команды:- migrate- create_admin_user- fill_recordsПосле создания скрипта background-sync-folders.sh и правок в ./entrypoint.shВыполни docker build and push в Cloud.ru Artifact Registry используяназвание реестра = <ваше_название_реестра>название репозитория = recordacionназвание тэга = v0.0.2Где <ваше_название_реестра> — название реестра, заданное на Шаге 12.
Создайте новую ревизию контейнера, изменив следующие параметры:
добавьте переменную MOUNTED_DB_FOLDER=/synced/db;
в подключенном бакете замените путь до бакета с базой данных с /app/db на /synced/db.
Результат
Вы научились:
подключать Foundation Models в VS Code;
вайб-кодить Django-приложение для публикации фотографий с помощью промптов к Foundation Models;
использовать Foundation Models для отладки и тестирования приложений в VS Code;
подключать MCP-сервер для автоматизации сборки и публикации Docker-образа приложения в Artifact Registry
с помощью AI-агента обращаться к MCP-серверу, чтобы деплоить контейнерное приложение в Container Apps одной командой;
добавлять постоянный том Object Storage, который позволяет сохранить ваши данные, когда запросы к приложению не поступают;
синхронизировать временную базу данных с томом Object Storage при работе контейнерного приложения.
Смотрите обучающее видео по вайб-кодингу с помощью Foundation Models и деплою приложения в Container Apps и узнайте о том, как автоматизировать деплой приложения с помощью MCP-сервера.