В вашем распоряжении тестовый стенд состоящий из 4 виртуальных маштн под управлением Ubuntu 20.04: Project_1, Project_2, Project_3, Project_Deployer.
Исходные файлы размещены в Git-репозитории:
https://github.com/Jeniston14/wsr-skillcloud
Обратите внимание, что проверка будет производиться путём клонирования вашего репозитория на проверочный стенд, с последующим запуском playbook-сценария. Продумайте то, что необходимо для его выполнения.
После выполнения задания, вам требуется собрать все необходимые файлы, который необходимы для выполнения первой части задания и отправить плейбук с зависимостями на свой GitHub аккаунт.
Создайте в вашем репозитории файл read.me и укажите дополнительную информацию по запуску вашего плейбука. Реализация второй части задания допустима на текущей инфраструктуре, но никто не возражает в качестве её автоматизации.
В первой части вам необходимо реализовать Ansible playbook для автоматизации базовой конфигурации виртуальных машин. Контролирубщим является Project_deployer.
Выполните клонирование Git-репозитория в корневую директорию узла Project_Deployer.
Ansible playbook должен выполнять следующие задачи конфигурации:
- Обновить списки пакетов, выполнить установку curl.
- name: Update package lists, perform curl installation
apt:
name: 'curl'
state: latest
update_cache: true
- Активировать межсетевой экран UFW. Разрешить порты TCP 80,8080,1834
- name: Activate the UFW firewall, allow TCP ports 80,8080,1834
ufw:
rule: allow
port: '{{ item }}'
proto: tcp
state: enabled
loop:
- '22'
- '80'
- '8080'
- '1834'
Так же необходимо разрешить 22 порт, чтобы не потерять доступ к виртуальным машинам на момент выполнения сценария!
- Изменить конфигурационный файл SSH.
- Порт подключения должен быть 1834
- Разрешить авторизацию по публичному ключу
- name: Change the SSH configuration file | Connection port should be 1834
lineinfile:
dest: "/etc/ssh/sshd_config"
regexp: "^Port"
line: 'Port 1834'
- name: Change SSH configuration file | Allow public key authorization
lineinfile:
dest: "/etc/ssh/sshd_config"
line: '{{ item }}'
loop:
- RSAAuthentication yes
- PubkeyAuthentication yes
- AuthorizedKeysFile %h/.ssh/authorized_keys
- Создать пользователей для доступа к виртуальным машинам. Для каждого пользователя необходимо разместить публичный ключ
# ansible-vault decrypt Users/privileges.yml - команда для дешифрования файла
- name: Create users to access virtual machines
ansible.builtin.user:
name: "{{ item.username }}"
password: "{{ item.userpass }}"
loop:
- { username: 'Webdeveloper', userpass: 'S52we9V6QTp7' }
- { username: 'Devopsengineer', userpass: 'dHy6sKGHsj2T' }
- { username: 'Projectmanager', userpass: 'oP92ugMSaCbe' }
- name: A public key must be placed for each user
authorized_key:
user: "{{ item }}"
state: present
key: "{{ id_rsa_pub }}"
loop:
- Webdeveloper
- Devopsengineer
- Projectmanager
vars:
id_rsa_pub: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCovvBkeLIDsvbCyQsMWtPWVgGVKcwAqRONiBJ9JyrVCQbruyMPutatjSlhNpYXKLlP4BXHrGrmAVqeI155li1fkNP5Il7viHRE0HvA3M2extNGDDCiX5f5OlIeT9p/D9OHvWWozLjN2NAGEW24feuzKPZb6Kyv2W3yHbiIU3wt8v50VAIA2+PAfElHp1jplGHQLmYuT6Cc26Pn3WYXZ8t8oU77T6Ki5qDG5V5DVZI3Ym5gqqXXtJYzET9piJvO6qiIcgljtOGlUH9H9QNLEbuF+RKIhL3pFAnF8S79Km2A3j9KFZw6prDR6/VeMffMrNSZLeYztzDGEzm35uz5q6j+qrKsuA4SfpbSOcBwaariOoKpb6JfogoJRgCqxR5O1AKR/Oqhdk6JOlKJk+tIXFmOczH7da/W93f8KGGve4iHRvz/e3vYA7exXIVkD8mc/VmIoT1kqh/uNGia/adnyCgvMpL8JXLJgY2DThpjHslUr0RTEpQJTLTka3D43YV37kM=
- Выполнить установку пакета Docker
- name: Install the Docker package | Install aptitude
apt:
name: aptitude
state: latest
update_cache: true
- name: Install the Docker package | Install required system packages
apt:
pkg:
- apt-transport-https
- ca-certificates
- curl
- software-properties-common
- python3-pip
- virtualenv
- python3-setuptools
state: latest
update_cache: true
- name: Install the Docker package | Add Docker GPG apt Key
apt_key:
url: https://download.docker.com/linux/ubuntu/gpg
state: present
- name: Install the Docker package | Add Docker Repository
apt_repository:
repo: deb https://download.docker.com/linux/ubuntu focal stable
state: present
- name: Install the Docker package | Update apt and install docker-ce
apt:
name: docker-ce
state: latest
update_cache: true
- name: Install the Docker package | Install Docker Module for Python
pip:
name: docker
- Запустить скрипт установки docker-compose
- name: Run the docker-compose installation script
script: ./wsr-skillcloud/docker-compose.sh
- Создайте директорию /skillcloud-nginx, скопируйте файлы необходимые для сборки образов, а также index.html и nginx.conf файлы
- name: Create a directory /skillcloud-nginx
file:
path: /skillcloud-nginx
state: directory
- name: Copying files needed to build images
copy:
src: ./wsr-skillcloud/docker-compose.yml
dest: /skillcloud-nginx
- name: Create a directory /skillcloud-nginx/{site,balance}
file:
path: /skillcloud-nginx/{{ item }}
state: directory
loop:
- site
- balance
- name: Copying files needed to build images
copy:
src: ./wsr-skillcloud/{{ item.src }}
dest: /skillcloud-nginx/{{ item.dest }}/Dockerfile
loop:
- { src: Dockerfile-site, dest: site }
- { src: Dockerfile-balance, dest: balance }
- name: Copying files needed to build images
copy:
src: ./wsr-skillcloud/{{ item.src }}
dest: /skillcloud-nginx/{{ item.dest }}
loop:
- { src: index.html, dest: site}
- { src: nginx.conf, dest: balance }
- Перезапустить SSH и UFW
- name: Restart UFW
service:
name: ufw
state: restarted
- name: Restart SSH
service:
name: sshd
state: restarted
- name: Change ssh port to 1834
set_fact:
ansible_port: 1834
- Выполнить перезагрузку виртуальных машин
- name: Reboot virtual machines
reboot:
Но никто не запрещает автоматизировать данный процесс.
- Выполнить сборку образов на виртуальных машинах, используя Dockerfile в директории skillcloud-nginx.
- Задайте теги при сборке образов, site:site и balance:balance
- name: Change ssh port to 1834
set_fact:
ansible_port: 1834
- name: Change ansible_python_interpreter
set_fact:
ansible_python_interpreter: /usr/bin/python3
- name: Build images on a VM using Dockerfile in the skillcloud-nsinx directory
docker_image:
name: '{{ item.name }}'
build:
path: /skillcloud-nginx/{{ item.path }}
loop:
- { name: site, path: site }
- { name: balance, path: balance }
- Запустить docker-compose.yml для сборки контейнеров.
- name: Pip install docker-compose
pip:
name: docker-compose
- name: Launching docker-compose.yml for container assembly
docker_compose:
project_src: /skillcloud-nginx
files:
- docker-compose.yml
Таким образом, было продемонстрировано задание с последующим его выполнение и разбором основных моментов.
В качестве демонстрации выполнения задания "Модуля С: Автоматизация развёртывания приложения." посредством полной автоматизации, необходимо склонировать данный репозиторий на эталонный стенд и выполнить ряд шагов по запуску сценариев:
Шаг 1. склонировать репозиторий: https://github.com/NewErr0r/Automating_application_deployment.git
# git clone https://github.com/NewErr0r/Automating_application_deployment.git
Шаг 2. Отредактировать файлы "hosts" и "nginx.conf" - указать ip-адреса виртуальных машин эталонного стенда:
# cd Automating_application_deployment
# vi hosts
[app]Project1 ansible_ssh_host={{ IP_address_project_1 }}
Project2 ansible_ssh_host={{ IP_address_project_2 }}
Project3 ansible_ssh_host={{ IP_address_project_3 }}
# vi wsr-skillcloud/nginx.conf
server {{ IP_address_project_1 }}:8080;
server {{ IP_address_project_2 }}:8080;
server {{ IP_address_project_3 }}:8080;
Шаг 3. Выполнить запуск сценария "Автоматизации базовой конфигурации виртуальных машин"
# ansible-playbook playbook_based_configurations_vm.yaml
Дождаться окончания выполнения сценария!Шаг 4. Выполнить запуск сценария "Развёртывание отказоустойчивости веб-сервера на базе Nginx"
# ansible-playbook playbook_deploy_web_server.yaml