September 02, 2026 · by Alex M.
Если вы управляете несколькими серверами или хотите исключить рутинные задачи из своего рабочего процесса, Ansible — это именно тот инструмент, который вам нужен. Это open-source платформа автоматизации без агентов (не требует установки агента на управляемых серверах) и невероятно простая в изучении. В этом руководстве вы узнаете, как установить и настроить Ansible на VPS NVMe или VPS SSD с практическими примерами.
Ansible — это платформа автоматизации IT, разработанная Red Hat, которая позволяет:
В отличие от Puppet или Chef, Ansible не требует установки агента на узлах. Взаимодействие происходит через SSH, что делает его идеальным для любого VPS Linux или выделенного сервера.
apt, copy, service)Перед началом убедитесь, что у вас есть:
sudoЕсли у вас ещё нет сервера, вы можете быстро заказать VPS NVMe CLIQHOST с предустановленной Ubuntu.
sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install -y ansible
ansible --version
Ожидаемый вывод:
ansible [core 2.16.x]
python version = 3.10.x
jinja version = 3.x.x
sudo dnf install -y epel-release
sudo dnf install -y ansible
Инвентарь — это основа любой конфигурации Ansible. Он определяет какими серверами управлять и как они сгруппированы.
/etc/ansible/hosts)[webservers]
192.168.1.10
192.168.1.11
[dbservers]
192.168.1.20
[all:vars]
ansible_user=ubuntu
ansible_ssh_private_key_file=~/.ssh/id_rsa
Создайте файл inventory.yml:
all:
children:
webservers:
hosts:
web01:
ansible_host: 192.168.1.10
web02:
ansible_host: 192.168.1.11
dbservers:
hosts:
db01:
ansible_host: 192.168.1.20
vars:
ansible_user: ubuntu
ansible_ssh_private_key_file: ~/.ssh/id_rsa
ansible all -m ping -i inventory.yml
Успешный ответ:
web01 | SUCCESS => {
"changed": false,
"ping": "pong"
}
ansible.cfgСоздайте файл ansible.cfg в директории проекта:
[defaults]
inventory = ./inventory.yml
remote_user = ubuntu
private_key_file = ~/.ssh/id_rsa
host_key_checking = False
retry_files_enabled = False
[privilege_escalation]
become = True
become_method = sudo
become_user = root
Примечание:
host_key_checking = Falseудобен в тестовых средах. В продакшне, на управляемом выделенном сервере, рекомендуется держать проверку включённой.
Ad-hoc команды полезны для быстрых действий без написания playbook:
# Проверить uptime всех серверов
ansible all -m command -a "uptime"
# Установить пакет на все веб-серверы
ansible webservers -m apt -a "name=nginx state=present" --become
# Скопировать файл на узлы
ansible webservers -m copy -a "src=/local/file.conf dest=/etc/nginx/file.conf"
# Перезапустить сервис
ansible webservers -m service -a "name=nginx state=restarted" --become
# Проверить использование диска
ansible all -m shell -a "df -h"
Playbook — YAML-файл, описывающий желаемое состояние систем. Вот полный пример установки и настройки Nginx:
---
- name: Установка и настройка Nginx
hosts: webservers
become: true
vars:
nginx_port: 80
site_name: "example.com"
tasks:
- name: Обновление кэша APT
apt:
update_cache: yes
cache_valid_time: 3600
- name: Установка Nginx
apt:
name: nginx
state: present
- name: Копирование конфигурации сайта
template:
src: templates/nginx_site.conf.j2
dest: "/etc/nginx/sites-available/{{ site_name }}"
owner: root
group: root
mode: '0644'
notify: Restart Nginx
- name: Активация сайта
file:
src: "/etc/nginx/sites-available/{{ site_name }}"
dest: "/etc/nginx/sites-enabled/{{ site_name }}"
state: link
notify: Restart Nginx
- name: Запуск и включение Nginx
service:
name: nginx
state: started
enabled: yes
handlers:
- name: Restart Nginx
service:
name: nginx
state: restarted
templates/nginx_site.conf.j2)server {
listen {{ nginx_port }};
server_name {{ site_name }};
root /var/www/{{ site_name }};
index index.html index.php;
access_log /var/log/nginx/{{ site_name }}_access.log;
error_log /var/log/nginx/{{ site_name }}_error.log;
location / {
try_files $uri $uri/ =404;
}
}
# Dry-run (проверка без изменений)
ansible-playbook playbook_nginx.yml --check
# Реальный запуск
ansible-playbook playbook_nginx.yml
# С подробным выводом
ansible-playbook playbook_nginx.yml -v
Для крупных проектов роли позволяют повторно использовать и организовывать код. Структура роли:
roles/
nginx/
tasks/
main.yml
handlers/
main.yml
templates/
nginx_site.conf.j2
defaults/
main.yml
vars/
main.yml
files/
meta/
main.yml
ansible-galaxy init roles/nginx
ansible-galaxy init roles/mariadb
ansible-galaxy init roles/php
---
- name: Настройка стека LEMP
hosts: webservers
become: true
roles:
- nginx
- mariadb
- php
group_vars/
webservers.yml
dbservers.yml
host_vars/
web01.yml
group_vars/webservers.yml:
nginx_worker_processes: 4
nginx_worker_connections: 1024
php_version: "8.2"
# Создание зашифрованного файла
ansible-vault create group_vars/all/vault.yml
# Редактирование зашифрованного файла
ansible-vault edit group_vars/all/vault.yml
# Запуск playbook с vault
ansible-playbook site.yml --ask-vault-pass
# или с файлом пароля
ansible-playbook site.yml --vault-password-file ~/.vault_pass
vault.yml (расшифрованное содержимое):
db_root_password: "SuperPassword123!"
db_app_password: "AppPassword456!"
api_key: "sk-xxxxxxxxxxxx"
---
- name: Первоначальная защита VPS
hosts: all
become: true
tasks:
- name: Обновление системы
apt:
upgrade: dist
update_cache: yes
- name: Установка пакетов безопасности
apt:
name:
- ufw
- fail2ban
- unattended-upgrades
state: present
- name: UFW - разрешить SSH
ufw:
rule: allow
port: "22"
proto: tcp
- name: UFW - разрешить HTTP/HTTPS
ufw:
rule: allow
port: "{{ item }}"
proto: tcp
loop:
- "80"
- "443"
- name: Включение UFW
ufw:
state: enabled
policy: deny
- name: Запуск fail2ban
service:
name: fail2ban
state: started
enabled: yes
- name: Отключение входа root по SSH
lineinfile:
path: /etc/ssh/sshd_config
regexp: '^PermitRootLogin'
line: 'PermitRootLogin no'
notify: Restart SSH
handlers:
- name: Restart SSH
service:
name: ssh
state: restarted
--check перед запуском на продакшн-серверахnameДля сложных производственных инфраструктур управляемый выделенный сервер или сервис администрирования серверов может значительно сэкономить ваше время.
ansible-project/
├── ansible.cfg
├── inventory/
│ ├── production/
│ │ ├── hosts.yml
│ │ └── group_vars/
│ └── staging/
│ ├── hosts.yml
│ └── group_vars/
├── roles/
│ ├── common/
│ ├── nginx/
│ ├── mariadb/
│ └── php/
├── playbooks/
│ ├── site.yml
│ ├── deploy.yml
│ └── security.yml
└── README.md
Ansible превращает администрирование серверов из ручного и повторяющегося процесса в автоматизированный, воспроизводимый и документированный рабочий поток. С несколькими хорошо написанными playbook'ами вы можете идентично настроить десятки серверов за несколько минут, исключить человеческие ошибки и всегда иметь чёткое представление о состоянии своей инфраструктуры.
Для практического применения всего изученного вам потребуется надёжная инфраструктура. Ознакомьтесь с предложениями VPS NVMe от CLIQHOST или свяжитесь с нами для получения персонального плана обслуживания. Дополнительные материалы по Linux и DevOps доступны в блоге CLIQHOST.
Реальные отзывы клиентов, которые доверяют CLIQHOST за производительность, надёжность и профессиональную техническую поддержку.
"We moved our online shop from a foreign host and the difference is night and day — pages load instantly and support replies in minutes, in Romanian."
"Migrated 12 client sites to CLIQHOST. Free migration, zero downtime, and the cPanel setup is exactly what my team needed. Highly recommend."
"Our NVMe VPS handles traffic spikes without a sweat. Full root, local datacenter, and billing in MDL — everything we wanted from a provider."