bastion_IP = 158.160.119.216 someinternalhost_IP = 10.128.0.20
Подключение к someinternalhost одной коммандой:
ssh -J appuser@158.160.119.216 appuser@10.128.0.20
Для подключения через алиас необходим конфигурационный файл в папке ~/.ssh/config
Host bastion HostName 158.160.119.216 User appuser
Host someinternalhost HostName 10.128.0.20 User appuser ProxyJump bastion
Host * IdentityFile ~/.ssh/appuser
Полезные ссылки :
https://habr.com/ru/companies/cloud4y/articles/530516/ https://wiki.gentoo.org/wiki/SSH_jump_host https://docs.pritunl.com/docs/connecting https://linuxize.com/post/using-the-ssh-config-file/
testapp_IP = 51.250.76.218 testapp_port = 9292 user yc_user
Создал набор параметризуемых параметров:
service_account_key_file folder_id source_image_family ssh_username platform_id image_family image_min_disk_size_gb disk_size_gb zone use_ipv4_nat
https://developer.hashicorp.com/packer/guides/hcl/variables https://developer.hashicorp.com/packer/integrations/hashicorp/yandex/latest/components/builder/yandex
- Выполнил настройку по слайдам дз с 1 по 46
- Создал input переменную для приватного ключа
- Определил input переменную для задания зоны
- Отформатировал файлы используя команду terraform fmt
- Создал файл
terraform.example.tfvars
, - Создал файл lb.tf
- Добавил планировщик и reddit-app-2
- Сделал через count
ДЗ Принципы организации инфраструктурного кода и работа над инфраструктурой в команде на примере Terraform
- Выполнил настройку по слайдам дз с 1 по 46
- Выполнил первое задание
-
Установил ансибл: sudo apt-add-repository ppa:ansible/ansible sudo apt update sudo apt install ansible
-
Настрол файл inventory. reddit-db ansible_host=<ext_ip> ansible_user=ubuntu ansible_private_key_file="/home/appuser/.ssh/ubuntu" Проверка: ansible reddit-db -i ./inventory -m ping Enter passphrase for key '/home/appuser/.ssh/ubuntu': reddit-db | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" }
-
проверил выполнение произвольных комманд: ansible dbserver -m command -a uptime
-
проверил работу с группами хостов: ansible app -m ping
-
выполнил создание inventory.yml ansible all -m ping -i inventory.yml
-
проверка компонентов на серверах: ansible app -m command -a 'ruby -v' ansible app -m command -a 'bundler -v' или обе ansible app -m command -a 'ruby -v; bundler -v' - но это не работает ) ansible app -m shell -a 'ruby -v; bundler -v' - вот так работает
-
Проверка сервера бд ansible db -m command -a 'systemctl status mongod' ansible db -m shell -a 'systemctl status mongod' ansible db -m systemd -a name=mongod или ansible db -m service -a name=mongod
-
Установка git ansible app -u ubuntu -b -K -m shell -a "sudo apt install -y git" Проверка: ansible app -m apt -a name=git
-
Клонирование репозитория в новую директорию: ansible app -m git -a 'repo=https://github.com/express42/reddit.git dest=/home/ubuntu/reddit'
-
Создал и выполнил ansible-playbook clone.yml
- name: Clone hosts: app tasks:
- name: Clone repo git: repo: https://github.com/express42/reddit.git dest: /home/appuser/reddit
-
Удалил и заново залил репозиторий: ansible app -m command -a 'rm -rf ~/reddit' ansible-playbook clone.yml Изменился параметр change потому что заново залился repo
-
Выполнил задания из PDF создал файлы: app.yml db.yml site.yml eddit_app_multiple_plays.yml reddit_app_one_play.yml
-
Создал packer/db.json packer/app.json
- $ ansible-galaxy -h
- cd /ansible mkdir roles
- $ ansible-galaxy init app $ ansible-galaxy init db
- tree db
- В директорию шаблоннов роли ansble/roles/db/templates скопируем шаблонизированный конфиг для MongoDB из директории ansible/templates
- Файл ansible/roles/db/tasks/main.yml
- файл ansible/roles/db/defaults/main.yml
- Создадим в папке roles папку app
- Выполним команду ansible-galaxy init в папке roles/app
- Скопируем секцию tasks в сценарии плейбука ansible/app.yml
- заменить src в модулях copy и template для указания только имени файлов
- Скопируйте файл db_config.j2 из директории ansible/templates в директорию ansible/roles/app/templates/ Файл ansible/files/puma.service скопируем в ansible/roles/app/files/.
- ansible/roles/app/handlers/main.yml ansible/roles/app/defaults/main.yml
- ansible/app.yml ansible/db.yml
- пересоздадим инфраструктуру terraform destroy $ terraform apply -auto-approve=false
- не забудьте изменить внешние IP адреса
- ansible-playbook site.yml --check $ ansible-playbook site.yml
- Управление окружениями
- В директории ansible/environments создадим две директории для наших окружений stage и prod
- инвентори файл ansible/inventory в каждую из директорий окружения environtents/prod и environments/stage
- Деплой ansible-playbook -i environments/prod/inventory deploy.yml
- Создадим директорию group_vars
- ansible/environments/stage/group_vars/all
- Конфигурация окружения prod будет идентичной, за исключением переменной env, определенной для группы all
- ansible/roles/app/defaults/main.yml: ansible/roles/db/defaults/main.yml
- Будем выводить информацию о том, в каком окружении находится конфигурируемый хост
- ansible/roles/app/tasks/main.yml ansible/roles/db/tasks/main.yml
- Организуем плейбуки
- Улучшим файл ansible.cfg
- ansible-playbook playbooks/site.yml
- то же для prod
- Работа с Community-ролями
- с помощью утилиты ansible-galaxy и файла requirements.yml
- Используем роль jdauphant.nginx и настроим обратное проксирование для нашего приложения с помощью nginx.
- Создадим файлы environments/stage/requirements.yml и
environments/prod/requirements.yml
Добавим в них запись вида:
Установим роль:
Комьюнити-роли не стоит коммитить в свой репозиторий, для этого добавим в .gitignore запись: jdauphant.nginx
- src: jdauphant.nginx version: v2.21.1 ansible-galaxy install -r environments/stage/requirements.yml
-
default:
nginx_sites:
- listen 80
- server_name "reddit"
- location / { proxy_pass http://127.0.0.1:порт_приложения; } Добавим эти переменные в stage/group_vars/app и prod/group_vars/app
- Добавьте вызов роли jdauphant.nginx в плейбук app.yml. Применил плейбук site.yml
- Создайте файл vault.key со произвольной строкой ключа. Изменим файл ansible.cfg
- .gitignore
- файл ansible/playbooks/users.yml
- Создадим файл с данными пользователей для каждого окружения credentials.yml
- Зашифруем ansible-vault encrypt environments/prod/credentials.yml ansible-vault encrypt environments/stage/credentials.yml
- P.S. Для редактирования переменных нужно использовать команду ansible-vault edit А для расшифровки: ansible-vault decrypt