Поиск по сайту:

Руководство по Ansible: создание Ansible Playbook для стека LEMP


На этой странице

  1. Шаг 1. Настройка проекта Ansible Playbook
  2. Шаг 2. Создание ролей Ansible для структуры каталогов
  3. Шаг 3. Настройте hosts и site.yml
  4. Шаг 3. Настройка общих ролей
  5. Шаг 4. Настройка веб-ролей
  6. Шаг 5. Настройка ролей базы данных
  7. Шаг 6. Запустите Ansible Playbook
  8. Шаг 7. Тестирование
  9. Справочник

Ansible — это простой инструмент автоматизации, который автоматизирует развертывание программных приложений, выделение ресурсов в облаке и управление конфигурацией. Это инструмент оркестрации серверов, который помогает вам управлять и контролировать большое количество серверных узлов из единого места, называемого Control Machines. Ansible был создан Майклом ДеХааном в 2012 году и написан на Python и Powershell.

В этом руководстве мы собирались показать вам, как создать базовый Ansible Playbook для подготовки стека LEMP на сервере Ubuntu 18.04. Вы узнаете, как создать базовый Ansible Playbook, который можно масштабировать для других приложений проекта PHP, таких как WordPress, Nextcloud и т. д.

Предпосылка

  • 2 ОС Ubuntu.
    • 10.5.5.20   доступный
    • 10.5.5.26   положение

    Что мы будем делать:

    1. Настройка проекта Ansible Playbook
    2. Создание структуры каталогов ролей Ansible Playbook
    3. Настройка hosts и site.yml
    4. Настройка общих ролей – базовая настройка
    5. Настройка веб-ролей — конфигурация Nginx и PHP-FPM
    6. Настройка ролей базы данных — конфигурация базы данных MySQL
    7. Тестирование

    Шаг 1. Настройка проекта Ansible Playbook

    Ansible Playbook — это набор инструкций, которые вы отправляете для запуска на одном или группе серверов. Он представляет собой ansible-provisioning, где автоматизация определяется как задачи, и все задания, такие как установка пакетов, редактирование файлов, будут выполняться модулями ansible.

    Ansible Playbook содержит некоторую базовую конфигурацию, включая информацию о хостах и пользователях серверов предоставления, список задач, которые будут реализованы на серверах предоставления, шаблоны и пользовательские конфигурации, а также группу переменных, входящих в состав шаблонов и задач.

    Во-первых, создайте директорию основного проекта на машине с ansible-control. В главном каталоге проекта будут храниться все наши каталоги, файлы и конфигурации playbook.

    Создайте каталог проекта Ansible с именем project-lemp и войдите в него.

    mkdir project-lemp/
    cd project-lemp

    Теперь создайте новый файл конфигурации hosts и site.yml, затем создайте новый каталог с именем roles.

    touch hosts site.yml
    mkdir -p roles/

    Подробно о конфигурациях:

    hosts — это файл инвентаризации, который содержит фрагменты информации об управляемых серверах с помощью ansible. Это позволяет вам создать группу серверов, что упрощает управление и масштабирование самого файла инвентаризации. Файл инвентаризации может быть создан в различных форматах, включая форматы INI и YAML.

    site.yml — основной файл playbook, в котором содержится информация о том, какая группа хостов будет управляться с использованием наших доступных ролей.

    роли — это группа игр Ansible, которые будут использоваться для предоставления сервера. Роли ansible имеют свои собственные структуры каталогов, каждая роль будет содержать каталоги, такие как задачи, обработчики, переменные и т. д.

    Шаг 2. Создание ролей Ansible для структуры каталогов

    На этом этапе мы собирались создать каталог ролей ansible с помощью команды ansible-galaxy. Мы создадим две роли, называемые общими ролями и веб-ролями.

    Внутри каталога project-lemp перейдите в каталог roles.

    cd roles/

    Создайте каталог структуры ролей и файлы для общих и веб-ролей, выполнив приведенную ниже команду ansible-galaxy.

    ansible-galaxy init common
    ansible-galaxy init web
    ansible-galaxy init db

    После этого проверьте все доступные структуры каталогов ролей, используя следующую команду.

    tree .

    Вам будет показан результат, как показано ниже.

    Шаг 3 - Настройте hosts и site.yml

    Файл hosts будет содержать список и группу серверов, управляемых Ansible. Для этого руководства мы создадим группу с именем lemp с участником с именем server01 и IP-адресом 10.5.5.26.

    Отредактируйте файл hosts с помощью редактора vim.

    vim hosts

    Вставьте конфигурацию ниже.

    [lemp]
    server01 ansible_host=10.5.5.26

    Сохранить и закрыть.

    Затем отредактируйте файл конфигурации site.yml.

    vim site.yml

    Вставьте конфигурации ниже.

    ---

    - hosts: lemp
      remote_user: hakase
      become: yes

      roles:
        - common
        - web
        - db

    Сохранить и закрыть.

    Шаг 3. Настройка общих ролей

    На этом этапе собирались настроить общие роли. А для этого нам нужно создать список задач, которые мы собираемся делать.

    Ниже список задач, которые собирались делать на общих ролях.

    1. Изменить репозиторий
    2. Обновить репозиторий
    3. Обновите пакеты до последней версии
    4. Настройте часовой пояс сервера

    Теперь перейдите в общий каталог и отредактируйте конфигурацию tasks/main.yml.

    cd common/
    vim tasks/main.yml

    Создайте задачу для изменения репозитория, и мы будем использовать модуль копирования, который скопирует базовый sources.list из каталога файлов на удаленный хост /etc/apt/.

    - name: Change repository Ubuntu 18.04Step 4 - Setup 'web' Roles
      copy:
        src: sources.list
        dest: /etc/apt/
        backup: yes

    Создайте задачу для обновления репозитория и обновите все пакеты до последней версии с помощью модуля apt.

    - name: Update repository and Upgrade packages
      apt:
        upgrade: dist
        update_cache: yes

    Теперь создайте задачу для настройки системного часового пояса с помощью модуля ansible timezone.

    - name: Setup timezone to Asia/Jakarta
      timezone:
        name: Asia/Jakarta
        state: latest

    Сохранить и закрыть.

    После этого создайте новый репозиторий конфигурации sources.list внутри каталога файлов.

    vim files/sources.list

    Выберите ближайший к вашему серверу репозиторий, ниже мой.

    deb http://buaya.klas.or.id/ubuntu/ bionic main restricted
    deb http://buaya.klas.or.id/ubuntu/ bionic-updates main restricted
    deb http://buaya.klas.or.id/ubuntu/ bionic universe
    deb http://buaya.klas.or.id/ubuntu/ bionic-updates universe
    deb http://buaya.klas.or.id/ubuntu/ bionic multiverse
    deb http://buaya.klas.or.id/ubuntu/ bionic-updates multiverse
    deb http://buaya.klas.or.id/ubuntu/ bionic-backports main restricted universe multiverse
    deb http://buaya.klas.or.id/ubuntu/ bionic-security main restricted
    deb http://buaya.klas.or.id/ubuntu/ bionic-security universe
    deb http://buaya.klas.or.id/ubuntu/ bionic-security multiverse

    Сохранить и закрыть.

    наконец, завершена настройка общих ролей.

    Шаг 4. Настройка веб-ролей

    На этом этапе мы собирались настроить веб-роли. Он выполнит некоторые задачи, включая установку веб-сервера Nginx, PHP-FPM с некоторыми базовыми расширениями и настройку PHP-FPM с Nginx.

    Ниже приведены подробные задачи, которые мы будем выполнять на веб-ролях:

    1. Установите Nginx
    2. Установить PHP-FPM
    3. Настроить php.ini
    4. Создание виртуального хоста
    5. Добавить файл phpinfo

    Перейдите в веб-каталог и отредактируйте файл tasks/main.yml.

    cd web/
    vim tasks/main.yml

    Создайте первую задачу для установки nginx с помощью модуля apt.

    - name: Install Nginx
      apt:
        name: nginx
        state: latest

    Теперь создайте задачу по установке PHP-FPM с некоторыми базовыми расширениями. А для установки нескольких пакетов мы можем использовать формат списка Python, как показано ниже.

    - name: Instal PHP-FPM
      apt:
        name: ['php','php-fpm','php-common','php-cli','php-curl']
        state: latest

    Далее мы добавим новые строки в конфигурацию php.ini с помощью модуля blockinfile. И в конце строки уведомим ансибл о перезапуске службы php-fpm после настройки файла php.ini.

    - name: Configure php.ini
      blockinfile:
        dest: /etc/php/{{ php_version }}/fpm/php.ini
        block: |
          date.time = Asia/Jakarta
          cgi-fix_pathinfo = 0
        backup: yes
      notify: restart php-fpm

    Теперь мы скопируем конфигурацию виртуального хоста nginx, используя модуль шаблона. Модуль шаблона скопирует конфигурацию из каталога шаблонов на удаленный сервер. Мы собираемся скопировать шаблон виртуального хоста jinja2 vhost.j2 в каталог /etc/nginx/sites-enabled/, а последним мы уведомим ansible о перезапуске службы nginx.

    - name: Create Nginx virtual host
      template:
        src: vhost.j2
        dest: /etc/nginx/sites-enabled/vhost-{{ domain_name }}
      notify: restart nginx

    После этого создадим новые задачи на создание каталога web-root с помощью файлового модуля и скопируем в него шаблон index.php.

    - name: Create web-root directory
      file:
        path: /var/www/{{ domain_name }}
        state: directory

    - name: Upload index.html and info.php files
      template:
        src: index.php.j2
        dest: /var/www/{{ domain_name }}/index.php

    Сохранить и закрыть.

    Теперь собирались настроить обработчики перезапуска службы nginx и php-fpm. Отредактируйте конфигурацию handlers/main.yml с помощью редактора vim.

    обработчики vim/main.yml

    Вставьте конфигурации ниже.

    - name: restart nginx
      service:
        name: nginx
        state: restarted
        enabled: yes

    - name: restart php-fpm
      service:
        name: php{{ php_version }}-fpm
        state: restarted
        enabled: yes

    Сохранить и закрыть.

    Далее мы отредактируем конфигурацию vars/main.yml. В верхней части конфигураций вы увидите переменные конфигурации {{ php_version }} и {{ domain_name }}. Эти переменные представляют нашу настройку среды для версии php и имя домена, которое будет использоваться. Переменная делает ansible более пригодным для повторного использования, потому что нам просто нужно отредактировать конфигурацию переменной vars/main.yml, а не базовую конфигурацию.

    Отредактируйте конфигурацию переменных vars/main.yml с помощью редактора vim.

    vim vars/main.yml

    Вставьте конфигурации ниже.

    php_version: 7.2
    domain_name: hakase-labs.io

    Сохранить и закрыть.

    Теперь мы создадим конфигурации шаблонов jinja2 index.php.j2 и vhost.j2 в каталоге templates/.

    vim templates/index.php.j2

    Вставьте конфигурацию ниже.

    <html>
    <body>

    <h1><center>index.html for domain {{ domain_name }}</center></h1>

    <p>
    <p>

    <?php
    phpinfo();
    ?>

    </body>
    </html>

    Сохранить и закрыть.

    После этого создайте шаблон для конфигурации виртуального хоста nginx vhost.j2.

    vim templates/vhost.j2

    Вставьте конфигурации ниже.

    server {
        listen 80;
        listen [::]:80;

        root /var/www/{{ domain_name }};
        index index.php index.html index.htm index.nginx-debian.html;

        server_name {{ domain_name }};

        location / {
            try_files $uri $uri/ =404;
        }

        # pass PHP scripts to FastCGI server
        #
            location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php/php{{ php_version }}-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
            }

    }

    Сохраните и закройте конфигурацию, и настройка веб-ролей завершена.

    Шаг 5 — Настройка ролей базы данных

    На этом этапе мы собирались настроить роли db для установки и настройки базы данных MySQL.

    Ниже приведены подробные задачи, которые будут выполняться на ролях базы данных.

    1. установить mysql
    2. Создать базу данных MySQL
    3. Создать пользователя MySQL
    4. перезапустить mysql

    Перейдите в каталог db и отредактируйте конфигурацию tasks/main.yml.

    cd db/
    vim tasks/main.yml

    Теперь установите пакеты MySQL, используя модуль apt и формат списка python для установки нескольких пакетов.

    - name: Install MySQL
      apt:
        name: ['mysql-server','mysql-client','python-mysqldb']
        state: latest
      notify: restart mysql

    Затем создайте новые задачи для создания базы данных MySQL и пользователя, затем предоставьте все привилегии пользователя для базы данных.

    - name: Create database
      mysql_db:
        name: '{{ db_name }}'
        state: present

    - name: Create user for the database
      mysql_user:
        name: '{{ db_user }}'
        password: '{{ db_pass }}'
        encrypted: yes
        priv: '{{ db_name }}.*:ALL'
        state: present

    Сохранить и закрыть.

    Затем отредактируйте конфигурацию handlers/main.yml.

    vim handlers/main.yml

    Вставьте конфигурацию задачи для перезапуска службы MySQL.

    - name: restart mysql
      service:
        name: mysql
        state: restarted
        enabled: yes

    Сохранить и закрыть.

    После этого отредактируйте конфигурацию переменной vars vars/main.yml.

    vim vars/main.yml

    Вставьте эти переменные для базы данных MySQL и конфигурации пользователя ниже.

    db_name: hakase-db
    db_user: hakase
    db_pass: '*C960D382DB42E57D3BAC33891CF87900DCB1A869'

    Сохранить и закрыть.

    Переменная db_pass имеет зашифрованный пароль MySQL, и вы можете сгенерировать зашифрованный пароль MySQL с помощью онлайн-инструментов.

    Шаг 6 — Запустите Ansible Playbook

    Перейдите в каталог проекта Ansible.

    cd project-lemp/

    Запустите команду ansible-playbook ниже.

    ansible-playbook -i hosts site.yml

    Теперь ansible будет запускать все роли, которые мы назначаем хосту. Когда он будет завершен, вам будет показан результат, как показано ниже.

    Убедитесь, что у вас нет ошибки.

    Шаг 7 — Тестирование

    Откройте веб-браузер и введите доменное имя в адресной строке http://hakase-labs.io.

    И вам будет показана индексная страница с phpinfo, как показано ниже.

    PHP-FPM и Nginx работают.

    Затем вернитесь к серверному терминалу и войдите на сервер MySQL, используя пользователя и пароль, которые мы создали в переменной ролей mysql.

    mysql -u hakase -p
    PASSWORD: hakasepass

    проверьте список баз данных, принадлежащих пользователю.

    show databases;

    И вы войдете в оболочку MySQL, и вам будет показана база данных с именем hakase-db в списке.

    Наконец, Ansible Playbook для установки и настройки стека LEMP был создан и успешно протестирован.

    Ссылка