dsapozhnikov76 Infra repository
- Исследовать способ подключения к someinternalhost в одну команду:
ssh -i ~/.ssh/appuser -J [email protected] [email protected]
- Вариант решения для подключения из консоли при помощи команды вида ssh someinternalhost из локальной консоли рабочего устройства:
Добавить файл конфигурации ~/.ssh/config:
Host bastion
Hostname 51.250.80.65
User appuser
Port 22
IdentityFile ~/.ssh/appuser
Host someinternalhost
User appuser
ProxyCommand ssh bastion -W 10.128.0.6:22
- Подключение через VPN
bastion_IP = 51.250.80.65
someinternalhost_IP = 10.128.0.6
- Доп. задание - Подключение сертификата LetsEncrypt
Адрес - https://51-250-80-65.sslip.io/
testapp_IP = 51.250.78.161
testapp_port = 9292
- Установил terraform
- Добавил в main.tf провайдера Yandex
- Cделал terraform init
- Собрал файл ~/.terraformrc со ссылкой на mirror провайдера
provider_installation {
network_mirror {
url = "https://terraform-mirror.yandexcloud.net/"
include = ["registry.terraform.io/*/*"]
}
direct {
exclude = ["registry.terraform.io/*/*"]
}
}
-
Выполнил настройку main.tf чтобы создавать VM
- Сделал создание VM по образу reddit-base
- Добавил provisioning, connection с пользователем appuser
- Проверил, что VM создается и доступен
-
Задание со звездой, добавил балансер, переделал main.tf на создание 2 VM
- Удалите из папки terraform файлы main.tf, outputs.tf, terraform.tfvars, variables.tf, так как они теперь перенесены в stage и prod СДЕЛАНО
- Параметризируйте конфигурацию модулей насколько считаете нужным СДЕЛАНО
- Отформатируйте конфигурационные файлы, используя команду terraform fmt СДЕЛАНО
- Настройте хранение стейт файла в удаленном бекенде (remote backends) для окружений stage и prod, используя Yandex Object Storage в качестве бекенда. Описание бекенда нужно вынести в отдельный файл backend.tf СДЕЛАНО
- Настроил ansible и окружение
- Развернул stage
- Создал инвентарные файлы
- Создал ansible.cfg
- Перевел инвентарный файл в формат YAML
- Проверил работоспособность ansible с различными типа команд
- Создал плэйбук и проверил
В первом случае после выполнения плэйбука результат работы
ok=2 changed=0
то есть никаких изменений не было сделано, так как по указанному маршруту
репозиторий уже был клонирован.
После удаления каталога ~/reddit
на appserverб при выполнении плэйбука, результат
ok=2 changed=1
, то есть репозиторий reddit был снова клонирован
1. Использовал плейбуки, хендлеры и шаблоны для конфигурации окружения и деплоя тестового приложения.
При этом применялись следующие варианты подходов:
В данном подходе создан плейбук reddit_app_one_play.yml с одним сценарием, содержащей конфигурирование MongoDB, деплой приложения и конфигурирование приложения.
В данном подходе создан плейбук reddit_app_multiple_plays.yml с тремя сценариями, содержащими, соответственно, конфигурирование MongoDB, деплой приложения и конфигурирование приложения.
В данном подходе были созданы 3 плейбука - db.yml, deploy.yml и app.yml, которые содержат, соответственно, сценарии по конфигурированию MongoDB, деплою приложения и конфигурированию приложения.
- Разбил логику на роли: app, db
- Сделал два окружения: stage, prod
- Добавил nginx-роль для работы приложения на 80 порту
- Зашифровал плейбук с созданием пользователей
Выполнено основное задание.
Так как изначально использовал пользователя ubuntu делаю без переменной {{ deploy_user }}
Задание * выполнено
Добавлениe в Vargantfile extra_vars
ansible.extra_vars = {
'nginx_sites' => { 'default' => ['listen 80','server_name "reddit"','location / {proxy_pass http://127.0.0.1:9292;}'] }
}