- Цели:
- Этапы выполнения:
- Что необходимо для сдачи задания?
- Как правильно задавать вопросы дипломному руководителю?
- V Зарегистрировать доменное имя (любое на ваш выбор в любой доменной зоне) mymind.su.
- Подготовить инфраструктуру с помощью Terraform на базе облачного провайдера YandexCloud.
- Настроить внешний Reverse Proxy на основе Nginx и LetsEncrypt.
- Настроить кластер MySQL.
- Установить WordPress.
- Развернуть Gitlab CE и Gitlab Runner.
- Настроить CI/CD для автоматического развёртывания приложения.
- Настроить мониторинг инфраструктуры с помощью стека: Prometheus, Alert Manager и Grafana.
Подойдет любое доменное имя на ваш выбор в любой доменной зоне.
ПРИМЕЧАНИЕ: Далее в качестве примера используется домен mymind.su
замените его вашим доменом.
Рекомендуемые регистраторы:
Цель:
- Получить возможность выписывать TLS сертификаты для веб-сервера.
Ожидаемые результаты:
- V У вас есть доступ к личному кабинету на сайте регистратора.
- V Вы зарегистрировали домен и можете им управлять (редактировать dns записи в рамках этого домена).
Для начала необходимо подготовить инфраструктуру в YC при помощи Terraform.
Особенности выполнения:
- Бюджет купона ограничен, что следует иметь в виду при проектировании инфраструктуры и использовании ресурсов;
- Следует использовать последнюю стабильную версию Terraform.
Предварительная подготовка:
-
Создайте сервисный аккаунт, который будет в дальнейшем использоваться Terraform для работы с инфраструктурой с необходимыми и достаточными правами. Не стоит использовать права суперпользователя
-
Подготовьте backend для Terraform: а. Рекомендуемый вариант: Terraform Cloud
б. Альтернативный вариант: S3 bucket в созданном YC аккаунте.
-
Настройте workspaces а. Рекомендуемый вариант: создайте два workspace: stage и prod. В случае выбора этого варианта все последующие шаги должны учитывать факт существования нескольких workspace.
б. Альтернативный вариант: используйте один workspace, назвав его stage. Пожалуйста, не используйте workspace, создаваемый Terraform-ом по-умолчанию (default). -
Убедитесь, что теперь вы можете выполнить команды
terraform destroy
иterraform apply
без дополнительных ручных действий. -
В случае использования Terraform Cloud в качестве backend убедитесь, что применение изменений успешно проходит, используя web-интерфейс Terraform cloud.
Цель:
- Повсеместно применять IaaC подход при организации (эксплуатации) инфраструктуры.
- Иметь возможность быстро создавать (а также удалять) виртуальные машины и сети. С целью экономии денег на вашем аккаунте в YandexCloud.
Ожидаемые результаты:
- Terraform сконфигурирован и создание инфраструктуры посредством Terraform возможно без дополнительных ручных действий.
- Полученная конфигурация инфраструктуры является предварительной, поэтому в ходе дальнейшего выполнения задания возможны изменения.
Необходимо разработать Ansible роль для установки Nginx и LetsEncrypt.
Для получения LetsEncrypt сертификатов во время тестов своего кода пользуйтесь тестовыми сертификатами, так как количество запросов к боевым серверам LetsEncrypt лимитировано.
Рекомендации:
- Имя сервера:
mymind.su
- Характеристики: 2vCPU, 2 RAM, External address (Public) и Internal address. Цель:
- Создать reverse proxy с поддержкой TLS для обеспечения безопасного доступа к веб-сервисам по HTTPS.
Ожидаемые результаты:
- В вашей доменной зоне настроены все 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)
- Настроены все upstream для выше указанных URL, куда они сейчас ведут на этом шаге не важно, позже вы их отредактируете и укажите верные значения.
- В браузере можно открыть любой из этих URL и увидеть ответ сервера (502 Bad Gateway). На текущем этапе выполнение задания это нормально!
Необходимо разработать Ansible роль для установки кластера MySQL.
Рекомендации:
- Имена серверов:
db01.mymind.su
иdb02.mymind.su
- Характеристики: 4vCPU, 4 RAM, Internal address.
Цель:
-
Получить отказоустойчивый кластер баз данных MySQL. Ожидаемые результаты:
-
MySQL работает в режиме репликации Master/Slave.
-
В кластере автоматически создаётся база данных c именем
wordpress
. -
В кластере автоматически создаётся пользователь
wordpress
с полными правами на базуwordpress
и паролемwordpress
.
Вы должны понимать, что в рамках обучения это допустимые значения, но в боевой среде использование подобных значений не приемлимо! Считается хорошей практикой использовать логины и пароли повышенного уровня сложности. В которых будут содержаться буквы верхнего и нижнего регистров, цифры, а также специальные символы!
Необходимо разработать Ansible роль для установки WordPress.
Рекомендации:
- Имя сервера:
app.mymind.su
- Характеристики: 4vCPU, 4 RAM, Internal address.
Цель:
По данным W3techs, WordPress используют 64,7% всех веб-сайтов, которые сделаны на CMS. Это 41,1% всех существующих в мире сайтов. Эту платформу для своих блогов используют The New York Times и Forbes. Такую популярность WordPress получил за удобство интерфейса и большие возможности.
- Виртуальная машина на которой установлен WordPress и Nginx/Apache (на ваше усмотрение).
- В вашей доменной зоне настроена A-запись на внешний адрес reverse proxy:
https://www.mymind.su
(WordPress)
- На сервере
mymind.su
отредактирован upstream для выше указанного URL и он смотрит на виртуальную машину на которой установлен WordPress. - В браузере можно открыть URL
https://www.mymind.su
и увидеть главную страницу WordPress.
Необходимо настроить CI/CD систему для автоматического развертывания приложения при изменении кода.
Рекомендации:
- Имена серверов:
gitlab.mymind.su
иrunner.mymind.su
- Характеристики: 4vCPU, 4 RAM, Internal address.
Построить pipeline доставки кода в среду эксплуатации, то есть настроить автоматический деплой на
сервер app.mymind.su
при коммите в репозиторий с WordPress.
Подробнее об Gitlab CI
Ожидаемый результат:
- Интерфейс Gitlab доступен по https.
- В вашей доменной зоне настроена A-запись на внешний адрес reverse proxy:
https://gitlab.mymind.su
(Gitlab)
- На сервере
mymind.su
отредактирован upstream для выше указанного URL и он смотрит на виртуальную машину на которой установлен Gitlab. - При любом коммите в репозиторий с WordPress и создании тега (например, v1.0.0) происходит деплой на виртуальную машину.
Необходимо разработать Ansible роль для установки Prometheus, Alert Manager и Grafana.
Рекомендации:
- Имя сервера:
monitoring.mymind.su
- Характеристики: 4vCPU, 4 RAM, Internal address.
Цель:
- Получение метрик со всей инфраструктуры.
Ожидаемые результаты:
- Интерфейсы Prometheus, Alert Manager и Grafana доступены по https.
- В вашей доменной зоне настроены A-записи на внешний адрес reverse proxy:
https://grafana.mymind.su
(Grafana)https://prometheus.mymind.su
(Prometheus)https://alertmanager.mymind.su
(Alert Manager)
- На сервере
mymind.su
отредактированы upstreams для выше указанных URL и они смотрят на виртуальную машину на которой установлены Prometheus, Alert Manager и Grafana. - На всех серверах установлен Node Exporter и его метрики доступны Prometheus.
- У Alert Manager есть необходимый набор правил для создания алертов.
- В Grafana есть дашборд отображающий метрики из Node Exporter по всем серверам.
- В Grafana есть дашборд отображающий метрики из MySQL (*).
- В Grafana есть дашборд отображающий метрики из WordPress (*).
Примечание: дашборды со звёздочкой являются опциональными заданиями повышенной сложности их выполнение желательно, но не обязательно.
- Репозиторий со всеми Terraform манифестами и готовность продемонстрировать создание всех ресурсов с нуля.
- Репозиторий со всеми Ansible ролями и готовность продемонстрировать установку всех сервисов с нуля.
- Скриншоты веб-интерфейсов всех сервисов работающих по HTTPS на вашем доменном имени.
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)
- Все репозитории рекомендуется хранить на одном из ресурсов (github.com или gitlab.com).
После второго запуска сертифиты не ругаются.
Запушил в репу содержимое сайта.
Изменил цвет темы (видно по времени)
Урааааа! Полетела птичка ;)