One place for hosting & domains

      Ansible

      Установка и настройка Ansible в Ubuntu 18.04


      Введение

      Системы управления конфигурацией разрабатываются для администраторов и операционных отделов с целью ускорить процедуры управления большим количеством серверов. Они позволяют автоматически контролировать много разных систем из единого центра.

      Хотя для систем Linux выпущено много популярных инструментов управления конфигурациями, в том числе Chef и Puppet, эти инструменты сложнее, чем требуется большинству людей. Система Ansible — отличная альтернатива этим инструментам, поскольку имеет простую архитектуру, не требует установки на узлы специального программного обеспечения, использует SSH для выполнения задач автоматизации и файлы YAML для определения деталей выделения ресурсов.

      Это руководство поможет научиться устанавливать Ansible на сервер Ubuntu 18.04 и покажет основы использования этого программного обеспечения.

      Как работает Ansible?

      Система управления Ansible настраивает хосты Ansible (клиентские компьютеры) с узла управления Ansible (компьютер, где установлены и настроены компоненты Ansible).

      Для получения информации с удаленных компьютеров, отправки команд и копирования файлов система использует обычные каналы SSH. В связи с этим, система Ansible не требует установки дополнительного программного обеспечения на клиентские компьютеры.

      Так Ansible упрощает администрирование серверов. Любой сервер с открытым портом SSH можно включить в конфигурацию Ansible, вне зависимости от этапа его жизненного цикла. Это означает, что через Ansible можно администрировать любой компьютер, который можно администрировать через SSH.

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

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

      Предварительные требования

      Для данного обучающего модуля вам потребуется следующее:

      • Один узел управления Ansible: узел управления Ansible — это система, которую мы будем использовать для подключения к хостам Ansible через SSH и управления этими хостами. В качестве узла управления Ansible может выступать локальный компьютер или специально выделенный для Ansible сервер. В настоящем руководстве предполагается, что на узле управления используется операционная система Ubuntu 18.04. Убедитесь, что на узле управления имеется следующее:

        • Пользователь без привилегий root с привилегиями sudo. Для начала вы можете выполнить шаги 2 и 3, указанные в документе «Руководство по начальной настройке сервера с Ubuntu 18.04». Если вы используете в качестве узла управления Ansible удаленный сервер, вы должны выполнить все шаги, перечисленные в этом руководстве. Это позволит настроить на сервере брандмауэр с помощью ufw и активировать внешний доступ для профиля пользователя без привилегий root, что повысит безопасность удаленного сервера.
        • Пара ключей SSH, ассоциированная с этим пользователем. Для настройки выполните шаг 1 руководства «Настройка ключей SSH в Ubuntu 18.04».
      • Один или несколько хостов Ansible: хост Ansible — это любой компьютер, для автоматизации которого настроен узел управления Ansible. В настоящем руководстве предполагается, что ваши хосты Ansible представляют собой удаленные серверы под управлением Ubuntu 18.04. Убедитесь, что каждый хост Ansible соответствует следующим требованиям:

        • Открытый ключ SSH узла управления Ansible добавлен в файл authorized_keys пользователя системы. Это может быть пользователь root или обычный пользователь с привилегиями sudo. Для настройки вы можете выполнить шаг 2 руководства «Настройка ключей SSH в Ubuntu 18.04».

      Шаг 1 — Установка Ansible

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

      Чтобы добавить архив PPA (архив персональных пакетов) официального проекта в список источников вашей системы, запустите на узле управления следующую команду:

      • sudo apt-add-repository ppa:ansible/ansible

      Нажмите ENTER в диалоговом окне, чтобы подтвердить добавление PPA.

      Обновите указатель системного пакета еще раз, чтобы в нем отразились все пакеты, доступные в добавленном архиве PPA:

      После этого обновления вы можете установить программное обеспечение Ansible следующим образом:

      Теперь на узле управления Ansible есть все программное обеспечение, необходимое для администрирования хостов. Затем мы научимся добавлять хосты в файл инвентаризации узла управления, чтобы он мог управлять этими хостами.

      Шаг 2 — Настройка файла инвентаризации

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

      Чтобы изменить заданное по умолчанию содержание файла инвентаризации Ansible, откройте файл /etc/ansible/hosts в предпочитаемом редакторе командной строки на локальном компьютере или на узле управления Ansible:

      • sudo nano /etc/ansible/hosts

      Примечание. В некоторых системах Ansible не создает файл инвентаризации по умолчанию. Если такого файла нет в системе, вы можете создать новый файл в каталоге /etc/ansible/hosts или задать путь к своему файлу инвентаризации с помощью параметра -i при запуске команд и плейбуков.

      Файл инвентаризации, используемый Ansible по умолчанию, содержит ряд примеров, которые вы можете использовать как образец при настройке инвентаризации. В следующем примере определяется группа [servers] с тремя разными серверами, каждый из которых имеет собственный индентификатор: server1, server2 и server3. Обязательно замените выделенные IP-адреса IP-адресами ваших хостов Ansible.

      /etc/ansible/hosts

      [servers]
      server1 ansible_host=203.0.113.111
      server2 ansible_host=203.0.113.112
      server3 ansible_host=203.0.113.113
      
      [servers:vars]
      ansible_python_interpreter=/usr/bin/python3
      

      Подгруппа server:vars задает параметр хоста ansible_python_interpreter, который будет действителен для всех хостов в группе servers. С этим значением параметра удаленный сервер использует исполняемый файл Python 3 /usr/bin/python3, а не /usr/bin/python (Python 2.7), отсутствующий в последних версиях Ubuntu.

      После завершения работы сохраните и закройте файл. Для этого нажмите CTRL+X, а затем Y для подтверждения изменений, а после этого нажмите ENTER.

      Если вы захотите проверить файл инвентаризации, вы можете запустить команду:

      • ansible-inventory --list -y

      Результат будет выглядеть примерно так, только в нем будет показана ваша серверная инфраструктура, определенная в файле инвентаризации:

      Output

      all: children: servers: hosts: server1: ansible_host: 203.0.113.111 ansible_python_interpreter: /usr/bin/python3 server2: ansible_host: 203.0.113.112 ansible_python_interpreter: /usr/bin/python3 server3: ansible_host: 203.0.113.113 ansible_python_interpreter: /usr/bin/python3 ungrouped: {}

      После настройки файла инвентаризации у вас появится все необходимое для тестирования подключения к хостам Ansible.

      Шаг 3 — Тестирование подключения

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

      Для этого руководства мы будем использовать учетную запись root в Ubuntu, поскольку обычно это единственная учетная запись, которая доступна по умолчанию на новых серверах. Если на ваших хостах Ansible уже имеются учетные записи sudo, вам рекомендуется использовать эту учетную запись.

      Вы можете использовать аргумент -u, чтобы задать пользователя дистанционной системы. Если не указано иное, Ansible попытается подключиться от имени текущего пользователя системы на узле управления.

      Запустите на локальном компьютере или узле управления Ansible следующую команду:

      • ansible all -m ping -u root

      Эта команда будет использовать встроенный модуль ping хоста Ansible'для тестирования подключения на всех узлах из файла инвентаризации по умолчанию. При этом выполняется подключение от имени пользователя root. Модуль ping тестирует следующее:

      • доступность хостов;
      • наличие действующих учетных данных SSH;
      • способность хостов запускать модули Ansible с помощью Python.

      Результаты должны выглядеть примерно следующим образом:

      Output

      server1 | SUCCESS => { "changed": false, "ping": "pong" } server2 | SUCCESS => { "changed": false, "ping": "pong" } server3 | SUCCESS => { "changed": false, "ping": "pong" }

      Если это ваше первое подключение к данным серверам через SSH, вы должны будете подтвердить подлинность хостов, к которым подключаетесь через Ansible. Введите yes в диалоговом окне, а затем нажмите ENTER для подтверждения.

      Когда вы получите от хоста ответ «pong», это будет означать, что вы готовы запускать команды и плейбуки Ansible на этом сервере.

      Примечание. Если вам не удается успешно получить ответ от ваших серверов, ознакомьтесь в нашем «Руководстве с полезными советами по Ansible» вы найдете подробную информацию о запуске команд Ansible с разными параметрами подключения.

      Шаг 4 — Запуск ситуативных команд (опционально)

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

      Любая команда, обычно запускаемая на удаленном сервере через SSH, может быть запущена с помощью Ansible на серверах, заданных в файле инвентаризации. Например, вы можете проверить использования дисковых ресурсов всеми серверами с помощью следующей команды:

      • ansible all -a "df -h" -u root

      Output

      server1 | CHANGED | rc=0 >> Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 798M 624K 798M 1% /run /dev/vda1 155G 2.3G 153G 2% / tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/vda15 105M 3.6M 101M 4% /boot/efi tmpfs 798M 0 798M 0% /run/user/0 server2 | CHANGED | rc=0 >> Filesystem Size Used Avail Use% Mounted on udev 2.0G 0 2.0G 0% /dev tmpfs 395M 608K 394M 1% /run /dev/vda1 78G 2.2G 76G 3% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/vda15 105M 3.6M 101M 4% /boot/efi tmpfs 395M 0 395M 0% /run/user/0 ...

      При желании вы можете заменить выделенную команду df -h любой другой командой.

      Также вы можете запускать модули Ansible с помощью ситуативных команд, как мы это делали с модулем ping при тестировании подключения. Например, мы можем использовать модуль apt для установки последней версии vim на все серверы из файла инвентаризации:

      • ansible all -m apt -a "name=vim state=latest" -u root

      Вы можете использовать команды Ansible как для отдельных хостов, так и для групп и подгрупп хостов. Например, вы можете проверить время uptime каждого хоста в группе servers с помощью следующей команды:

      • ansible servers -a "uptime" -u root

      Можно указать несколько хостов, разделив их имена двоеточиями:

      • ansible server1:server2 -m ping -u root

      Дополнительную информацию по использованию Ansible, в том числе по применению плейбуков для автоматизации настройки сервера, можно найти в документе «Справочное руководство по Ansible».

      Заключение

      В этом обучающем модуле вы выполнили установку Ansible и создали файл инвентаризации для выполнения ситуативных команд с узла управления Ansible.

      После подтверждения возможности подключения и управления инфраструктурой с центрального узла управления Ansible вы можете запускать на этих хостах любые команды или плейбуки. При работе с новыми серверами полезно использовать плейбук сообщества «Начальная настройка сервера». Узнать, как писать собственные плейбуки, можно в нашем руководстве Configuration Management 101: Writing Ansible Playbooks.

      Дополнительную информацию по использованию Ansible можно найти в «Руководстве с полезными советами по Ansible».



      Source link

      How to Use Ansible to Install and Set Up WordPress with LAMP on Ubuntu 18.04


      Introduction

      Server automation now plays an essential role in systems administration, due to the disposable nature of modern application environments. Configuration management tools such as Ansible are typically used to streamline the process of automating server setup by establishing standard procedures for new servers while also reducing human error associated with manual setups.

      Ansible offers a simple architecture that doesn’t require special software to be installed on nodes. It also provides a robust set of features and built-in modules which facilitate writing automation scripts.

      This guide explains how to use Ansible to automate the steps contained in our guide on How To Install WordPress with LAMP on Ubuntu 18.04. WordPress is the most popular CMS (content management system) on the internet, allowing users to set up flexible blogs and websites on top of a MySQL backend with PHP processing. After setup, almost all administration can be done through the web frontend.

      Prerequisites

      In order to execute the automated setup provided by the playbook we’re discussing in this guide, you’ll need:

      Before proceeding, you first need to make sure your Ansible control node is able to connect and execute commands on your Ansible host(s). For a connection test, please check step 3 of How to Install and Configure Ansible on Ubuntu 18.04.

      What Does this Playbook Do?

      This Ansible playbook provides an alternative to manually running through the procedure outlined in our guide on How To Install WordPress with LAMP on Ubuntu 18.04.

      Running this playbook will perform the following actions on your Ansible hosts:

      1. Install aptitude, which is preferred by Ansible as an alternative to the apt package manager.
      2. Install the required LAMP packages and PHP extensions.
      3. Create and enable a new Apache VirtualHost for the WordPress website.
      4. Enable the Apache rewrite (mod_rewrite) module.
      5. Disable the default Apache website.
      6. Set the password for the MySQL root user.
      7. Remove anonymous MySQL accounts and the test database.
      8. Create a new MySQL database and user for the WordPress website.
      9. Set up UFW to allow HTTP traffic on the configured port (80 by default).
      10. Download and unpack WordPress.
      11. Set up correct directory ownership and permissions.
      12. Set up the wp-config.php file using the provided template.

      Once the playbook has finished running, you will have a WordPress installation running on top of a LAMP environment, based on the options you defined within your configuration variables.

      How to Use this Playbook

      The first thing we need to do is obtain the WordPress on LAMP playbook and its dependencies from the do-community/ansible-playbooks repository. We need to clone this repository to a local folder inside the Ansible Control Node.

      In case you have cloned this repository before while following a different guide, access your existing ansible-playbooks copy and run a git pull command to make sure you have updated contents:

      • cd ~/ansible-playbooks
      • git pull

      If this is your first time using the do-community/ansible-playbooks repository, you should start by cloning the repository to your home folder with:

      • cd ~
      • git clone https://github.com/do-community/ansible-playbooks.git
      • cd ansible-playbooks

      The files we’re interested in are located inside the wordpress-lamp_ubuntu1804 folder, which has the following structure:

      wordpress-lamp_ubuntu1804
      ├── files
      │   ├── apache.conf.j2
      │   └── wp-config.php.j2
      ├── vars
      │   └── default.yml
      ├── playbook.yml
      └── readme.md
      

      Here is what each of these files are:

      • files/apache.conf.j2: Template file for setting up the Apache VirtualHost.
      • files/wp-config.php.j2: Template file for setting up WordPress’s configuration file.
      • vars/default.yml: Variable file for customizing playbook settings.
      • playbook.yml: The playbook file, containing the tasks to be executed on the remote server(s).
      • readme.md: A text file containing information about this playbook.

      We’ll edit the playbook’s variable file to customize its options. Access the wordpress-lamp_ubuntu1804 directory and open the vars/default.yml file using your command line editor of choice:

      • cd wordpress-lamp_ubuntu1804
      • nano vars/default.yml

      This file contains a few variables that require your attention:

      vars/default.yml

      ---
      #System Settings
      php_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ]
      
      #MySQL Settings
      mysql_root_password: "mysql_root_password"
      mysql_db: "wordpress"
      mysql_user: "sammy"
      mysql_password: "password"
      
      #HTTP Settings
      http_host: "your_domain"
      http_conf: "your_domain.conf"
      http_port: "80"
      

      The following list contains a brief explanation of each of these variables and how you might want to change them:

      • php_modules: An array containing PHP extensions that should be installed to support your WordPress setup. You don’t need to change this variable, but you might want to include new extensions to the list if your specific setup requires it.
      • mysql_root_password: The desired password for the root MySQL account.
      • mysql_db: The name of the MySQL database that should be created for WordPress.
      • mysql_user: The name of the MySQL user that should be created for WordPress.
      • mysql_password: The password for the new MySQL user.
      • http_host: Your domain name.
      • http_conf: The name of the configuration file that will be created within Apache.
      • http_port: HTTP port for this virtual host, where 80 is the default.

      Once you’re done updating the variables inside vars/default.yml, save and close this file. If you used nano, do so by pressing CTRL + X, Y, then ENTER.

      You’re now ready to run this playbook on one or more servers. Most playbooks are configured to be executed on every server in your inventory, by default. We can use the -l flag to make sure that only a subset of servers, or a single server, is affected by the playbook. We can also use the -u flag to specify which user on the remote server we’re using to connect and execute the playbook commands on the remote hosts.

      To execute the playbook only on server1, connecting as sammy, you can use the following command:

      • ansible-playbook playbook.yml -l server1 -u sammy

      You will get output similar to this:

      Output

      PLAY [all] ***************************************************************************************************************************** TASK [Gathering Facts] ***************************************************************************************************************** ok: [server1] TASK [Install prerequisites] *********************************************************************************************************** ok: [server1] … TASK [Download and unpack latest WordPress] ******************************************************************************************** changed: [server1] TASK [Set ownership] ******************************************************************************************************************* changed: [server1] TASK [Set permissions for directories] ************************************************************************************************* changed: [server1] TASK [Set permissions for files] ******************************************************************************************************* changed: [server1] TASK [Set up wp-config] **************************************************************************************************************** changed: [server1] RUNNING HANDLER [Reload Apache] ******************************************************************************************************** changed: [server1] RUNNING HANDLER [Restart Apache] ******************************************************************************************************* changed: [server1] PLAY RECAP ***************************************************************************************************************************** server1 : ok=22 changed=18 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

      Note: For more information on how to run Ansible playbooks, check our Ansible Cheat Sheet Guide.

      When the playbook is finished running, you can go to your web browser to finish WordPress’s installation from there.

      Navigate to your server’s domain name or public IP address:

      http://server_host_or_IP
      

      You will see a page like this:

      WordPress language selection page

      After selecting the language you’d like to use for your WordPress installation, you’ll be presented with a final step to set up your WordPress user and password so you can log into your control panel:

      WordPress Setup

      When you click ahead, you will be taken to a page that prompts you to log in:

      WP login prompt

      Once you log in, you will be taken to the WordPress administration dashboard:

      WP Admin Panel

      Some common next steps for customizing your WordPress installation include choosing the permalinks setting for your posts (can be found in Settings > Permalinks) and selecting a new theme (in Appearance > Themes).

      The Playbook Contents

      You can find the WordPress on LAMP server setup featured in this tutorial in the wordpress-lamp_ubuntu1804 folder inside the DigitalOcean Community Playbooks repository. To copy or download the script contents directly, click the Raw button towards the top of each script.

      The full contents of the playbook as well as its associated files are also included here for your convenience.

      vars/default.yml

      The default.yml variable file contains values that will be used within the playbook tasks, such as the database settings and the domain name to configure within Apache.

      vars/default.yml

      #System Settings
      php_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ]
      
      #MySQL Settings
      mysql_root_password: "mysql_root_password"
      mysql_db: "wordpress"
      mysql_user: "sammy"
      mysql_password: "password"
      
      #HTTP Settings
      http_host: "your_domain"
      http_conf: "your_domain.conf"
      http_port: "80"
      

      files/apache.conf.j2

      The apache.conf.j2 file is a Jinja 2 template file that configures a new Apache VirtualHost. The variables used within this template are defined in the vars/default.yml variable file.

      files/apache.conf.j2

      <VirtualHost *:{{ http_port }}>
         ServerAdmin webmaster@localhost
         ServerName {{ http_host }}
         ServerAlias www.{{ http_host }}
         DocumentRoot /var/www/{{ http_host }}
         ErrorLog ${APACHE_LOG_DIR}/error.log
         CustomLog ${APACHE_LOG_DIR}/access.log combined
      
         <Directory /var/www/{{ http_host }}>
               Options -Indexes
         </Directory>
      
         <IfModule mod_dir.c>
             DirectoryIndex index.php index.html index.cgi index.pl  index.xhtml index.htm
         </IfModule>
      
      </VirtualHost>
      

      files/wp-config.php.j2

      The wp-config.php.j2 file is another Jinja template, used to set up the main configuration file used by WordPress. The variables used within this template are defined in the vars/default.yml variable file. Unique authentication keys and salts are generated using a hash function.

      files/info.php.j2

      <?php
      /**
       * The base configuration for WordPress
       *
       * The wp-config.php creation script uses this file during the
       * installation. You don't have to use the web site, you can
       * copy this file to "wp-config.php" and fill in the values.
       *
       * This file contains the following configurations:
       *
       * * MySQL settings
       * * Secret keys
       * * Database table prefix
       * * ABSPATH
       *
       * @link https://codex.wordpress.org/Editing_wp-config.php
       *
       * @package WordPress
       */
      
      // ** MySQL settings - You can get this info from your web host ** //
      /** The name of the database for WordPress */
      define( 'DB_NAME', '{{ mysql_db }}' );
      
      /** MySQL database username */
      define( 'DB_USER', '{{ mysql_user }}' );
      
      /** MySQL database password */
      define( 'DB_PASSWORD', '{{ mysql_password }}' );
      
      /** MySQL hostname */
      define( 'DB_HOST', 'localhost' );
      
      /** Database Charset to use in creating database tables. */
      define( 'DB_CHARSET', 'utf8' );
      
      /** The Database Collate type. Don't change this if in doubt. */
      define( 'DB_COLLATE', '' );
      
      /** Filesystem access **/
      define('FS_METHOD', 'direct');
      
      /**#@+
       * Authentication Unique Keys and Salts.
       *
       * Change these to different unique phrases!
       * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}
       * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.
       *
       * @since 2.6.0
       */
      define( 'AUTH_KEY',         '{{ ansible_date_time.iso8601_micro | hash('sha256') }}' );
      define( 'SECURE_AUTH_KEY',  '{{ ansible_date_time.iso8601_micro | hash('sha256') }}' );
      define( 'LOGGED_IN_KEY',    '{{ ansible_date_time.iso8601_micro | hash('sha256') }}' );
      define( 'NONCE_KEY',        '{{ ansible_date_time.iso8601_micro | hash('sha256') }}' );
      define( 'AUTH_SALT',        '{{ ansible_date_time.iso8601_micro | hash('sha256') }}' );
      define( 'SECURE_AUTH_SALT', '{{ ansible_date_time.iso8601_micro | hash('sha256') }}' );
      define( 'LOGGED_IN_SALT',   '{{ ansible_date_time.iso8601_micro | hash('sha256') }}' );
      define( 'NONCE_SALT',       '{{ ansible_date_time.iso8601_micro | hash('sha256') }}' );
      
      /**#@-*/
      
      /**
       * WordPress Database Table prefix.
       *
       * You can have multiple installations in one database if you give each
       * a unique prefix. Only numbers, letters, and underscores please!
       */
      $table_prefix = 'wp_';
      
      /**
       * For developers: WordPress debugging mode.
       *
       * Change this to true to enable the display of notices during development.
       * It is strongly recommended that plugin and theme developers use WP_DEBUG
       * in their development environments.
       *
       * For information on other constants that can be used for debugging,
       * visit the Codex.
       *
       * @link https://codex.wordpress.org/Debugging_in_WordPress
       */
      define( 'WP_DEBUG', false );
      
      /* That's all, stop editing! Happy publishing. */
      
      /** Absolute path to the WordPress directory. */
      if ( ! defined( 'ABSPATH' ) ) {
          define( 'ABSPATH', dirname( __FILE__ ) . '/' );
      }
      
      /** Sets up WordPress vars and included files. */
      require_once( ABSPATH . 'wp-settings.php' );
      
      

      playbook.yml

      The playbook.yml file is where all tasks from this setup are defined. It starts by defining the group of servers that should be the target of this setup (all), after which it uses become: true to define that tasks should be executed with privilege escalation (sudo) by default. Then, it includes the vars/default.yml variable file to load configuration options.

      playbook.yml

      ---
      - hosts: all
        become: true
        vars_files:
          - vars/default.yml
      
        tasks:
          - name: Install prerequisites
            apt: name=aptitude update_cache=yes state=latest force_apt_get=yes
            tags: [ system ]
      
          - name: Install LAMP Packages
            apt: name={{ item }} update_cache=yes state=latest
            loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ]
            tags: [ system ]
      
          - name: Install PHP Extensions
            apt: name={{ item }} update_cache=yes state=latest
            loop: "{{ php_modules }}"
            tags: [ system ]
      
        # Apache Configuration
          - name: Create document root
            file:
              path: "/var/www/{{ http_host }}"
              state: directory
              owner: "www-data"
              group: "www-data"
              mode: '0755'
            tags: [ apache ]
      
          - name: Set up Apache VirtualHost
            template:
              src: "files/apache.conf.j2"
              dest: "/etc/apache2/sites-available/{{ http_conf }}"
            notify: Reload Apache
            tags: [ apache ]
      
          - name: Enable rewrite module
            shell: /usr/sbin/a2enmod rewrite
            notify: Reload Apache
            tags: [ apache ]
      
          - name: Enable new site
            shell: /usr/sbin/a2ensite {{ http_conf }}
            notify: Reload Apache
            tags: [ apache ]
      
          - name: Disable default Apache site
            shell: /usr/sbin/a2dissite 000-default.conf
            notify: Restart Apache
            tags: [ apache ]
      
        # MySQL Configuration
          - name: Set the root password
            mysql_user:
              name: root
              password: "{{ mysql_root_password }}"
              login_unix_socket: /var/run/mysqld/mysqld.sock
            tags: [ mysql, mysql-root ]
      
          - name: Remove all anonymous user accounts
            mysql_user:
              name: ''
              host_all: yes
              state: absent
              login_user: root
              login_password: "{{ mysql_root_password }}"
            tags: [ mysql ]
      
          - name: Remove the MySQL test database
            mysql_db:
              name: test
              state: absent
              login_user: root
              login_password: "{{ mysql_root_password }}"
            tags: [ mysql ]
      
          - name: Creates database for WordPress
            mysql_db:
              name: "{{ mysql_db }}"
              state: present
              login_user: root
              login_password: "{{ mysql_root_password }}"
            tags: [ mysql ]
      
          - name: Create MySQL user for WordPress
            mysql_user:
              name: "{{ mysql_user }}"
              password: "{{ mysql_password }}"
              priv: "{{ mysql_db }}.*:ALL"
              state: present
              login_user: root
              login_password: "{{ mysql_root_password }}"
            tags: [ mysql ]
      
        # UFW Configuration
          - name: "UFW - Allow HTTP on port {{ http_port }}"
            ufw:
              rule: allow
              port: "{{ http_port }}"
              proto: tcp
            tags: [ system ]
      
        # WordPress Configuration
          - name: Download and unpack latest WordPress
            unarchive:
              src: https://wordpress.org/latest.tar.gz
              dest: "/var/www/{{ http_host }}"
              remote_src: yes
              creates: "/var/www/{{ http_host }}/wordpress"
            tags: [ wordpress ]
      
          - name: Set ownership
            file:
              path: "/var/www/{{ http_host }}"
              state: directory
              recurse: yes
              owner: www-data
              group: www-data
            tags: [ wordpress ]
      
          - name: Set permissions for directories
            shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type d -exec chmod 750 {} \;"
            tags: [ wordpress ]
      
          - name: Set permissions for files
            shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type f -exec chmod 640 {} \;"
            tags: [ wordpress ]
      
          - name: Set up wp-config
            template:
              src: "files/wp-config.php.j2"
              dest: "/var/www/{{ http_host }}/wordpress/wp-config.php"
            tags: [ wordpress ]
      
        handlers:
          - name: Reload Apache
            service:
              name: apache2
              state: reloaded
      
          - name: Restart Apache
            service:
              name: apache2
              state: restarted
      

      Feel free to modify these files to best suit your individual needs within your own workflow.

      Conclusion

      In this guide, we used Ansible to automate the process of installing and setting up a WordPress website with LAMP on an Ubuntu 18.04 server.

      If you’d like to include other tasks in this playbook to further customize your server setup, please refer to our introductory Ansible guide Configuration Management 101: Writing Ansible Playbooks.



      Source link

      Como Usar o Ansible para Instalar e Configurar o Apache no Ubuntu 18.04


      Introdução

      A automação de servidores desempenha agora um papel essencial na administração de sistemas, devido à natureza descartável dos ambientes das aplicações modernas. Ferramentas de Gerenciamento de configuração tais como o Ansible são normalmente usadas para otimizar o processo de automatização da configuração do servidor, estabelecendo procedimentos padrão para novos servidores e reduzindo também o erro humano associado às configurações manuais.

      O Ansible oferece uma arquitetura simples que não requer a instalação de software especial nos nodes. Ele também fornece um conjunto robusto de recursos e módulos internos que facilitam a criação de scripts de automação.

      Este guia explica como usar o Ansible para automatizar os passos contidos em nosso guia Como Instalar o Servidor Web Apache no Ubuntu 18.04. O servidor HTTP Apache é o servidor web mais utilizado no mundo. Ele fornece muitos recursos poderosos, incluindo módulos dinamicamente carregáveis, suporte robusto à mídia e ampla integração com outros softwares populares.

      Pré-requisitos

      Para executar a configuração automatizada fornecida pelo playbook que estamos discutindo neste guia, você precisará de:

      Antes de continuar, primeiro você precisa garantir que o node de controle do Ansible possa conectar e executar comandos no(s) host(s) Ansible. Para um teste de conexão, verifique o passo 3 de Como instalar e configurar o Ansible no Ubuntu 18.04.

      O que Este Playbook Faz?

      Este Playbook Ansible fornece uma alternativa à execução manual do procedimento descrito em nosso guia sobre Como Instalar o Servidor Web Apache no Ubuntu 18.04.

      A execução deste playbook executará as seguintes ações nos hosts Ansible:

      1. Instalar o aptitude, que é preferido pelo Ansible como uma alternativa ao gerenciador de pacotes apt.
      2. Instalar o Apache.
      3. Criar uma pasta raiz de documentos personalizada para o novo VirtualHost do Apache e configurar uma página de teste.
      4. Ativar o novo VirtualHost do Apache.
      5. Desativar o site padrão do Apache quando a variável disable_default é definida para true.
      6. Configurar o UFW para permitir o tráfego HTTP na porta configurada (80 por padrão).

      Quando o playbook terminar de ser executado, você terá um servidor web em execução no seu node de destino, com base nas opções que você definiu nas variáveis de configuração.

      Como Usar Este Playbook

      A primeira coisa que precisamos fazer é obter o playbook do Apache e suas dependências no repositório do-community/ansible-playbooks. Precisamos clonar esse repositório em uma pasta local dentro do Node de Controle Ansible

      Caso você tenha clonado este repositório antes, enquanto seguia um guia diferente, acesse sua cópia existente do ansible-playbooks e execute um comando git pull para garantir que você tenha conteúdo atualizado:

      • cd ~/ansible-playbooks
      • git pull

      Se esta é sua primeira vez usando o repositório do-community/ansible-playbooks, você deve começar clonando o repositório na sua pasta home com:

      • cd ~
      • git clone https://github.com/do-community/ansible-playbooks.git
      • cd ansible-playbooks

      Os arquivos em que estamos interessados estão localizados dentro da pasta apache_ubuntu1804, que possui a seguinte estrutura:

      apache_ubuntu1804
      ├── files
      │   ├── apache.conf.j2
      │   └── index.html.j2
      ├── vars
      │   └── default.yml
      ├── playbook.yml
      └── readme.md
      

      Aqui está o que cada um desses arquivos representa:

      • files/apache.conf.j2: Arquivo de modelo para configurar o VirtualHost no Apache.
      • files/index.html.j2: Arquivo de modelo para configurar uma página de teste no diretório raiz do servidor web.
      • vars/default.yml: Arquivo de variáveis para personalizar as configurações do playbook.
      • playbook.yml: O arquivo do playbook, contendo as tarefas a serem executadas nos servidores remotos.
      • readme.md: Um arquivo de texto contendo informações sobre este playbook.

      Editaremos o arquivo de variáveis do playbook para personalizar algumas opções. Acesse o diretório apache_ubuntu1804 e abra o arquivo vars/default.yml usando o editor de linha de comando de sua escolha:

      • cd apache_ubuntu1804
      • nano vars/default.yml

      Este arquivo contém algumas variáveis que requerem sua atenção:

      vars/default.yml

      ---
      app_user: "sammy"
      http_host: "your_domain"
      http_conf: "your_domain.conf"
      http_port: "80"
      disable_default: true
      

      A lista a seguir contém uma breve explicação de cada uma dessas variáveis e como você pode alterá-las:

      • app_user: Um usuário remoto não-root no host Ansible que será definido como o proprietário dos arquivos da aplicação.
      • http_host: O seu nome de domínio.
      • http_conf: O nome do arquivo de configuração que será criado no Apache.
      • http_port: Porta HTTP para este virtual host, onde 80 é o padrão.
      • disable_default: Desativar ou não o site padrão que acompanha o Apache.

      Quando terminar de atualizar as variáveis dentro de vars/default.yml, salve e feche este arquivo. Se você usou o nano, faça isso pressionando CTRL + X, Y e, em seguida,ENTER.

      Agora você está pronto para executar este playbook em um ou mais servidores. A maioria dos playbooks está configurada para ser executada em todos os servidores do seu inventário, por padrão. Podemos usar a flag -l para garantir que apenas um subconjunto de servidores ou um único servidor seja afetado pelo playbook. Também podemos usar a flag -u para especificar qual usuário no servidor remoto que estamos usando para conectar e executar os comandos do playbook nos hosts remotos.

      Para executar o playbook apenas no servidor server1, conectando-se como sammy, você pode usar o seguinte comando:

      • ansible-playbook playbook.yml -l server1 -u sammy

      Você obterá uma saída semelhante a esta:

      Output

      PLAY [all] ***************************************************************************************************************************** TASK [Gathering Facts] ***************************************************************************************************************** ok: [server1] TASK [Install prerequisites] *********************************************************************************************************** ok: [server1] => (item=aptitude) TASK [Install Apache] ****************************************************************************************************************** changed: [server1] TASK [Create document root] ************************************************************************************************************ changed: [server1] TASK [Copy index test page] ************************************************************************************************************ changed: [server1] TASK [Set up Apache virtualhost] ******************************************************************************************************* changed: [server1] TASK [Enable new site] ***************************************************************************************************************** changed: [server1] TASK [Disable default Apache site] ***************************************************************************************************** changed: [server1] TASK [UFW - Allow HTTP on port 80] ***************************************************************************************************** changed: [server1] RUNNING HANDLER [Reload Apache] ******************************************************************************************************** changed: [server1] PLAY RECAP ***************************************************************************************************************************** server1 : ok=10 changed=8 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

      Nota: Para obter mais informações sobre como executar os playbooks Ansible, consulte nosso guia de referência Ansible Cheat Sheet Guide.

      Quando o playbook terminar de ser executado, abra seu navegador web e acesse o host ou o endereço IP do servidor, conforme configurado nas variáveis do playbook:

      http://host_ou_ip_do_servidor
      

      Você verá uma página como esta:

      it works page

      Isso significa que a automação foi totalmente executada em seu servidor e o Apache agora está pronto para servir páginas HTML estáticas e ativos colocados no diretório raiz de documentos que você definiu nas variáveis de configuração do playbook.

      O Conteúdo do Playbook

      Você pode encontrar a configuração do servidor Apache apresentada neste tutorial na página apache_ubuntu1804 dentro do repositório DigitalOcean Community Playbooks. Para copiar ou baixar o conteúdo do script diretamente, clique no botão Raw na parte superior de cada script.

      O conteúdo completo do playbook, bem como os arquivos associados, também estão incluídos aqui para sua conveniência.

      vars/default.yml

      O arquivo de variáveis default.yml contém valores que serão usados nas tarefas do playbook, como a porta HTTP e o nome do domínio a serem configurados no VirtualHost do Apache.

      vars/default.yml

      ---
      app_user: "sammy"
      http_host: "your_domain"
      http_conf: "your_domain.conf"
      http_port: "80"
      disable_default: true
      

      files/apache.conf.j2

      O arquivo apache.conf.j2 é um template ou modelo Jinja 2 que configura um novo VirtualHost no Apache. As variáveis usadas neste modelo são definidas no arquivo de variáveis vars/default.yml.

      files/apache.conf.j2

      <VirtualHost *:{{ http_port }}>
         ServerAdmin webmaster@localhost
         ServerName {{ http_host }}
         ServerAlias www.{{ http_host }}
         DocumentRoot /var/www/{{ http_host }}
         ErrorLog ${APACHE_LOG_DIR}/error.log
         CustomLog ${APACHE_LOG_DIR}/access.log combined
      </VirtualHost>
      

      files/index.html.j2

      O arquivo index.html.j2 é outro modelo Jinja, usado para configurar uma página HTML de teste na raiz de documentos do servidor Apache recém-configurado.

      files/index.html.j2

      <html>
         <head>
             <title>Welcome to {{ http_host }} !</title>
         </head>
         <body>
             <h1>Success! The {{ http_host }} virtual host is working!</h1>
         </body>
      </html>
      

      playbook.yml

      O arquivo playbook.yml é onde todas as tarefas desta configuração são definidas. Ele começa definindo o grupo de servidores que deve ser o alvo dessa configuração (all), após o qual ele usa become: true para definir que as tarefas devem ser executadas com escalação de privilégios (sudo) por padrão. Em seguida, inclui o arquivo de variáveis vars/default.yml para carregar as opções de configuração.

      playbook.yml

      ---
      - hosts: all
        become: true
        vars_files:
          - vars/default.yml
      
        tasks:
          - name: Install prerequisites
            apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes
            loop: [ 'aptitude' ]
      
          - name: Install Apache
            apt: name=apache2 update_cache=yes state=latest
      
          - name: Create document root
            file:
              path: "/var/www/{{ http_host }}"
              state: directory
              owner: "{{ app_user }}"
              mode: '0755'
      
          - name: Copy index test page
            template:
              src: "files/index.html.j2"
              dest: "/var/www/{{ http_host }}/index.html"
      
          - name: Set up Apache virtuahHost
            template:
              src: "files/apache.conf.j2"
              dest: "/etc/apache2/sites-available/{{ http_conf }}"
      
          - name: Enable new site
            shell: /usr/sbin/a2ensite {{ http_conf }}
            notify: Reload Apache
      
          - name: Disable default Apache site
            shell: /usr/sbin/a2dissite 000-default.conf
            when: disable_default
            notify: Reload Apache
      
          - name: "UFW - Allow HTTP on port {{ http_port }}"
            ufw:
              rule: allow
              port: "{{ http_port }}"
              proto: tcp
      
        handlers:
          - name: Reload Apache
            service:
              name: apache2
              state: reloaded
      
          - name: Restart Apache
            service:
              name: apache2
              state: restarted
      

      Sinta-se à vontade para modificar este playbook para melhor atender às suas necessidades individuais dentro do seu próprio fluxo de trabalho.

      Conclusão

      Neste guia, usamos o Ansible para automatizar o processo de instalação e configuração do Apache no Ubuntu 18.04.

      Se você deseja incluir outras tarefas neste playbook para personalizar ainda mais sua configuração inicial de servidor, consulte nosso guia introdutório de Ansible em Configuration Management 101: Writing Ansible Playbooks.



      Source link