DigitalOcean: знакомство – Droplet, Floating IP, Firewall

Автор: | 04/11/2018
 

За октябрь месяц от Амазона мне пришёл счёт в 71 USD, что уже начало несколько утомлять.

Впрочем – я не слишком следил за расходами, и сумма, как для AWS, вполне оправдана.

Например – у меня в S3 накопилось 370 ГБ бекапов, потому что было лень настроить S3 Lifecycle. Трафика за месяц ушло 1.5ТБ – потому что кроме блога есть OpenVPN без настроенных маршрутов (см. пример в комментарии к этому посту), да плюс 3 запущенных инстанса – один под сам блог, второй под MariaDB, и третий – чисто под OpenVPN, и никак не доходили руки всё это привести в порядок – хотя собирался давно.

В общем, счёт за Октябрь выглядит так:

Основная цель переезда на AWS была ближе познакомиться с ним и его сервисами, т.к. на тот момент и опыта с ним было мало, и по работе с ним сталкивался достаточно немного.

Но сейчас проект, в котором работаю, полностью хостится в Амазоне, задач с ним хватает, тот опыт, которого хотелось – получил.

А потому – появилась мысль попробовать и другие хостинги, в частности – DigitalOcean.

В первую очередь – потому, что он предлагает достаточно внятную ценовую политику.

Например – для начала можно взять машинку с 2 ГБ памяти, 1 ЦПУ, 50 ГБ диском SSD и 2 ТБ трафика (при чём, в отличии от Амазона – тут считается только исходящий трафик).

Стоить такая машина будет 10 уе/мес – более чем приятная цена.

Правда, есть нюанс:

For example, if a Droplet’s maximum monthly data transfer allowance is 1000 GB, it will accrue 1000 GB / 672 hours = 1.5 GB per hour that the Droplet exists.

Т.е., трафик дроплета делится на часы в месяце, и если за час трафика было скушано больше, чем полученное значение – то он будет стоить денег.

Собственно, план на сегодня – познакомиться с основными необходимыми сервисами DigitalOcean.

Регистрация в DigitalOcean

Переходим на страницу регистрации, указываем логин, почту и пароль:

На почту отправляется письмо со ссылкой на подтверждение, после чего попадаем на страницу оформления деталей оплаты:

Выбираем платёжную карту или PayPal, заполняем поля (DO отправит тестовый платёж в 1 доллар на указанную карту, потом вернёт деньги обратно), попадаем на следующую страницу – Your project.

Скипнуть его нельзя, потому заполняем поля по желанию:

В целом проекты в DO – некий аналог Resource Groups в AWS/Azure, как я понял из документации.

И наконец-то попадаем в панель управления “дроплетами” aka виртуальными машинами в DO (надо погуглить – откуда такое название взялось):

Основные сервисы DigitalOcean

Слева в панели есть список основых сервисов, которые предлагает DO:

  • Droplets: виртуальные машины, аналог EC2 в AWS
  • Volumes: диски, аналог EBS
  • Spaces: object-storage, аналог S3
  • Images: копии дисков и дроплетов
  • Networking: тут находится управление IP, firewall, Load Balancer и доменами
  • Monitoring: управление правилами алертов мониторинга
  • API: DO предоставляет публичный API для управления сервисами, надо будет его попозже поизучать

Создание дроплета

Не очень мне нравится слово “дроплет”, потому иногда буду называть “инстанс” или “вирутальная машина”.

Собственно – кликаем Create Droplet, выбираем операционную систему, её версию и тип инстанса:

Ниже предлагается включить автоматическое создание бекапов (которое будет стоить 20% от стоимости инстанса), и подключить дополнительный диск:

В целом – решение интересное, но мне пока не нужное – дроплет идёт с 50 ГБ диска, бекапить данные я буду стареньким скриптом в AWS S3 (пока что).

Дальше выбираем расположение дата-центра, в котором будет запущен инстанс:

Снова-таки по аналогии с AWS – у DO есть регионы, в которых расположены дата-центры, которые разбиты на “Availability Zones”, например регион Amsterdam включает в себя две “зоны доступности” – AMS2 и AMS3.

Список всех регионов можно найти на странице статуса DO тут>>> (а вот в документации я описания регионов не нашёл – плохо смотрел?).

В additional options я добавил Monitoring (в дроплете сразу будет установлен клиент мониторинга), а в SSH keys есть выбор.

Можно загрузить свой ключ, и использовать его – либо пропустить эту опцию – тогда рутовый пароль будет отправлен на почту.

Я загрузил свой ключик.

Генерируем его:

[simterm]

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/setevoy/.ssh/id_rsa): /home/setevoy/.ssh/do_rtfm_droplet
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/setevoy/.ssh/do_rtfm_droplet.
Your public key has been saved in /home/setevoy/.ssh/do_rtfm_droplet.pub.
The key fingerprint is:
SHA256:6+1rfOkKvOuumTabLsl3fW2e+/OR2hL+yf7o+LOH7Sw setevoy@setevoy-arch-home
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|                 |
|                 |
|        S        |
|       . .   .  .|
|   . .  +o  .o.= |
|    + +=.++ ++E==|
|     =BB*+=*o*%#X|
+----[SHA256]-----+

[/simterm]

Получаем публичную часть:

[simterm]

$ cat /home/setevoy/.ssh/do_rtfm_droplet.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDM1xV3U6tkdZpPOFy0a09fWUBbRGSUKZbNLLiG
...

[/simterm]

Указываем её в New SSH Key:

И последний шаг – указываем имя инстанса (оно же будет использоваться в качестве $HOSTNAME в системе), количество, и проект, к которому он будет принадлежать:

Машинка создаётся:

Машинка готова:

Floating IPs

Floating IP – аналог Elastic IP в AWS и является статическим IP, который можно подключать к различным виртуалкам.

Т.е. в случае, если один инстанс “поломался”, и ресурсы/сайты перенесены на другой – то вместо того, что бы обновлять DNS для всех сайтов на IP нового дроплета – можно просто переключить Floating IP.

При этом его использование бесплатно, пока он подключен к дроплету.

Документация тут>>>.

Переходим в FIP, выбираем инстанс, получаем новый адрес:

И используя его и созданный ранее SSH-ключ – подключаемся к машине:

[simterm]

$ ssh [email protected] -i do_rtfm_droplet
The authenticity of host '167.99.16.252 (167.99.16.252)' can't be established.
ECDSA key fingerprint is SHA256:9M4XNhIROqTr4ByCgIA7I2+HY46fIwdDIh26EmqJZiM.
Are you sure you want to continue connecting (yes/no)? yes
...
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@rtfm-dev:~#

[/simterm]

Firewall

Последняя вещь, которая необходима для запуска минимального сервиса – фаервол, аналог в AWS – Security Group.

Переходим в Firewalls, жмём Create Firewall, описываем правила и дроплет, к которому он будет применён:

Тут, понятно, 8.8.8.8 меняем на свой домашний/рабочий IP.

Применяем изменения, пробуем SSH с другого хоста, не добавленного в правила:

[simterm]

12:39:04 [setevoy@rtfm-prod-current ~] $ ssh [email protected]
ssh: connect to host 167.99.16.252 port 22: Connection timed out

[/simterm]

Из дома всё по прежнему работает.

В целом – на этом и всё.

Теперь надо обновить Ansible роли, запровиженить инстанс, скопировать данные – и можно тестировать работу блога в DigitalOcean.

UPD Блог переехал на DO 6.11.2018, второй день – полёт нормальный.

UPD 2 Ну и вот, по состоянию на 24.11 – как изменились счета.

AWS – тут остался ещё один сервер с OpenVPN + насщёлкало за RTFM до его переезда:

До переезда каждый месяц выходило порядка 65 баксов.

Digital Ocean – тут ещё некоторое время крутился второй дроплет в Dev-версией блога: