Требуемые условия завершения
Задача:
- Project 4 – Разворачивание веб сайта на локальном хостинге
- Проект должен быть выполнен средствами Ansible
- Используйте папку project_4
- В качестве плейбука используйте файл playbook_4.yml в каталоге project_4
- Проект должен включать в себя все необходимые действия по установке и настройке реверс-прокси Nginx и веб сервера Apache с поддержкой PHP и MySQL (MariaDB).
- Проект должен включать в себя все необходимые действия по развертыванию сайта из Git репозитория заказчика.
- Сайт должен быть доступен по протоколам http и https
- Проект должен включать в себя все необходимые действия по импорту базы данных из дампа базы данных заказчика
- Все используемые пароли должны быть выделены в отдельные переменные и зашифрованы
- Проект должен включать в себя все необходимые действия по развертыванию сайта из Git репозитория заказчика.
Варинат реализации:
ANS:
- Из под пользователя user переходим в директорию /opt/ansible:
cd /opt/ansible
- Создаём первый playbook_4.yml в директории project_4:
vim project_4/playbook_4.yml
-
- Содержимое playbook_4.yml:
- в переменную git_repo_url - нужно поместить репозиторий заказчика;
- переменные db_root_password и db_user_password - определены в файле /opt/ansible/include_vars/passwords.yml и зашифрованы с помощь ansible-vault (пароль prof);
- сертификаты в первом Play - забираются с RTR на ANS в директорию /opt/ansible/project_4/file/;
- Содержимое playbook_4.yml:
---
- name: We take the certificate and the private key from the RTR
hosts: rtr
become: true
tasks:
- name: We take the certificate and the private key from the RTR
ansible.builtin.fetch:
src: "/opt/ca/{{ item }}"
dest: "file/{{ item }}"
flat: true
with_items:
- "web.company.prof.crt"
- "web.company.prof.key"
- name: Project 4 – Deploying a website on local hosting
hosts: Astra
become: true
vars:
git_repo_url: "https://github.com/NewErr0r/preparation_company.prof.git"
tasks:
- name: Include vars
ansible.builtin.include_vars:
dir: /opt/ansible/include_vars
- name: Install Apache2
ansible.builtin.apt:
name: apache2
state: present
update_cache: true
- name: Install Git
ansible.builtin.apt:
name: git
state: present
update_cache: true
- name: "Git clone repo {{ git_repo_url }}"
ansible.builtin.git:
repo: "{{ git_repo_url }}"
dest: /var/www/html/company
update: false
- name: Copy the certificate and private key to /etc/ssl
ansible.builtin.copy:
src: "file/{{ item }}"
dest: /etc/ssl
with_items:
- "web.company.prof.crt"
- "web.company.prof.key"
- name: Install MariaDB
ansible.builtin.apt:
name:
- mariadb-server
- mariadb-client
- python3-mysqldb
state: present
update_cache: true
- name: Setting the password for the root user in MariaDB
community.mysql.mysql_user:
name: root
password: "{{ db_root_password }}"
state: present
- name: Creating the "test_db" database
community.mysql.mysql_db:
name: test_db
encoding: utf8
collation: utf8_bin
login_user: root
login_password: "{{ db_root_password }}"
- name: Creating an "user" user in MariaDB
community.mysql.mysql_user:
name: user
password: "{{ db_user_password }}"
priv: "test_db.*:ALL,GRANT"
host: "%"
state: present
login_user: root
login_password: "{{ db_root_password }}"
- name: Importing the database from the git repository dump
community.mysql.mysql_db:
name: test_db
encoding: utf8
collation: utf8_bin
target: /var/www/html/company/test_db.sql.gz
state: import
login_user: user
login_password: "{{ db_user_password }}"
- name: Installing PHP and necessary modules
ansible.builtin.apt:
name:
- php
- php-mysql
state: present
update_cache: true
- name: Create a virtual host file on Apache2
ansible.builtin.template:
src: file/apache2_web.company.prof.conf
dest: /etc/apache2/sites-available/web.company.prof.conf
- name: Create a symbolic link a virtual host file on Apache2
ansible.builtin.file:
src: /etc/apache2/sites-available/web.company.prof.conf
dest: /etc/apache2/sites-enabled/web.company.prof.conf
state: link
- name: Remove file 000-default.conf for Apache2
ansible.builtin.file:
path: /etc/apache2/sites-enabled/000-default.conf
state: absent
- name: Change apache port on 8080
lineinfile:
path: /etc/apache2/ports.conf
regexp: "^Listen 80"
line: "Listen 8080"
- name: Restarted Apache2
ansible.builtin.systemd:
name: apache2
state: restarted
- name: Install Nginx
ansible.builtin.apt:
name: nginx
state: present
update_cache: true
- name: Configure Nginx reverse-proxy
ansible.builtin.copy:
src: file/nginx_web.company.prof
dest: /etc/nginx/conf.d/site.conf
- name: Remove default site Nginx
file:
path: /etc/nginx/sites-enabled/default
state: absent
- name: Restarted Nginx
ansible.builtin.systemd:
name: nginx
state: restarted
- Устанавливаем необходимые для работы ansible - коллекции:
- из под пользователя user
ansible-galaxy collection install ansible.posix
ansible-galaxy collection install community.mysql
- Создаём директорию для хранения внешних переменных:
mkdir include_vars
- Создаём файл для хранений переменных содержащих пароли:
vim include_vars/password.yml
-
- Содержимое:
- Шифруем содерджимое данного файла с помощью ansible-vault:
ansible-vault encrypt include_vars/passwords.yml
-
- В качестве пароля задаём - prof:
- Проверяем шифрование данного файла:
- Создаём директорию для хранения файлов для данного проекта:
mkdir project_4/file
- Создаём конфигурационный файл для веб-сервера Apache2:
vim project_4/file/apache2_web.company.prof.conf
-
- Содержимое:
- Создаём конфигурационный файл для обратного-прокси-сервера используя Nginx:
vim project_4/file/nginx_web.company.prof
-
- Содержимое:
- Таким образом, получается следующая структура для project_4:
- Выполняем запуск playbook-сценария:
- передаём параметр для запроса пароля на дешифрование файла с паролями;
ansible-playbook project_4/playbook_4.yml --ask-vault-pass
-
-
- передаём пароль - prof:
-
-
-
- Результат:
-
- Проверяем работоспособность веб-сервера Apache2 на порту 8080:
- Проверяем корректность импорта БД из дампа - нажимаем на Search DB table:
- если данные не импортированы из дампа - должна быть ошибка;
- Проверяем работоспособность обратного-прокси сервера на Nginx - по http:
- Проверяем работоспособность обратного-прокси сервера на Nginx - по https:
Последнее изменение: четверг, 4 июля 2024, 15:01