Развёртывание контейнера на DigitalOcean App Platform

Быстрые ссылки
- Настройка Container Registry
- Авторизация Docker в реестре
- Создание и загрузка образа
- Развёртывание через App Platform
- Обновление развёртывания
- Управление приложением
- Контрольные списки и откат
- Краткое резюме
Почему это полезно
App Platform — полностью управляемый сервис DigitalOcean для развёртывания приложений из исходного кода или контейнерного образа. Если вам нужно быстро выставить контейнер в облаке без настройки собственных прокси и оркестраторов — это один из самых быстрых путей.
Важно: App Platform упрощает инфраструктуру, но не отменяет практики безопасности и контроля версий образов.
Настройка Container Registry
- Войдите в панель управления DigitalOcean и в левой боковой панели выберите “Container Registry”.
- Создайте новый реестр: задайте имя длиной от 3 до 63 символов, допускаются буквы, цифры и дефисы.
- Выберите тариф: Free, Basic или Professional. Free даёт одну репозиторию и 500 МБ хранилища.
- Нажмите “Create Registry” — provisioning обычно занимает несколько секунд.

Совет: выберите имя реестра понятное команде и совпадающее с наименованием проекта. Оно будет частью пути образов: registry.digitalocean.com/ваш-реестр/имя:тег
“Docker login” в ваш реестр
После создания вы попадёте на страницу управления реестром. Нажмите “Actions” → “Download Docker Credentials”.

Выберите опцию “Credential permissions” → “Read & Write”, чтобы иметь возможность загружать образы. Нажмите “Download Config” — вы получите файл конфигурации для Docker.

Переименуйте скачанный файл в
config.jsonи переместите в отдельную директорию. При вызове Docker указывайте флаг
--configс путём к этой директории: Docker загрузит config.json внутри и сможет аутентифицироваться в вашем реестре.
Пример команд:
mkdir ~/do-config && mv docker-config.json ~/do-config/config.json
docker --config ~/do-config pull my-image:latestАльтернативы: можно использовать doctl для логина в реестр:
doctl registry logindoctl автоматически обновит Docker config и выполнит логин в реестр, если у вас настроен doctl с токеном API.
Важно: храните config.json в защищённом месте и не добавляйте его в git.
Создание и загрузка образа
После настройки реестра загрузите туда свой образ Docker. В этом руководстве мы воспользуемся официальным Apache2-образом httpd:latest в качестве примера.
Команды для скачивания, тегирования и отправки в ваш реестр:
# скачать с Docker Hub
docker pull httpd:latest
# присвоить тег с путём в вашем Container Registry
docker tag httpd:latest registry.digitalocean.com/my-registry/httpd:latest
# отправить в Container Registry (указывайте --config если нужно)
docker --config ~/do-config push registry.digitalocean.com/my-registry/httpd:latestНе забудьте заменить my-registry на имя вашего реестра. После успешного push вы увидите образ в веб‑интерфейсе реестра.

Советы по тегированию:
- Используйте семантические теги или уникальные теги по дате/commit для каждого релиза.
- Избегайте перебивки одного и того же тега (например, latest) для продакшен‑образов — это затрудняет откат.
Развёртывание через App Platform
- Перейдите в App Platform: в левой панели откройте “Apps” и нажмите “Launch Your App”.

- В качестве источника репозитория выберите “DigitalOcean Container Registry”.

На следующем экране выберите нужный образ из выпадающего списка “Repository” и укажите тег в “Tag”. Нажмите “Next” для продолжения.
Сконфигурируйте компонент контейнера: HTTP Routes, Environment Variables, Run Command и т.д. Для простого Apache-контейнера можно оставить большинство значений по умолчанию.

Порт: укажите HTTP Port = 80 (Apache слушает порт 80 по умолчанию). Нажмите “Edit” и измените порт при необходимости.
Укажите имя приложения и регион развёртывания. На момент написания App Platform поддерживается не во всех регионах — выбирайте ближайший к пользователям.

- Выберите план App Platform: Container Images не доступны на бесплатном Starter-плане. Для простого Apache подойдёт Basic с одним инстансом 5 $/мес и 512 МБ.

- Нажмите “Launch Basic App” — начнётся разворачивание. Через несколько минут приложение будет доступно по ссылке в панели.
Обновление развёртывания
App Platform автоматически инициирует новый деплой, когда в реестре появляется новый образ с тем же тегом (в зависимости от кэширования и конфигурации). Практики:
- Для надёжного обновления используйте уникальные теги (например, commit SHA или дату) для каждой сборки.
- Если вы перезаписываете образ с тем же тегом, App Platform может не заметить изменения из‑за кэша — вручную инициируйте деплой или смените тег.
Важно: используйте конвейер CI/CD (GitHub Actions, GitLab CI) для автоматической сборки и пуша образов с консистентным тегированием.
Управление приложением
На странице приложения вы увидите:
- Insights — метрики использования ресурсов;
- Deployments — журнал деплоев и истории релизов;
- Logs — поток логов контейнера в реальном времени;
- Console — доступ к shell внутри контейнера.

Вкладка “Components” позволяет изменить конфигурацию контейнера (образ и тег, маршруты HTTP, порт). Переменные окружения, указанные здесь, относятся к конкретному компоненту; переменные на вкладке “Settings” применяются ко всем компонентам приложения.
Чтобы удалить приложение, нажмите красную кнопку “Destroy” внизу страницы Settings. Чтобы удалить образ, перейдите в Container Registry, нажмите три точки справа от имени образа и выберите “Delete”.

Когда такой подход хорош, а когда нет
Преимущества:
- Очень быстрое развёртывание простых контейнеров и статических сайтов;
- Не нужно вручную настраивать балансировщики и прокси;
- Встроенный CI/CD возможен через интеграции.
Ограничения и случаи, когда стоит выбрать другое решение:
- Микросервисы с большим количеством компонентов и сложной сетевой связью — полноценный Kubernetes или Docker Swarm даст больше контроля;
- Высоконагруженные stateful-приложения с требованием тонкой оптимизации инфраструктуры;
- Нужна полная контроль над сетевой политикой, node-level настройками или нестандартным оборудованием.
Безопасность и приватность
Рекомендации по безопасности:
- Создавайте минимально привилегированные креденшелы: выдавайте Read & Write только там, где это необходимо.
- Не храните config.json в публичных репозиториях.
- Используйте уникальные теги и цифровые подписи образов, если возможно.
- Для секретов в App Platform используйте защищённые переменные окружения.
Конфиденциальность и GDPR: если контейнеры обрабатывают персональные данные граждан ЕС, проверьте соответствие региона развёртывания и договоров обработки данных у DigitalOcean.
Критерии приёмки
- Приложение отвечает на HTTP-запросы по ожидаемому URL и порту (обычно 80/443).
- Логи контейнера доступны в App Platform и не содержат критических ошибок при запуске.
- Новые сборки с уникальными тегами автоматически деплоятся (или процесс деплоя запускается вручную/CI).
- Мониторинг показывает приемлемое использование CPU/RAM и отсутствие утечек за первые 24 часа нагрузочного тестирования.
Руководство по откату и план действий при инциденте
- Если новый деплой приводят к ошибкам, немедленно откатитесь к предыдущему тегу через Components → выберите предыдущий тег → Redeploy.
- Если откат невозможен, переключите масштаб до 0 или Destroy и восстановите из backup/previous image.
- Используйте Console для временной диагностики (ps, tail -f логов) и определения корня проблемы.
- После восстановления проанализируйте CI/CD pipeline и внедрите gated deployment (канареечный релиз или проверку smoke tests перед полным rollout).
Пример плана быстрого отката:
- Т = 0: обнаружен инцидент — откат к последнему рабочему тегу
- Т + 5 мин: если откат не помог — выключение проблемного компонента и переключение на standby образ
- Т + 15–30 мин: сбор логов, инициирование postmortem
Чек-листы по ролям
Разработчик:
- Указан корректный ENTRYPOINT/CMD в Dockerfile;
- Образ собирается локально и проходит smoke тесты;
- Каждый релиз имеет уникальный тег (commit SHA или дата);
- Нет секретов в образе или в Dockerfile.
Оператор / DevOps:
- Container Registry создан и имеет корректные права доступа;
- Docker-клиент умеет авторизоваться в реестре (проверить docker –config pull);
- Настроены мониторинг и алерты на CPU/RAM/HTTP 5xx;
- Процедура отката проверена и документирована.
Product / менеджер:
- Понятны SLO/меры успеха развёртывания (время отклика, доступность);
- Запланированы канареечные релизы для критичных функций;
- Есть контактная информация ответственных за инциденты.
Мини‑методология: от кода до живого контейнера (шаги)
- Сборка образа в CI, тесты и статический анализ.
- Тегирование образа с уникальным идентификатором.
- Push в DigitalOcean Container Registry.
- App Platform получает новый образ и разворачивает компонент (или CI вызывает redeploy через API).
- Smoke test и мониторинг, затем постепенный rollout.
Примеры альтернативных подходов
- doctl + API: автоматизируйте операции через doctl и DigitalOcean API для гибких сценариев (скрипты, terraform).
- GitHub/GitLab integration: развертывание напрямую из репозитория с построением образа в облаке.
- Kubernetes (DigitalOcean Kubernetes): для сложных мультикомпонентных систем с подробной сетевой настройкой.
Типичные ошибки и как их избежать
- Ошибка: образ не загружается в реестр — причина чаще всего в неверном auth config.json. Решение: проверьте docker –config pull и doctl registry login.
- Ошибка: приложение не запускается — посмотрите логи и Console; убедитесь, что выставлен правильный HTTP Port (например, 80 для Apache).
- Ошибка: обновление не срабатывает — используйте уникальные теги для каждого обновления.
Фактические параметры и ориентиры
- Free tier Container Registry: 1 репозиторий, 500 МБ.
- Базовый инстанс App Platform: 5 $/мес за 512 МБ (проверьте актуальные цены в панели).
- Регионы: App Platform доступна не во всех регионах — выбирайте ближайший.
Шаблон проверки перед продом (SOP)
- Собрать образ в CI и успешно пройти тесты;
- Протестировать образ в staging App Platform;
- Провести smoke тесты (HTTP 200, авторизация, основные флоу);
- Убедиться, что мониторинг и алерты настроены;
- Выполнить релиз в production и наблюдать метрики 15–30 минут.
Короткий план миграции в App Platform (high-level roadmap)
- Подготовка Dockerfile и тестовой сборки.
- Настройка Container Registry и doctl (если используете).
- Настройка staging-приложения в App Platform и автоматизация CI.
- Пошаговый rollout в production с мониторингом и планом отката.
Глоссарий (1 строка на термин)
- Container Registry — приватный реестр образов Docker, хранимых в облаке;
- App Platform — PaaS от DigitalOcean для развёртывания приложений и контейнеров;
- doctl — клиент командной строки DigitalOcean;
- Tag — метка образа (версия) в реестре.
Советы по миграции и совместимости
- Если вы мигрируете с самоуправляемого Docker Host, проверьте зависимости на уровне сети и томов: App Platform ограничивает прямой доступ к node-level хранилищу.
- Для stateful сервисов рассмотрите Managed Databases от DigitalOcean и подключайте их через доступные интеграции.
Контроль качества: тесты и критерии приёмки
Тесты, которые стоит выполнить перед релизом:
- Unit и интеграционные тесты в CI;
- Smoke test после развёртывания (запросы к основным endpoint);
- Нагрузочное тестирование базовых сценариев для оценки ресурсов;
- Проверка логов на наличие ошибок при старте.
Критерии приёмки перечислены в соответствующем разделе выше.
Итог и рекомендации
DigitalOcean App Platform вместе с Container Registry — удобный способ быстро развёртывать контейнеры без глубокого погружения в управление инфраструктурой. Подходит для простых веб‑сервисов, статических сайтов и прототипов. Для сложных распределённых систем лучше рассмотреть Kubernetes.
Важно держать процессы релиза и отката простыми: уникальные теги, автоматические сборки, мониторинг и план отката — ключевые элементы безопасного развёртывания.
Ключевые источники действий: Container Registry → Download Docker Credentials → docker push образ → App Platform: Launch Your App → выбрать образ → Launch.
Краткое резюме
- Создайте Container Registry и скачайте Docker конфиг;
- Запушьте образ с уникальным тегом;
- Разверните через App Platform, выберите порт и план;
- Настройте мониторинг, используйте чек‑листы и план отката.
Важно: всегда храните доступы и секреты в защищённом виде и тестируйте процедуру отката заранее.
Похожие материалы
Настройка trim на Lutron Caseta — убрать мерцание ламп
Как улучшить понимание Alexa — 5 простых шагов
Как улучшить Wi‑Fi для камер наблюдения
Выключение ламп через Nest и IFTTT
Как убрать напоминания о поездках в Google Now