Гид по технологиям

Развертывание Droplet в DigitalOcean через PowerShell

• 7 min read • DevOps • Обновлено 16 Nov 2025
Развернуть Droplet в DigitalOcean через PowerShell
Развернуть Droplet в DigitalOcean через PowerShell

Схема процесса развертывания Droplet через API и PowerShell

Быстрые ссылки

  • Установка PowerShell Core

  • Создание API-токена в DigitalOcean

  • DigitalOcean REST API — аутентификация и создание Droplet

  • Формирование JSON-конфигурации

  • Разворачивание Droplet (Invoke-RestMethod)

  • Дополнительные опции: SSH, бэкапы, тома, теги

  • Итоги и рекомендации

Введение

PowerShell — современная оболочка и язык сценариев, доступный на Windows, macOS и Linux. В связке с REST API DigitalOcean PowerShell позволяет быстро автоматизировать создание виртуальных машин (Droplets). Это удобно для тестовых сред, CI/CD-пайплайнов и повторяемой инфраструктуры.

Ключевая идея: вместо ручной работы в панели управления вы формируете JSON с параметрами Droplet и отправляете POST-запрос к API DigitalOcean через Invoke-RestMethod.

Важно: API-токен — это секрет уровня пароля. Храните его безопасно и выдавайте отдельные токены для автоматизации.

Установка PowerShell Core

PowerShell 7 можно установить на любую ОС. На Windows это не затрагивает встроенный Windows PowerShell — версии могут существовать параллельно. На Linux и macOS установите пакет из официального репозитория.

Официальные инструкции по установке и быстрому старту доступны в репозитории PowerShell:

https://github.com/PowerShell/PowerShell/tree/master/docs/learning-powershell

Совет: используйте пакетный менеджер вашей ОС (winget, choco, apt, yum, brew), чтобы автоматически получать обновления.

Создание API-токена в DigitalOcean

Задача: получить Personal Access Token с правами read и write для создания ресурсов.

Порядок действий:

  1. Войдите в панель DigitalOcean.
  2. Откройте раздел API.
  3. Нажмите Generate New Token (Создать новый токен).
  4. Дайте понятное имя и разрешите write-доступ, если планируете создавать Droplet.
  5. Скопируйте токен и сохраните в защищённом хранилище (Password Manager, Secret Vault). Вы больше не увидите токен в UI.

Рекомендация: создавайте отдельный токен для каждого CI/инструмента. Это упрощает отзыв прав при необходимости.

Форма создания персонального токена доступа в DigitalOcean

DigitalOcean REST API — основные моменты

Коротко о том, что важно для развертывания Droplet:

Обязательные заголовки в запросе:

  • Authorization: Bearer <ваш_токен>
  • Content-Type: application/json

Без них сервер вернёт ошибку аутентификации или не сможет разобрать тело запроса.

Термин в одну строку: Droplet — это виртуальная машина (VM) в облаке DigitalOcean.

Формирование JSON-конфигурации

В примере мы создаём простой Droplet с минимальным планом в регионе nyc1 и включаем IPv6, мониторинг и приватную сеть.

Ключевые параметры:

  • image: идентификатор образа (например, ubuntu-18-04-x64)
  • region: nyc1
  • size: s-1vcpu-1gb
  • ipv6: true
  • monitoring: true
  • private_networking: true (в новых API это может быть отдельная опция “vpc_uuid”, но DigitalOcean поддерживает приватные сети)
  • ssh_keys: массив id ключей или строк с отпечатками
  • backups: true/false
  • volumes: список томов для подключения
  • tags: метки для управления

Ниже — практичный пример сборки JSON в PowerShell. Я использую here-string для user_data, чтобы корректно передавать многострочный скрипт cloud-init.

$token = 'ВАШ_DIGITALOCEAN_TOKEN'  # храните в секретном хранилище!

$userData = @'
#cloud-config
package_update: true
package_upgrade: true
runcmd:
  - apt-get update -y
  - apt-get upgrade -y
  - apt-get install -y nginx
'@

$body = [PSCustomObject]@{
    name = 'test-web-vm'
    region = 'nyc1'
    size = 's-1vcpu-1gb'
    image = 'ubuntu-18-04-x64'
    ipv6 = $true
    monitoring = $true
    # Приватная сеть: в некоторых аккаунтах используется VPC; проверяйте API-спецификацию
    private_networking = $true
    user_data = $userData
    # Примеры дополнительных полей
    backups = $false
    tags = @('web','test')
    # ssh_keys можно передать массив id или отпечатков ключей
    ssh_keys = @()
} | ConvertTo-Json -Depth 6

Пояснения:

  • ConvertTo-Json -Depth 6 нужен, когда в объекте есть вложенные структуры.
  • user_data передаётся как строка cloud-init. Обратите внимание на корректные отступы и синтаксис YAML внутри user_data.

Ошибки при формировании JSON часто связаны с кавычками и переводами строк. Here-string решает большинство проблем.

Разворачивание Droplet: корректный PowerShell-запрос

Ниже показан корректный пример вызова API через Invoke-RestMethod. Мы формируем заголовки, тело запроса и проверяем код ответа.

$apiUrl = 'https://api.digitalocean.com/v2/droplets'
$headers = @{ Authorization = "Bearer $token"; 'Content-Type' = 'application/json' }

$response = Invoke-RestMethod -Uri $apiUrl -Method Post -Headers $headers -Body $body -ErrorAction Stop

# Проверяем результат
if ($response.id -or $response.droplet) {
    Write-Host "Droplet создан. ID:" ($response.droplet.id -as [string])
} else {
    Write-Host "Ответ API:" ($response | ConvertTo-Json -Depth 4)
}

Примечание по аутентификации: некоторые примеры в сети используют параметр -Authentication или PSCredential — для DigitalOcean достаточно заголовка Authorization с Bearer-токеном.

После успешного запроса в ответе вернётся объект с метаданными Droplet. Создание может занимать несколько секунд.

Скриншот консоли с подтверждением создания Droplet

Дополнительные опции и улучшения

Ниже — список параметров, которые полезно учитывать в реальной автоматизации:

  • ssh_keys — добавляйте публичные SSH-ключи, чтобы избежать пароля root
  • backups — включайте, если нужна автоматическая защита данных (платно)
  • volumes — подключаемые блочные тома для хранения
  • tags — метки для управления группами Droplet
  • vpc_uuid — укажите VPC, если используете приватные сети нового типа
  • user_data — cloud-init сценарии для настройки ОС при первом запуске

Безопасность: не передавайте токен в явном виде в скриптах, которые попадают в репозиторий. Используйте секрет-менеджер (HashiCorp Vault, Azure Key Vault, GitHub Secrets и т.п.).

Практические шаблоны — несколько вариантов использования

  1. Быстрое тестовое окружение: один Droplet с nginx и мониторингом, IPv6 выключен, backups false.
  2. CI-пайплайн: создавайте Droplet по шаблону, выполняйте тесты и удаляйте по завершении. Используйте теги для массового удаления.
  3. Продуктовый деплой: создавайте несколько Droplet с балансировщиком и томами, используйте VPC и бэкапы.

Каждый сценарий требует разной политики вращения токенов и бэкапов.

Контроль безопасности и лучшие практики

  • Не используйте root-пароли. Добавляйте SSH-ключи.
  • Храните токены в секретном хранилище.
  • Разделяйте токены по средам (dev/stage/prod).
  • Ограничивайте права токенов, если необходимо. Для полного удаления ресурсов может требоваться write-доступ.
  • Логируйте вызовы API, но не пишите токены в логи.

Критерии приёмки

  1. Droplet создаётся через API и появляется в панели управления DigitalOcean.
  2. Установлен nginx (или другой проверяемый пакет), если задан user_data.
  3. SSH-доступ по ключу работает (если ssh_keys указаны).
  4. Monitoring включён и в интерфейсе DigitalOcean видны метрики CPU.
  5. Тег(и) присутствуют в списке Droplet.

Тесты и приёмочные сценарии

  • Acceptance 1: Запрос возвращает HTTP 202/200 и объект droplet с id.
  • Acceptance 2: После старта VM служба nginx отвечает на HTTP-запросы на порту 80.
  • Acceptance 3: SSH-подключение по ключу проходит без пароля.

Напишите простые PowerShell-ассерт-скрипты для автоматической проверки этих критериев.

Что делать, если что-то идёт не так

  • Ошибка 401/403: проверьте токен и заголовок Authorization.
  • Ошибка 422 или поля не принимаются: проверьте формат JSON и допустимые значения параметров (image, size, region).
  • Droplet создаётся, но cloud-init не сработал: проверьте user_data на синтаксические ошибки YAML и отступы.
  • Нечитаемый скриншот/изображение: откройте файл по указанному пути или скачайте полноразмерный файл.

Роли и чек-листы

DevOps инженер:

  • Автоматизировать создание и удаление Droplet
  • Настроить хранение токенов в секретном хранилище
  • Настроить мониторинг и алерты

Системный администратор:

  • Подготовить SSH-ключи и доступы
  • Настроить бэкапы и план восстановления

Разработчик:

  • Тестировать deployment в изолированной среде
  • Проверять idempotency сценариев

Мини-методология для быстрого внедрения (3 этапа)

  1. Подготовка: создать сервисный токен и сохранить в секретах. Сформировать шаблон JSON и протестировать локально.
  2. Автоматизация: добавить PowerShell-скрипт в CI, использовать теги для обозначения окружений.
  3. Наблюдение: включить monitoring, собрать метрики и настроить оповещения.

Совместимость и переносимость

  • PowerShell 7 работает на Windows/Linux/macOS. Скрипты с Invoke-RestMethod — кроссплатформенные.
  • Проверяйте различия в путях файлов и менеджерах пакетов на целевых ОС.
  • DigitalOcean API периодически обновляется: следите за changelog и проверяйте поддерживаемые поля (например, private_networking vs vpc_uuid).

Приватность и GDPR

  • В token-хранилищах не храните персональные данные.
  • Логируйте вызовы API без токенов и чувствительной информации.
  • При обработке персональных данных на Droplet соблюдайте внутренние требования к шифрованию и хранению данных.

Факторы затрат и планирование

  • Droplet базового уровня (s-1vcpu-1gb) подходит для тестов и небольших сервисов.
  • Бэкапы и дополнительные тома увеличивают затраты.
  • Планируйте удаление тестовых Droplet, чтобы не платить за неиспользуемые ресурсы.

Короткая сводка

Combining PowerShell with the DigitalOcean API позволяет быстро развертывать и конфигурировать Droplet. Используйте безопасное хранение токенов, добавляйте SSH-ключи и cloud-init для автоматической установки ПО. Тщательно тестируйте user_data и следите за ответами API.

Важно: настраивайте автоматическое удаление временных ресурсов и ведите учёт тэгов.

FAQ

В: Где хранить токен для CI?

A: В секретном хранилище вашего CI (GitHub Actions Secrets, GitLab CI Variables, Jenkins Credentials) или в специализированном секретном менеджере.

В: Как передать SSH-ключ при создании Droplet?

A: В поле ssh_keys укажите массив из ID ключей, зарегистрированных в аккаунте DigitalOcean, или отпечатки публичных ключей.

В: Можно ли использовать cloud-init для установки специфичных пакетов?

A: Да. Передавайте скрипт в user_data в формате cloud-config (YAML). Проверяйте синтаксис и отступы.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро