Давайте дружить в Телеграме: рассказываем про новые фичи и общаемся в комментах Подписаться
support@serv.host
Личный кабинет

Ansible. Установка, инвентарь, Ad-hoc команды

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

Что такое Ansible?

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

Почему это удобно для владельцев VPS:

  1. Работа без агентов (Agentless). Вам не нужно ничего устанавливать на свои серверы. Ansible подключается по обычному SSH и работает «из коробки».
  2. Простой язык - YAML. Конфиги для Ansible пишутся на понятном английском языке, их легко читать и редактировать.
  3. Производительность/безопасность. Он не требует постоянно запущенных фоновых процессов или специфических портов, кроме стандартного SSH.

Архитектура

В работе с Ansible участвуют две стороны:

  • Управляющая нода (Control Node) - ваш личный компьютер или отдельный VPS, на котором установлен Ansible.
  • Управляемые узлы (Managed Nodes) - ваши серверы (VPS), которыми вы хотите управлять.

Установка Ansible на управляющую ноду

Ansible устанавливается только на ваш рабочий компьютер (или сервер управления). На целевые VPS его ставить не нужно.

Для Ubuntu/Debian:

sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install ansible

Для CentOS/AlmaLinux/Rocky Linux:

sudo dnf install epel-release
sudo dnf install ansible

Для macOS:

brew install ansible

Для Windows: Ansible не работает на Windows напрямую, но отлично запускается через WSL2 (Windows Subsystem for Linux). Установите Ubuntu из Microsoft Store и используйте инструкции для Ubuntu выше.


Настройка доступа к серверам (SSH)

Чтобы Ansible мог управлять вашими VPS без постоянного ввода пароля, рекомендуется использовать SSH-ключи. 1. Создайте SSH-ключ на вашем компьютере (если его нет):

ssh-keygen -t ed25519 -C "my_ansible_key"

2. Скопируйте публичный ключ на ваш VPS:

ssh-copy-id root@ip_вашего_сервера

Проверка установки

Убедитесь, что Ansible готов к работе, проверив его версию:

ansible --version

Если вы видите номер версии (например, ansible [core 2.20.3]), значит, всё прошло успешно!


Инвентаризация (Inventory) и группы хостов

А теперь, мы научим Ansible «видеть» ваши серверы, объединять их в логические группы и задавать индивидуальные параметры подключения.

Что такое Inventory-файл?

Если Ansible - это исполнитель, то Inventory (Инвентарь) - это его адресная книга. В этом файле вы указываете IP-адреса или доменные имена ваших VPS, которыми хотите управлять.

По умолчанию Ansible ищет этот файл по пути /etc/ansible/hosts, но на практике гораздо удобнее создавать отдельный файл (например, hosts.ini) прямо в папке вашего проекта.


Форматы Inventory

Ansible поддерживает два основных формата: INI (простой и наглядный) и YAML (более гибкий). Для начала мы будем использовать INI.

1. Простейший список Создайте файл hosts.ini и просто впишите туда IP-адреса ваших серверов:

192.168.1.10
192.168.1.11
my-cool-server.com

2. Группировка серверов Это самая удобная функция инвентаря. Вы можете разделять серверы по их ролям:

[web_servers]
192.168.1.10
192.168.1.11

[db_servers]
192.168.1.20

[production:children]
web_servers
db_servers

Здесь группа production включает в себя все серверы из групп web и db.


Параметры подключения

Иногда серверы требуют разных настроек (например, другой SSH-порт или специфический пользователь). Это можно указать прямо в файле:

[web_servers]
web01 ansible_host=192.168.1.10 ansible_user=root
web02 ansible_host=192.168.1.11 ansible_user=admin ansible_port=2222

Основные параметры:

  • ansible_host - реальный IP-адрес (если вы используете псевдоним типа web01).
  • ansible_user - имя пользователя для подключения.
  • ansible_port - если вы изменили стандартный SSH-порт (22) в целях безопасности.
  • ansible_password - пароль для подключения к серверу.
  • ansible_ssh_private_key_file - путь к конкретному приватному ключу.

Проверка связи (Модуль Ping)

Теперь проверим, видит ли Ansible ваши серверы. Мы будем использовать так называемую Ad-hoc команду.

Введите в терминале (находясь в папке с файлом hosts.ini):

ansible all -i hosts.ini -m ping

Разбор команды:

  • all - ко всем хостам из файла.
  • -i hosts.ini - использовать наш файл инвентаря.
  • -m ping - использовать модуль ping (это не обычный ICMP-пинг, а проверка готовности Python и SSH на сервере).

Что вы должны увидеть: Если всё настроено верно, Ansible вернет ответ в формате JSON:

daniar@serv.host:~# ansible all -i hosts.ini -m ping
web01 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/local/bin/python3.14"
    },
    "changed": false,
    "ping": "pong"
}

Полезные советы:

  • Никогда не храните пароли в открытом виде в файле инвентаря. Используйте SSH-ключи.
  • Если у вас много проектов, создавайте отдельную папку под каждый проект, а внутри неё - свой файл hosts.ini. Это поможет избежать путаницы.
  • Если вы хотите попрактиковаться на той же машине, где установлен Ansible, добавьте строку localhost ansible_connection=local.

Ad-hoc команды: управление серверами «на лету»

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

Что такое Ad-hoc команды?

Ad-hoc команды - это инструмент для быстрого решения одноразовых задач без необходимости писать полноценный сценарий. Если Playbook можно сравнить с подробным рецептом, то Ad-hoc - это возможность приготовить что-то на скорую руку, не заглядывая в кулинарную книгу.


Структура команды

Типичная Ad-hoc команда выглядит так:

ansible <группа_хостов> -i <инвентарь> -m <модуль> -a "<аргументы>"
  • <группа_хостов>: Кому отправляем команду (например, web_servers или all).
  • -m (module): Какое действие совершить (модуль).
  • -a (arguments): Параметры этого действия.
  • -b (become): (опционально) Выполнить команду от имени root (аналог sudo).

5 самых полезных Ad-hoc команд

1. Проверка аптайма и ресурсов Самый простой способ узнать, сколько времени работают ваши серверы:

ansible all -i hosts.ini -m shell -a "uptime"

Здесь мы используем модуль shell, который просто запускает команду в терминале сервера. 2. Массовое обновление пакетов Держите ваши VPS в безопасности. Одной командой обновите список пакетов на всех Ubuntu/Debian серверах:

ansible web_servers -i hosts.ini -m apt -a "update_cache=yes" -b

Обратите внимание на флаг -b - для обновления нужны права суперпользователя. 3. Управление сервисами (Nginx, Apache, MySQL) Нужно быстро перезагрузить веб-сервер после изменения конфига?

ansible web_servers -i hosts.ini -m service -a "name=nginx state=restarted" -b

4. Копирование файлов Если вам нужно быстро «забросить» файл (например, конфиг или лицензию) на все серверы:

ansible all -i hosts.ini -m copy -a "src=./info.txt dest=/tmp/info.txt"

Вы получите огромный JSON с данными: от версии ядра до объема свободной оперативной памяти.


Почему не стоит использовать Ad-hoc постоянно?

Несмотря на удобство, у Ad-hoc команд есть минус: они не сохраняют состояние. Вы выполнили команду и забыли. Если вы хотите, чтобы серверы всегда находились в определенном состоянии (например, «всегда установлен Nginx с моим конфигом»), нужно переходить к Playbooks. Ad-hoc команды идеально подходят для экстренных случаев. Например, если вышла критическая уязвимость в OpenSSL, вы можете пропатчить все свои серверы за 30 секунд.