Введение
В настоящее время серверы приходится создавать и уничтожать очень часто. Это связано с тем, что в одни периоды времени серверы испытывают большую нагрузку, а в другие нагрузка снижается, что приводит к нерациональному использованию системных ресурсов. Типичным примером являются сайты электронной коммерции в праздничные сезоны, привлекающие большой трафик. Когда приложение по своей природе должно быть масштабируемым, всегда возникает необходимость в инструментах управления конфигурацией, чтобы упростить общий процесс создания серверов. Ansible — это отличный инструмент управления конфигурацией, который автоматизирует создание серверов с использованием стандартных процедур, снижая вероятность человеческих ошибок.
Ansible не требует установки специального программного обеспечения на узлах серверов. В нем есть все инструменты, необходимые для написания, сборки и автоматизации сценариев. В этом руководстве подробно описывается, как использовать Ansible для автоматизации шагов, описанных в нашем Как настроить сервер Ubuntu руководстве.
Предварительные требования
Для выполнения этого руководства мы будем использовать Ubuntu 20.04. Кроме того, вам понадобятся:
-
Управляющий узел Ansible: машина с Ubuntu, на которой запущена последняя версия Ubuntu. На этой машине должен быть установлен и запущен исполняемый файл Ansible. Эта машина должна иметь возможность подключаться к узлам Ansible. Для этих подключений необходимо использовать ключи SSH. Чтобы избежать проблем при подключении, убедитесь, что на управляющем узле Ansible включен брандмауэр. Если вам нужна помощь, ознакомьтесь с нашей статьей Установка и настройка Ansible на Ubuntu 20.04 в блоге.
-
Хосты Ansible: требуется один или несколько хостов для подключения. Хосты — это, по сути, управляемые узлы в Ansible. Это должны быть серверы Ubuntu.
Функции плейбука Ansible
Вы можете вручную выполнить все описанные ниже шаги. Однако мы автоматизируем это выполнение. При запуске этого плейбука на вашей машине будут выполнены следующие операции:
-
Будет установлен aptitude, который предпочтителен для Ansible в качестве менеджера пакетов.
-
Будет создана административная группа wheel с правами sudo без ввода пароля.
-
Будет создан новый пользователь sudo.
-
Локальный SSH-ключ будет скопирован в authorized_keys. Он будет использоваться для нового административного пользователя на удаленном хосте.
-
Будет отключена аутентификация по паролю для пользователя root.
-
Будут установлены необходимые пакеты.
-
Будет настроен брандмауэр UFW для разрешения только SSH-соединений. Любые другие соединения будут заблокированы.
После завершения выполнения плейбука станет доступен новый пользователь. Вы можете использовать этого пользователя для входа в систему.
Использование плейбука Ansible
Для настройки сервера вам понадобится плейбук начальной настройки сервера и его зависимости. Если вы используете его впервые, вам нужно будет клонировать репозиторий по ссылке ниже:
|
1 |
cd ~ |
|
1 |
git clone https://github.com/do-community/ansible-playbooks.git |
|
1 |
cd ansible-playbooks |
Если репозиторий уже существует в вашей системе, выполните команду ниже, чтобы получить последние обновления:
|
1 |
cd ~/ansible-playbooks |
|
1 |
git pull |
Вы получите следующую структуру файлов на своей машине:
|
1 2 3 4 |
setup |-- playbook.yml |__vars |-- default,yml |
Ниже приведено описание файлов:
-
vars/default.yml: этот файл содержит переменные для настройки узла Ansible.
-
playbook.yml: этот файл содержит задачи, которые должны быть выполнены на сервере.
Файл vars/default.yml выглядит примерно так:
|
1 2 3 4 |
--- create_user: my_user copy_local_key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}" sys_packages: [ 'curl', 'vim', 'git', 'ufw'] |
Ниже приведено описание этих переменных. Если вы хотите изменить их, вы можете заменить их значения своими собственными:
-
create_user: это создаваемый пользователь. Этот пользователь имеет sudo привилегии.
-
copy_local_key: Здесь содержится путь к локальному публичному ключу SSH. Он будет скопирован на удаленный сервер как authorized_key.
-
sys_packages: Если вы хотите установить один или несколько пакетов на свой сервер, укажите их здесь в виде массива.
После редактирования этого файла сохраните его содержимое. Затем в nano нажмите CTRL+X , Y. Затем, ENTER, чтобы сохранить содержимое файла.
Теперь вы готовы запустить этот плейбук на нескольких серверах. По умолчанию плейбуки готовы к выполнению на серверах из вашего инвентаря. Если вы хотите использовать плейбук на определенных серверах, вы можете использовать флаг -l. Теперь предположим, что на удаленном сервере несколько пользователей, вы можете использовать флаг -u, чтобы указать, к какому пользователю подключаться.
Если имя вашего сервера — my_server, а имя пользователя — my_user, то выполните команду ниже для запуска на узлах Ansible:
|
1 |
ansible-playbook playbook.yml -l my_server -u my_user |
Вы получите вывод, похожий на следующий:
|
1 2 3 4 5 6 7 8 9 |
PLAY [all] ***************************************************************************************************************************** TASK [Gathering Facts] ***************************************************************************************************************** ok: [my_server] TASK [Install Prerequisites] *********************************************************************************************************** changed: [my_server] TASK [Make sure we have a 'wheel' group] *********************************************************************************************** changed: [my_server] TASK [Allow 'wheel' group to have passwordless sudo] *********************************************************************************** changed: [my_server] |
После завершения выполнения вы можете подключиться с помощью следующей команды:
|
1 |
ssh my_user@server_host_or_IP |
Помните, что my_user — это имя, которое мы использовали в файле vars/default.yml. Вам также потребуется заменить IP-адрес сервера на IP-адрес вашего сервера в приведенной выше команде. Если вы указали переменную copy_local_key для указания на какой-то пользовательский SSH-ключ, укажите его расположение с помощью -i ключа:
|
1 |
ssh my_user@server_host_or_IP -i ~/.ssh/ansible_controller_key |
Затем войдите на свой сервер, чтобы проверить правила брандмауэра UFW:
|
1 |
sudo ufw status |
Вы получите следующий вывод:
|
1 2 3 4 5 |
Статус: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) |
Приведенный выше вывод подтверждает, что настройка брандмауэра UFW была успешно завершена. Это был последний шаг в нашем плейбуке. Если он выполнен правильно, это означает, что выполнение прошло успешно.
Содержимое плейбука Ansible
Файлы плейбука, которые мы использовали в этом руководстве, размещены на ansible-playbooks/setup_ubuntu1804 at master · do-community/ansible-playbooks · GitHub. Если вы хотите просмотреть содержимое каждого файла для использования или редактирования, нажмите кнопку Raw в верхней части каждого скрипта.
Для быстрого ознакомления мы делимся полным содержимым плейбука вместе с соответствующими файлами:
-
vars/default.yml
Этот файл содержит значения, которые будут использоваться задачами playbook. К ним относятся такие значения, как имя пользователя, привилегии, SSH-ключи, пакеты, которые необходимо установить в рамках первоначальной настройки, и так далее:
|
1 2 3 4 |
--- create_user: my_user copy_local_key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}" sys_packages: [ 'curl', 'vim', 'git', 'ufw'] |
-
playbook.yml
Файл playbook.yml содержит задачи, которые необходимо выполнить. Во-первых, в файле перечислены все целевые хосты. Если вы хотите указать все серверы, установите значение этого ключа равным all. Далее, если вы хотите указать, что задачи должны выполняться с привилегиями sudo, установите значение переменной become: true. Наконец, этот файл должен включать содержимое указанного выше vars/default.yml файла. Мы включим его далее, чтобы загрузить настройки из этого файла:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
--- - hosts: all become: true vars_files: - vars/default.yml tasks: - name: Установка предварительных требований apt: name=aptitude update_cache=yes state=latest force_apt_get=yes # Настройка группы Sudo - name: Убедиться, что у нас есть a 'wheel' группа group: name: wheel state: present - name: Разрешить 'wheel' группе to использовать sudo без пароля lineinfile: path: /etc/sudoers state: present regexp: '^%wheel' line: '%wheel ALL=(ALL) NOPASSWD: ALL' validate: '/usr/sbin/visudo -cf %s' # Настройка пользователя и ключа - name: Создать a нового обычного пользователя с привилегиями sudo user: name: "{{ create_user }}" state: present groups: wheel append: true create_home: true shell: /bin/bash - name: Настроить авторизованный ключ для удаленного пользователя authorized_key: user: "{{ create_user }}" state: present key: "{{ copy_local_key }}" - name: Отключить аутентификацию по паролю для root lineinfile: path: /etc/ssh/sshd_config state: present regexp: '^#?PermitRootLogin' line: 'PermitRootLogin prohibit-password' # Установка пакетов - name: Обновить apt apt: update_cache=yes - name: Установить необходимые системные пакеты apt: name={{ sys_packages }} state=latest # Настройка UFW - name: UFW - Разрешить SSH- соединения ufw: rule: allow name: OpenSSH - name: UFW - Запретить весь остальной входящий трафик по умолчанию ufw: state: enabled policy: deny direction: incoming |
Заключение
Автоматизация является ключевым фактором в ИТ, гарантируя, что все процессы выполняются без ошибок и соответствуют стандартным практикам и процедурам. Поскольку большинство современного программного обеспечения поставляется через Интернет и имеет распределенный характер, создание новых серверов (например, для различных сред, таких как тестовая или рабочая, или даже демонстрационных сред) стало повседневной задачей.
В этом руководстве мы продемонстрировали, как добиться автоматизации серверов с помощью Ansible — мощного и простого в использовании инструмента, который может сэкономить вам массу времени.
Приятной работы!
Комментарии
Комментариев пока нет. Будьте первым.