Дипломный практикум в YandexCloud


Цели:

  1. V Зарегистрировать доменное имя (любое на ваш выбор в любой доменной зоне) mymind.su.
  2. Подготовить инфраструктуру с помощью Terraform на базе облачного провайдера YandexCloud.
  3. Настроить внешний Reverse Proxy на основе Nginx и LetsEncrypt.
  4. Настроить кластер MySQL.
  5. Установить WordPress.
  6. Развернуть Gitlab CE и Gitlab Runner.
  7. Настроить CI/CD для автоматического развёртывания приложения.
  8. Настроить мониторинг инфраструктуры с помощью стека: Prometheus, Alert Manager и Grafana.

Этапы выполнения:

V Регистрация доменного имени

Подойдет любое доменное имя на ваш выбор в любой доменной зоне.

ПРИМЕЧАНИЕ: Далее в качестве примера используется домен mymind.su замените его вашим доменом.

Рекомендуемые регистраторы:

Цель:

  1. Получить возможность выписывать TLS сертификаты для веб-сервера.

Ожидаемые результаты:

  1. V У вас есть доступ к личному кабинету на сайте регистратора.
  2. V Вы зарегистрировали домен и можете им управлять (редактировать dns записи в рамках этого домена).

img.png

Создание инфраструктуры

Для начала необходимо подготовить инфраструктуру в YC при помощи Terraform.

Особенности выполнения:

  • Бюджет купона ограничен, что следует иметь в виду при проектировании инфраструктуры и использовании ресурсов;
  • Следует использовать последнюю стабильную версию Terraform.

Предварительная подготовка:

  1. Создайте сервисный аккаунт, который будет в дальнейшем использоваться Terraform для работы с инфраструктурой с необходимыми и достаточными правами. Не стоит использовать права суперпользователя

  2. Подготовьте backend для Terraform: а. Рекомендуемый вариант: Terraform Cloud img_22.png

    б. Альтернативный вариант: S3 bucket в созданном YC аккаунте.

  3. Настройте workspaces а. Рекомендуемый вариант: создайте два workspace: stage и prod. В случае выбора этого варианта все последующие шаги должны учитывать факт существования нескольких workspace.
    б. Альтернативный вариант: используйте один workspace, назвав его stage. Пожалуйста, не используйте workspace, создаваемый Terraform-ом по-умолчанию (default).

  4. Создайте VPC с подсетями в разных зонах доступности. img_2.png

  5. Убедитесь, что теперь вы можете выполнить команды terraform destroy и terraform apply без дополнительных ручных действий.

  6. В случае использования Terraform Cloud в качестве backend убедитесь, что применение изменений успешно проходит, используя web-интерфейс Terraform cloud.

Цель:

  1. Повсеместно применять IaaC подход при организации (эксплуатации) инфраструктуры.
  2. Иметь возможность быстро создавать (а также удалять) виртуальные машины и сети. С целью экономии денег на вашем аккаунте в YandexCloud.

Ожидаемые результаты:

  1. Terraform сконфигурирован и создание инфраструктуры посредством Terraform возможно без дополнительных ручных действий.
  2. Полученная конфигурация инфраструктуры является предварительной, поэтому в ходе дальнейшего выполнения задания возможны изменения.

>>>>>> terraform <<<<<<


Установка Nginx и LetsEncrypt

Необходимо разработать Ansible роль для установки Nginx и LetsEncrypt.

>>>>>> proxy <<<<<<

Для получения LetsEncrypt сертификатов во время тестов своего кода пользуйтесь тестовыми сертификатами, так как количество запросов к боевым серверам LetsEncrypt лимитировано.

Рекомендации:

  • Имя сервера: mymind.su
  • Характеристики: 2vCPU, 2 RAM, External address (Public) и Internal address. img_4.png Цель:
  1. Создать reverse proxy с поддержкой TLS для обеспечения безопасного доступа к веб-сервисам по HTTPS.

Ожидаемые результаты:

  1. В вашей доменной зоне настроены все A-записи на внешний адрес этого сервера:
    • https://www.mymind.su (WordPress)
    • https://gitlab.mymind.su (Gitlab)
    • https://grafana.mymind.su (Grafana)
    • https://prometheus.mymind.su (Prometheus)
    • https://alertmanager.mymind.su (Alert Manager)
  2. Настроены все upstream для выше указанных URL, куда они сейчас ведут на этом шаге не важно, позже вы их отредактируете и укажите верные значения.
  3. В браузере можно открыть любой из этих URL и увидеть ответ сервера (502 Bad Gateway). На текущем этапе выполнение задания это нормально!

Установка кластера MySQL

Необходимо разработать Ansible роль для установки кластера MySQL.

Рекомендации:

  • Имена серверов: db01.mymind.su и db02.mymind.su
  • Характеристики: 4vCPU, 4 RAM, Internal address.

img_5.png img_6.png

Цель:

  1. Получить отказоустойчивый кластер баз данных MySQL. img_11.png Ожидаемые результаты:

  2. MySQL работает в режиме репликации Master/Slave.

  3. В кластере автоматически создаётся база данных c именем wordpress.

  4. В кластере автоматически создаётся пользователь wordpress с полными правами на базу wordpress и паролем wordpress.

Вы должны понимать, что в рамках обучения это допустимые значения, но в боевой среде использование подобных значений не приемлимо! Считается хорошей практикой использовать логины и пароли повышенного уровня сложности. В которых будут содержаться буквы верхнего и нижнего регистров, цифры, а также специальные символы!


Установка WordPress

Необходимо разработать Ansible роль для установки WordPress.

Рекомендации:

  • Имя сервера: app.mymind.su
  • Характеристики: 4vCPU, 4 RAM, Internal address.

img_7.png

Цель:

  1. Установить WordPress. Это система управления содержимым сайта (CMS) с открытым исходным кодом.

По данным W3techs, WordPress используют 64,7% всех веб-сайтов, которые сделаны на CMS. Это 41,1% всех существующих в мире сайтов. Эту платформу для своих блогов используют The New York Times и Forbes. Такую популярность WordPress получил за удобство интерфейса и большие возможности.

Ожидаемые результаты: img_12.png

  1. Виртуальная машина на которой установлен WordPress и Nginx/Apache (на ваше усмотрение).
  2. В вашей доменной зоне настроена A-запись на внешний адрес reverse proxy:
    • https://www.mymind.su (WordPress)
  3. На сервере mymind.su отредактирован upstream для выше указанного URL и он смотрит на виртуальную машину на которой установлен WordPress.
  4. В браузере можно открыть URL https://www.mymind.su и увидеть главную страницу WordPress.

Установка Gitlab CE и Gitlab Runner

Необходимо настроить CI/CD систему для автоматического развертывания приложения при изменении кода.

Рекомендации:

  • Имена серверов: gitlab.mymind.su и runner.mymind.su
  • Характеристики: 4vCPU, 4 RAM, Internal address.

img_8.png img_9.png Цель:

Построить pipeline доставки кода в среду эксплуатации, то есть настроить автоматический деплой на сервер app.mymind.su при коммите в репозиторий с WordPress.

Подробнее об Gitlab CI

Ожидаемый результат:

  1. Интерфейс Gitlab доступен по https.
  2. В вашей доменной зоне настроена A-запись на внешний адрес reverse proxy:
    • https://gitlab.mymind.su (Gitlab)
  3. На сервере mymind.su отредактирован upstream для выше указанного URL и он смотрит на виртуальную машину на которой установлен Gitlab.
  4. При любом коммите в репозиторий с WordPress и создании тега (например, v1.0.0) происходит деплой на виртуальную машину.

Установка Prometheus, Alert Manager, Node Exporter и Grafana

Необходимо разработать Ansible роль для установки Prometheus, Alert Manager и Grafana.

Рекомендации:

  • Имя сервера: monitoring.mymind.su
  • Характеристики: 4vCPU, 4 RAM, Internal address.

img_10.png

Цель:

  1. Получение метрик со всей инфраструктуры.

Ожидаемые результаты:

  1. Интерфейсы Prometheus, Alert Manager и Grafana доступены по https.
  2. В вашей доменной зоне настроены A-записи на внешний адрес reverse proxy:
  • https://grafana.mymind.su (Grafana)
  • https://prometheus.mymind.su (Prometheus)
  • https://alertmanager.mymind.su (Alert Manager)
  1. На сервере mymind.su отредактированы upstreams для выше указанных URL и они смотрят на виртуальную машину на которой установлены Prometheus, Alert Manager и Grafana.
  2. На всех серверах установлен Node Exporter и его метрики доступны Prometheus.
  3. У Alert Manager есть необходимый набор правил для создания алертов.
  4. В Grafana есть дашборд отображающий метрики из Node Exporter по всем серверам.
  5. В Grafana есть дашборд отображающий метрики из MySQL (*).
  6. В Grafana есть дашборд отображающий метрики из WordPress (*).

Примечание: дашборды со звёздочкой являются опциональными заданиями повышенной сложности их выполнение желательно, но не обязательно.


Что необходимо для сдачи задания?

  1. Репозиторий со всеми Terraform манифестами и готовность продемонстрировать создание всех ресурсов с нуля.

>>>>>> terraform <<<<<<

  1. Репозиторий со всеми Ansible ролями и готовность продемонстрировать установку всех сервисов с нуля.

>>>>>> ansible <<<<<<

  1. Скриншоты веб-интерфейсов всех сервисов работающих по HTTPS на вашем доменном имени.
  • https://www.mymind.su (WordPress)

img_15.png img_16.png

  • https://gitlab.mymind.su (Gitlab)

img_13.png img_14.png

  • https://grafana.mymind.su (Grafana)

img_20.png

  • https://prometheus.mymind.su (Prometheus)

img_17.png

img_18.png

img_19.png

  • https://alertmanager.mymind.su (Alert Manager)

img_21.png

  1. Все репозитории рекомендуется хранить на одном из ресурсов (github.com или gitlab.com).

ДОРАБОТКА

img_24.png

После второго запуска сертифиты не ругаются.

img_23.png

Запушил в репу содержимое сайта.

img_26.png

Изменил цвет темы (видно по времени)

img_27.png

img_30.png

img_29.png

Урааааа! Полетела птичка ;)

img_28.png