diff --git a/assets/1.png b/assets/1.png new file mode 100644 index 0000000..028c631 Binary files /dev/null and b/assets/1.png differ diff --git a/assets/2.png b/assets/2.png new file mode 100644 index 0000000..ee2612d Binary files /dev/null and b/assets/2.png differ diff --git a/assets/3.png b/assets/3.png new file mode 100644 index 0000000..77e31e9 Binary files /dev/null and b/assets/3.png differ diff --git a/assets/4.png b/assets/4.png new file mode 100644 index 0000000..1e3d505 Binary files /dev/null and b/assets/4.png differ diff --git a/assets/5.png b/assets/5.png new file mode 100644 index 0000000..8ffb454 Binary files /dev/null and b/assets/5.png differ diff --git a/assets/6.png b/assets/6.png new file mode 100644 index 0000000..f2f72e4 Binary files /dev/null and b/assets/6.png differ diff --git a/assets/7.png b/assets/7.png new file mode 100644 index 0000000..58db834 Binary files /dev/null and b/assets/7.png differ diff --git a/assets/8.png b/assets/8.png new file mode 100644 index 0000000..2e7e83d Binary files /dev/null and b/assets/8.png differ diff --git a/inventory.ini b/inventory.ini new file mode 100644 index 0000000..a160a98 --- /dev/null +++ b/inventory.ini @@ -0,0 +1,5 @@ +[app] +client ansible_host=192.168.0.110 ansible_user=bez1 + +[db] +server ansible_host=192.168.0.122 ansible_user=bez2 diff --git a/playbook.yml b/playbook.yml new file mode 100644 index 0000000..51bb8e1 --- /dev/null +++ b/playbook.yml @@ -0,0 +1,9 @@ +- hosts: db + become: yes + roles: + - mysql + +- hosts: app + become: yes + roles: + - todo diff --git a/report.md b/report.md new file mode 100644 index 0000000..2d81184 --- /dev/null +++ b/report.md @@ -0,0 +1,48 @@ +### Предварительная настройка + +Для выполнения задания создадим три виртуальные машины: +``` +1. bez3@ansihost - на которой будет установлен ansible +2. bez2@server = 192.168.0.122 +3. bez1@client =192.168.0.110 +``` + +И прокидываем ssh соединение между ними. На хосте создаем ssh-ключ и копируем его публичную часть на остальные машины с помощью команд: +``` +ssh-keygen -t ed25519 -C "ansible" +ssh-copy-id -i ~/.ssh/id_ed25519.pub bez2@192.168.0.122 +ssh-copy-id -i ~/.ssh/id_ed25519.pub bez1@192.168.0.110 +``` + +После загрузки ansible создаем простой inventory.ini для проверки связи + +![img.png](assets/1.png) + +И пингуем наши машины. В ответ на запрос получаем pong, значит соединение и аутентификация настроены правильно. + +![img.png](assets/2.png) + +### Создание проекта + +Создаем структуру проекта: + +![img.png](assets/3.png) + +После чего определим роли для клиента и сервера. + +![img.png](assets/4.png) + +Создаем tasks для каждого из них где поочередно прописываем задачи, которые требуется выполнить: + +![img.png](assets/5.png) + +![img.png](assets/6.png) + + +Проект для развертывания готов. Копируем его на `bez3@ansihost` с помощью scp и запускаем playbook. + +![img.png](assets/7.png) + +Как видно из фото выше - запуск прошел успешно. Теперь запустим и проверим веб-приложение перейдя по адресу: http://192.168.0.110:3000/ + +![img.png](assets/8.png) diff --git a/roles/mysql/tasks/main.yml b/roles/mysql/tasks/main.yml new file mode 100644 index 0000000..0d76c1c --- /dev/null +++ b/roles/mysql/tasks/main.yml @@ -0,0 +1,23 @@ +- name: Установить Docker + apt: + name: docker.io + state: present + update_cache: true + +- name: Запустить контейнер MySQL + docker_container: + name: mysql + image: mysql:5.7 + state: started + restart_policy: always + env: + MYSQL_ROOT_PASSWORD: password + MYSQL_DATABASE: todos + ports: + - "3306:3306" + +- name: Разрешить входящий трафик на порт 3306 + ufw: + rule: allow + port: 3306 + proto: tcp diff --git a/roles/todo/tasks/main.yml b/roles/todo/tasks/main.yml new file mode 100644 index 0000000..10cacbc --- /dev/null +++ b/roles/todo/tasks/main.yml @@ -0,0 +1,25 @@ +- name: Установить Docker + apt: + name: docker.io + state: present + update_cache: true + +- name: Загрузить Docker-образ todo-app из Docker Hub + docker_image: + name: antonaleks/101-todo-app + tag: latest + source: pull + +- name: Запустить контейнер todo-app + docker_container: + name: todo + image: antonaleks/101-todo-app:latest + state: started + restart_policy: always + ports: + - "3000:80" + env: + DB_HOST: 192.168.0.122 + DB_USER: root + DB_PASSWORD: password + DB_NAME: todos \ No newline at end of file