- Установил Vagrant а virtualbox уже была ))
- Описал характеристики VMs в
Vagrantfile
. Командыvagrant up
.vagrant status
.vagrant destroy
... - Используя Ansible провижинер проверил работу ролей плейбуков
playbooks/site.yml
- Настроил Vagrant для корректной работы проксирования приложения с помощью nginx
- Использование виртуальной среды. Настройка: python 2.7
pip install virtualenv
.mkdir python-venv && cd python-venv
.virtualenv env
.source env/bin/activate
molecule create
- Создадать VM.molecule converge
- применить кофигурацию.molecule list
- Посмотрим список созданных инстансов.molecule verify
- прогнать тестыmolecule init scenario --scenario-name default -r db -d vagrant
- создает заготовку для роли db с тестами на основе cookiecutter-шаблона
- Тест открытого порта
def test_open_port(host): assert host.socket("tcp://0.0.0.0:27017").is_listening
- не выполнил
- Создал роли app db.
ansible-galaxy init app
иansible-galaxy init db
- Создал окружения stage prod и перенес в них файл
inventory
. теперь при запускеansible-playbook -i environments/prod/inventory deploy.yml
видно с каким окруженим работаем - Cконфигурировал окружения stage и prod
- Организовал плейбуки
playbooks
. Перенес то что не относится к текущей конфигурации в каталогold
- Добавил в terraform открытие 80 порта.
- Установил роль jdauphant.nginx из Ansible Galaxy
ansible-galaxy install -r environments/stage/requirements.yml
. Добавил вызов ролиjdauphant.nginx
в плейбук app.yml. - Применил
ansible-playbook playbooks/site.yml
. Теперь приложение доступно по 80 порту - Vault настроил ключ. Шифрую
ansible-vault encrypt environments/prod/credentials.yml
иansible-vault encrypt environments/stage/credentials.yml
выполнил
ansible-playbook reddit_app.yml --check --limit db
"пробный прогон" плейбука c ограничиваем группу хостов- Применим наш плейбук
ansible-playbook reddit_app.yml --limit db
ansible-playbook reddit_app.yml --check --limit app --tags app-tag
"пробный прогон" плейбука c ограничиваем группу хостов- Один плейбук, несколько сценариев. Применим наш плейбук с тегом
app-tag
для группы хостов appansible-playbook reddit_app.yml --limit app --tags app-tag
- Выполняем деплой
ansible-playbook reddit_app.yml --limit app --tags deploy-tag
- Несколько плейбуков
app.yml db.yml deploy.yml
. Вsite.yml
импортируем их. Запускansible-playbook site.yml
- Смог нагуглить
plugin: gcp_compute
Потому что все работает из коробки. В других динамических не смог разобратся. - Полная детализация инвентори
ansible-inventory -i inventory.gcp.yml --list
- Создал два плейбука аналогичные bash-скриптам которые используются в Packer
packer_app.yml
- устанавливает Ruby и Bundler иpacker_db.yml
- добавляет репозиторий MongoDB - Интегрировал Ansible в Packer и собрал новые образы
- Проверил работу
ansible-playbook site.yml --check
затем применилansible-playbook site.yml
- При запуске плейбука
nsible-playbook clone.yml
плейбук выполнился без ошибок но изменений не произошло, потому что каталог /home/appuser/reddit уже был на appserver. - При удалении
rm -rf ~/reddit
и запуске плейбукаnsible-playbook clone.yml
плейбук выполнился без ошибок и склонировал наш репозиторий
- Создал inventory.json, добился успешного выполнения
ansible all -m ping
- Добавил параметры в файл ansible.cfg для работы с инвентори в формате JSON
- Определиk ресурс файервола и импортировал существующую инфраструктоуру файервола для 22 порта
- Создал два образа reddit-db-base и reddit-app-base
- Разбил конфиг main.tf на 2 конфига app.tf и db.tf
- Разбил конфигурацию на модули
- Создал и проверил модул vpc который определяет настройки файервола в рамках сети
- Создал две среды Stage и Prod
- Используя модуль storage-bucket из ресстра модулей создал два баккета
"terraform2-prod", "terraform2-stage"
- настроил и првоерил хранение стейт файла в удаленном бекенде для окружений stage и prod
- Пересобрал образ reddit-db-base с разрешением подлючения к базе со всех ip
- Сделал деплой прилождения в модуле app
- Добавил балансировщик к модулю app
count
- количество инстансов
Outputs:
app_external_ip = [
35.187.165.115,
34.76.236.136
]
app_frontend_ip = 35.205.146.159
db_external_ip = 35.195.227.86
db_local_ip = 10.132.0.3
How to set environment variable in systemd service Template Provider
- Установил terraform
- Создал конфигурационные файлы terrraform
- Определил input переменную для приватного ключа и зоны
- Определил output переменную с внешним IP созданной виртуальной машины (использовал outputs.tf)
- Отформатировал все конфигурационные файлы с помощью команды
terraform fmt
- Создал файл terraform.tfvars.example
- Добавил ssh ключи пользователей в метаданные проекта google_compute_project_metadata
- После добавления appuser_web через веб интерфейсе, при выполнении
terraform apply
, пользователь удаляется
- создан фаил lb.tf с балансировщиком (Проблемма в том что у каждого инстанса своя БД.)
- Добавлена переменаня count - количество запускаемх инстансов
Пример Output
Outputs:
app_external_ip = [
35.187.97.63,
34.76.161.148
]
app_frontend_ip = 35.195.23.92
- Создал packer шаблон ubuntu16.json
- параметризировал созданный шаблон, используя пользовательские переменные variables.json
- Создал образы:
Создаем базовый образ reddit-base (ruby mongo)
packer build --var-file variables.json ubuntu16.json
Создаем фулл образ reddit-full (ruby mongo app)
packer build --var-file variables.json immutable.json
- Для автомотического создания инстанса create-reddit-vm.sh
gcloud compute instances create reddit-full \
--image=reddit-full-1553653135 \
--tags puma-server \
--restart-on-failure \
--machine-type=f1-micro \
проверить можно тут http://146.148.24.75:9292
** Что устанавливалось в процессе учебы gcp ansible terraform
- 13 virtualenv и virtualenvwrapper sudo pip install -r requirements.txt --ignore-installed