0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<ul><li>/</li>
1
<ul><li>/</li>
2
<li>/</li>
2
<li>/</li>
3
</ul><p>Ansible<strong></strong> • 5 мая 2025 • 10 мин чтения</p>
3
</ul><p>Ansible<strong></strong> • 5 мая 2025 • 10 мин чтения</p>
4
<p><strong>Ansible</strong>- незаменимый помощник для тех, кто автоматизирует серверы и предпочитает настраивать инфраструктуру без лишней рутины. Его выбирают DevOps-инженеры, системные администраторы и разработчики, которым важна стабильность, скорость и контроль над множеством машин. У Ansible простой синтаксис, высокая скорость внедрения и никаких агентов - только SSH.</p>
4
<p><strong>Ansible</strong>- незаменимый помощник для тех, кто автоматизирует серверы и предпочитает настраивать инфраструктуру без лишней рутины. Его выбирают DevOps-инженеры, системные администраторы и разработчики, которым важна стабильность, скорость и контроль над множеством машин. У Ansible простой синтаксис, высокая скорость внедрения и никаких агентов - только SSH.</p>
5
<p>Если вы ещё не работали с этим инструментом, сейчас - лучшее время начать. За 4 недели можно получить ключевые знания и навыки по работе с Ansible. Узнать принципы и подходы к Infrastructure as Code (IaC). Начать курс можно бесплатно взяв демо-доступ.</p>
5
<p>Если вы ещё не работали с этим инструментом, сейчас - лучшее время начать. За 4 недели можно получить ключевые знания и навыки по работе с Ansible. Узнать принципы и подходы к Infrastructure as Code (IaC). Начать курс можно бесплатно взяв демо-доступ.</p>
6
<p><strong>В этой статье вы получите пошаговую инструкцию, как установить Ansible на Ubuntu, разработанную на базе Linux:</strong>от подготовки системы до первого рабочего playbook. Всё - наглядно, без перегрузки терминами и с примерами.</p>
6
<p><strong>В этой статье вы получите пошаговую инструкцию, как установить Ansible на Ubuntu, разработанную на базе Linux:</strong>от подготовки системы до первого рабочего playbook. Всё - наглядно, без перегрузки терминами и с примерами.</p>
7
<h2>Установка Ansible</h2>
7
<h2>Установка Ansible</h2>
8
<p>Убедитесь, что ваша система обновлена и готова к установке новых пакетов, до того, как установить Ansible на Ubuntu. Рабочая версия Ubuntu - от 20.04 и выше.</p>
8
<p>Убедитесь, что ваша система обновлена и готова к установке новых пакетов, до того, как установить Ansible на Ubuntu. Рабочая версия Ubuntu - от 20.04 и выше.</p>
9
<h3>Подготовка системы</h3>
9
<h3>Подготовка системы</h3>
10
<p>Обновляем список пакетов и саму систему:</p>
10
<p>Обновляем список пакетов и саму систему:</p>
11
<p>sudo apt update && sudo apt upgrade -y</p>
11
<p>sudo apt update && sudo apt upgrade -y</p>
12
<p>Устанавливаем нужные утилиты:</p>
12
<p>Устанавливаем нужные утилиты:</p>
13
<p>sudo apt install software-properties-common -y</p>
13
<p>sudo apt install software-properties-common -y</p>
14
<h3>Установка через APT</h3>
14
<h3>Установка через APT</h3>
15
<p>Самый простой способ - установка через официальный пакетный менеджер Ubuntu:</p>
15
<p>Самый простой способ - установка через официальный пакетный менеджер Ubuntu:</p>
16
<p>sudo apt-add-repository --yes --update ppa:ansible/ansiblesudo apt install ansible -y</p>
16
<p>sudo apt-add-repository --yes --update ppa:ansible/ansiblesudo apt install ansible -y</p>
17
<p>Проверка версии:</p>
17
<p>Проверка версии:</p>
18
<p>ansible --version</p>
18
<p>ansible --version</p>
19
<p>Этот способ подходит для запуска стабильной версии Ansible с минимальными усилиями.</p>
19
<p>Этот способ подходит для запуска стабильной версии Ansible с минимальными усилиями.</p>
20
<h3><strong>Установка через pip</strong></h3>
20
<h3><strong>Установка через pip</strong></h3>
21
<p>Если вы работаете в изолированной среде или хотите контролировать версию, поставьте Ansible через pip:</p>
21
<p>Если вы работаете в изолированной среде или хотите контролировать версию, поставьте Ansible через pip:</p>
22
<p>sudo apt install python3-pip -ypip3 install --user ansible</p>
22
<p>sudo apt install python3-pip -ypip3 install --user ansible</p>
23
<p><strong>Данный способ не устанавливает зависимости, такие как paramiko, jinja2 и другие, если их нет в системе. Лучше использовать pip3 install --user</strong>"<strong>ansible[standard]</strong>"<strong>или ansible-core + ansible отдельно, особенно в продакшене.</strong></p>
23
<p><strong>Данный способ не устанавливает зависимости, такие как paramiko, jinja2 и другие, если их нет в системе. Лучше использовать pip3 install --user</strong>"<strong>ansible[standard]</strong>"<strong>или ansible-core + ansible отдельно, особенно в продакшене.</strong></p>
24
<p>Возможно, потребуется добавить путь к бинарным файлам pip в переменную среды PATH. Для этого откройте файл ~/.bashrc или ~/.zshrc и добавьте строку:</p>
24
<p>Возможно, потребуется добавить путь к бинарным файлам pip в переменную среды PATH. Для этого откройте файл ~/.bashrc или ~/.zshrc и добавьте строку:</p>
25
<p>export PATH=$PATH:~/.local/bin</p>
25
<p>export PATH=$PATH:~/.local/bin</p>
26
<p>После чего выполните:</p>
26
<p>После чего выполните:</p>
27
<p>source ~/.bashrc</p>
27
<p>source ~/.bashrc</p>
28
<h3><strong>Проверка установки</strong></h3>
28
<h3><strong>Проверка установки</strong></h3>
29
<p>Убедитесь, что установка прошла корректно. Введите:</p>
29
<p>Убедитесь, что установка прошла корректно. Введите:</p>
30
<p>ansible --version</p>
30
<p>ansible --version</p>
31
<p>В выводе должна отобразиться информация о версии и путях к установленным компонентам.</p>
31
<p>В выводе должна отобразиться информация о версии и путях к установленным компонентам.</p>
32
<p>На этом установка завершена. Дальше - как другим машинам подключиться к Ansible по SSH.</p>
32
<p>На этом установка завершена. Дальше - как другим машинам подключиться к Ansible по SSH.</p>
33
<p>Приглашаем в наше телеграм-сообщество, где делимся лучшими статьями с Хабра по рекомендациям и практикам работы с Ansible.</p>
33
<p>Приглашаем в наше телеграм-сообщество, где делимся лучшими статьями с Хабра по рекомендациям и практикам работы с Ansible.</p>
34
<p><strong>Все полезные материалы по Ansible в одном месте</strong></p>
34
<p><strong>Все полезные материалы по Ansible в одном месте</strong></p>
35
<h2>Настройка SSH для Ansible</h2>
35
<h2>Настройка SSH для Ansible</h2>
36
<p>Для работы Ansible нужен простой и стабильный доступ к удалённым серверам. Он подключается по SSH, без установки агентов. Поэтому сначала нужно настроить безопасное соединение.</p>
36
<p>Для работы Ansible нужен простой и стабильный доступ к удалённым серверам. Он подключается по SSH, без установки агентов. Поэтому сначала нужно настроить безопасное соединение.</p>
37
<h3>Генерация SSH-ключей</h3>
37
<h3>Генерация SSH-ключей</h3>
38
<p>Если у вас ещё нет SSH-ключей - создайте их. На локальной машине выполните:</p>
38
<p>Если у вас ещё нет SSH-ключей - создайте их. На локальной машине выполните:</p>
39
<p>ssh-keygen -t rsa -b 4096 -C "your_email@example.com"</p>
39
<p>ssh-keygen -t rsa -b 4096 -C "your_email@example.com"</p>
40
<p>Нажимайте Enter при каждом запросе - по умолчанию ключи сохранятся в ~/.ssh/id_rsa и ~/.ssh/id_rsa.pub.</p>
40
<p>Нажимайте Enter при каждом запросе - по умолчанию ключи сохранятся в ~/.ssh/id_rsa и ~/.ssh/id_rsa.pub.</p>
41
<h3>Установка ключей на удалённые машины</h3>
41
<h3>Установка ключей на удалённые машины</h3>
42
<p>Скопируйте публичный ключ на удалённый сервер. Самый удобный способ - с помощью команды ssh-copy-id:</p>
42
<p>Скопируйте публичный ключ на удалённый сервер. Самый удобный способ - с помощью команды ssh-copy-id:</p>
43
<p>ssh-copy-id user@remote-server-ip</p>
43
<p>ssh-copy-id user@remote-server-ip</p>
44
<p>После этого Ansible сможет подключаться к серверу без запроса пароля.</p>
44
<p>После этого Ansible сможет подключаться к серверу без запроса пароля.</p>
45
<p>Альтернатива - вручную вставить содержимое id_rsa.pub в файл ~/.ssh/authorized_keys на сервере.</p>
45
<p>Альтернатива - вручную вставить содержимое id_rsa.pub в файл ~/.ssh/authorized_keys на сервере.</p>
46
<p>Важно проверить права владельца на ~/.ssh и authorized_keys:</p>
46
<p>Важно проверить права владельца на ~/.ssh и authorized_keys:</p>
47
<p>chown -R user:user ~/.ssh</p>
47
<p>chown -R user:user ~/.ssh</p>
48
<p>Проверьте права на этот файл:</p>
48
<p>Проверьте права на этот файл:</p>
49
<p>chmod 600 ~/.ssh/authorized_keyschmod 700 ~/.ssh</p>
49
<p>chmod 600 ~/.ssh/authorized_keyschmod 700 ~/.ssh</p>
50
<h3>Проверка подключения</h3>
50
<h3>Проверка подключения</h3>
51
<p>Тестируем SSH-доступ:</p>
51
<p>Тестируем SSH-доступ:</p>
52
<p>ssh user@remote-server-ip</p>
52
<p>ssh user@remote-server-ip</p>
53
<p>Если вход происходит без пароля - всё настроено. Ansible будет использовать те же SSH-ключи, что и вы в командной строке.</p>
53
<p>Если вход происходит без пароля - всё настроено. Ansible будет использовать те же SSH-ключи, что и вы в командной строке.</p>
54
<p>Для явного указания пути к ключу (если используется нестандартный), можно настроить ansible.cfg или передавать флаг --private-key при запуске.</p>
54
<p>Для явного указания пути к ключу (если используется нестандартный), можно настроить ansible.cfg или передавать флаг --private-key при запуске.</p>
55
<p><strong>Готово!</strong>Теперь можно подключать хосты через inventory и запускать команды удалённо.</p>
55
<p><strong>Готово!</strong>Теперь можно подключать хосты через inventory и запускать команды удалённо.</p>
56
<h2>Инвентарь Ansible</h2>
56
<h2>Инвентарь Ansible</h2>
57
<p><strong>Inventory - список машин, к которым Ansible будет подключаться.</strong>Без него Ansible не знает, с какими серверами работать. Inventory может быть в формате INI, YAML или динамическим (например, с AWS или Docker).</p>
57
<p><strong>Inventory - список машин, к которым Ansible будет подключаться.</strong>Без него Ansible не знает, с какими серверами работать. Inventory может быть в формате INI, YAML или динамическим (например, с AWS или Docker).</p>
58
<h3>Что такое inventory</h3>
58
<h3>Что такое inventory</h3>
59
<p>В simplest-режиме это обычный текстовый файл с IP-адресами или доменными именами. Ansible читает его, чтобы понять, куда отправлять команды.По умолчанию Ansible ищет файл hosts в /etc/ansible/hosts, но можно указать свой путь через флаг -i.</p>
59
<p>В simplest-режиме это обычный текстовый файл с IP-адресами или доменными именами. Ansible читает его, чтобы понять, куда отправлять команды.По умолчанию Ansible ищет файл hosts в /etc/ansible/hosts, но можно указать свой путь через флаг -i.</p>
60
<h3>Примеры INI и YAML</h3>
60
<h3>Примеры INI и YAML</h3>
61
<p><strong>Формат INI:</strong></p>
61
<p><strong>Формат INI:</strong></p>
62
<p>[web]192.168.1.10192.168.1.11</p>
62
<p>[web]192.168.1.10192.168.1.11</p>
63
<p>[db]192.168.1.20 ansible_user=root</p>
63
<p>[db]192.168.1.20 ansible_user=root</p>
64
<p>В этом примере две группы: web и db. Можно задавать пользователя, порты, пути к SSH-ключам и другие параметры прямо в строке.</p>
64
<p>В этом примере две группы: web и db. Можно задавать пользователя, порты, пути к SSH-ключам и другие параметры прямо в строке.</p>
65
<p><strong>Формат YAML (с ansible-inventory plugin):</strong></p>
65
<p><strong>Формат YAML (с ansible-inventory plugin):</strong></p>
66
<p>all: children: web: hosts: 192.168.1.10: 192.168.1.11: db: hosts: 192.168.1.20: ansible_user: root</p>
66
<p>all: children: web: hosts: 192.168.1.10: 192.168.1.11: db: hosts: 192.168.1.20: ansible_user: root</p>
67
<p>Формат YAML более структурирован, особенно удобен при сложных конфигурациях.</p>
67
<p>Формат YAML более структурирован, особенно удобен при сложных конфигурациях.</p>
68
<h3>Создание простого inventory-файла</h3>
68
<h3>Создание простого inventory-файла</h3>
69
<p>Для начала создайте файл hosts.ini рядом со своими playbook’ами:</p>
69
<p>Для начала создайте файл hosts.ini рядом со своими playbook’ами:</p>
70
<p>[servers]192.168.56.101 ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_rsa</p>
70
<p>[servers]192.168.56.101 ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_rsa</p>
71
<p>Теперь вы можете использовать этот файл при запуске:</p>
71
<p>Теперь вы можете использовать этот файл при запуске:</p>
72
<p>ansible all -i hosts.ini -m ping</p>
72
<p>ansible all -i hosts.ini -m ping</p>
73
<p>Если получите в ответ pong - соединение с сервером установлено. Всё работает!</p>
73
<p>Если получите в ответ pong - соединение с сервером установлено. Всё работает!</p>
74
<p>На следующем шаге создадим свой первый playbook и протестируем конфигурацию.</p>
74
<p>На следующем шаге создадим свой первый playbook и протестируем конфигурацию.</p>
75
<p><strong>Получите ключевые знания и навыки по Ansible!</strong>Дарим демодоступ к обучению на 3 дня, чтобы вы познакомились с материалами и спикерами курса.</p>
75
<p><strong>Получите ключевые знания и навыки по Ansible!</strong>Дарим демодоступ к обучению на 3 дня, чтобы вы познакомились с материалами и спикерами курса.</p>
76
<h2>Тестовый запуск Ansible</h2>
76
<h2>Тестовый запуск Ansible</h2>
77
<p>Когда inventory готов и подключение по SSH настроено - можно переходить к автоматизации. Начнем с базового playbook, который создаст тестовый файл на удалённой машине.</p>
77
<p>Когда inventory готов и подключение по SSH настроено - можно переходить к автоматизации. Начнем с базового playbook, который создаст тестовый файл на удалённой машине.</p>
78
<h3>Пример простого playbook</h3>
78
<h3>Пример простого playbook</h3>
79
<p>Создайте файл test-playbook.yml со следующим содержанием:</p>
79
<p>Создайте файл test-playbook.yml со следующим содержанием:</p>
80
<p>- name: Тестовый запуск Ansible hosts: all become: true tasks: - name: Создать файл test.txt file: path: /tmp/test.txt state: touch</p>
80
<p>- name: Тестовый запуск Ansible hosts: all become: true tasks: - name: Создать файл test.txt file: path: /tmp/test.txt state: touch</p>
81
<p>Этот playbook обращается ко всем хостам из inventory, получает права root и создаёт пустой файл /tmp/test.txt.</p>
81
<p>Этот playbook обращается ко всем хостам из inventory, получает права root и создаёт пустой файл /tmp/test.txt.</p>
82
<h3>Команда для запуска</h3>
82
<h3>Команда для запуска</h3>
83
<p>Чтобы запустить playbook, используйте:</p>
83
<p>Чтобы запустить playbook, используйте:</p>
84
<p>ansible-playbook -i hosts.ini test-playbook.yml</p>
84
<p>ansible-playbook -i hosts.ini test-playbook.yml</p>
85
<p>Если всё настроено правильно - увидите подробный вывод со статусами задач. Ansible укажет, что файл был создан или уже существовал.</p>
85
<p>Если всё настроено правильно - увидите подробный вывод со статусами задач. Ansible укажет, что файл был создан или уже существовал.</p>
86
<h3>Разбор результата</h3>
86
<h3>Разбор результата</h3>
87
<p>Ansible использует цветовую кодировку:</p>
87
<p>Ansible использует цветовую кодировку:</p>
88
<ul><li><strong>green (ok)</strong>- задача уже выполнена, изменений не было.</li>
88
<ul><li><strong>green (ok)</strong>- задача уже выполнена, изменений не было.</li>
89
<li><strong>yellow (changed)</strong> - задача что-то изменила на сервере.</li>
89
<li><strong>yellow (changed)</strong> - задача что-то изменила на сервере.</li>
90
<li><strong>red (failed)</strong> - возникла ошибка.</li>
90
<li><strong>red (failed)</strong> - возникла ошибка.</li>
91
</ul><p>После запуска можно подключиться к серверу и проверить наличие файла:</p>
91
</ul><p>После запуска можно подключиться к серверу и проверить наличие файла:</p>
92
<p>ssh user@192.168.56.101ls -l /tmp/test.txt</p>
92
<p>ssh user@192.168.56.101ls -l /tmp/test.txt</p>
93
<p><strong>Если файл есть - вы всё сделали правильно.</strong>Поздравляем! Вы только что автоматизировали первую задачу с помощью Ansible.</p>
93
<p><strong>Если файл есть - вы всё сделали правильно.</strong>Поздравляем! Вы только что автоматизировали первую задачу с помощью Ansible.</p>
94
<p>Теперь пора закрепить знания и перейти на новый уровень - через практику.</p>
94
<p>Теперь пора закрепить знания и перейти на новый уровень - через практику.</p>
95
<h2><strong>Заключение</strong></h2>
95
<h2><strong>Заключение</strong></h2>
96
<h3><strong>Статью подготовили</strong></h3>
96
<h3><strong>Статью подготовили</strong></h3>
97
<p>Понравилась статья? Будем рады вашему лайку и репосту - вдруг кому-то тоже пригодится:)</p>
97
<p>Понравилась статья? Будем рады вашему лайку и репосту - вдруг кому-то тоже пригодится:)</p>
98
<h3><strong>Читайте также:</strong></h3>
98
<h3><strong>Читайте также:</strong></h3>
99
99