Задача:

  • Project 4 – Разворачивание веб сайта на локальном хостинге
    • Проект должен быть выполнен средствами Ansible
    • Используйте папку project_4
    • В качестве плейбука используйте файл playbook_4.yml в каталоге project_4
    • Проект должен включать в себя все необходимые действия по установке и настройке реверс-прокси Nginx и веб сервера Apache с поддержкой PHP и MySQL (MariaDB).
      • Проект должен включать в себя все необходимые действия по развертыванию сайта из Git репозитория заказчика.
        • Сайт должен быть доступен по протоколам http и https
      • Проект должен включать в себя все необходимые действия по импорту базы данных из дампа базы данных заказчика
      • Все используемые пароли должны быть выделены в отдельные переменные и зашифрованы

Варинат реализации:

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/;
---
- 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