// blog

Как установить и настроить Ansible на VPS Linux: полное руководство по автоматизации инфраструктуры

September 02, 2026 · by Alex M.

Как установить и настроить Ansible на VPS Linux: полное руководство по автоматизации инфраструктуры

Если вы управляете несколькими серверами или хотите исключить рутинные задачи из своего рабочего процесса, Ansible — это именно тот инструмент, который вам нужен. Это open-source платформа автоматизации без агентов (не требует установки агента на управляемых серверах) и невероятно простая в изучении. В этом руководстве вы узнаете, как установить и настроить Ansible на VPS NVMe или VPS SSD с практическими примерами.

Что такое Ansible и зачем его использовать?

Ansible — это платформа автоматизации IT, разработанная Red Hat, которая позволяет:

  • Развёртывать новые серверы за считанные минуты
  • Конфигурировать сервисы (Nginx, Apache, MySQL и др.) одинаково на десятках машин
  • Деплоить приложения без ручного вмешательства
  • Оркестрировать сложные операционные потоки

В отличие от Puppet или Chef, Ansible не требует установки агента на узлах. Взаимодействие происходит через SSH, что делает его идеальным для любого VPS Linux или выделенного сервера.

Архитектура Ansible

  • Control Node — машина, с которой запускается Ansible (ваш основной VPS)
  • Managed Nodes — серверы, которыми вы управляете
  • Inventory — список управляемых серверов
  • Playbook — YAML-файл, описывающий выполняемые операции
  • Module — базовая единица действия (например: apt, copy, service)

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

Перед началом убедитесь, что у вас есть:

  1. VPS с Ubuntu 22.04 или Debian 12 (control node)
  2. Доступ root или пользователь с правами sudo
  3. Настроенная аутентификация по SSH-ключам
  4. Python 3 (предустановлен на Ubuntu 22.04)

Если у вас ещё нет сервера, вы можете быстро заказать VPS NVMe CLIQHOST с предустановленной Ubuntu.

Шаг 1: Установка Ansible на Control Node

На Ubuntu 22.04 / Debian 12

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

На CentOS / AlmaLinux 9

sudo dnf install -y epel-release
sudo dnf install -y ansible

Шаг 2: Настройка файла инвентаря

Инвентарь — это основа любой конфигурации 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

YAML-инвентарь (рекомендуется для сложных проектов)

Создайте файл 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"
}

Шаг 3: Настройка файла 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 удобен в тестовых средах. В продакшне, на управляемом выделенном сервере, рекомендуется держать проверку включённой.

Шаг 4: Первые Ad-Hoc команды

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"

Шаг 5: Написание первого Playbook

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

Шаблон Jinja2 для Nginx (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;
    }
}

Запуск playbook

# Dry-run (проверка без изменений)
ansible-playbook playbook_nginx.yml --check

# Реальный запуск
ansible-playbook playbook_nginx.yml

# С подробным выводом
ansible-playbook playbook_nginx.yml -v

Шаг 6: Организация проекта с помощью ролей Ansible

Для крупных проектов роли позволяют повторно использовать и организовывать код. Структура роли:

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

Playbook с использованием ролей

---
- name: Настройка стека LEMP
  hosts: webservers
  become: true
  roles:
    - nginx
    - mariadb
    - php

Шаг 7: Переменные и Ansible Vault

Файлы переменных по группам

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 — защита секретов

# Создание зашифрованного файла
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"

Шаг 8: Практические продвинутые примеры

Playbook для первоначального усиления безопасности VPS

---
- 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

Рекомендации по использованию Ansible в продакшне

  1. Всегда используйте --check перед запуском на продакшн-серверах
  2. Версионируйте playbook'и с помощью Git
  3. Разделяйте среды (dev/staging/prod) через отдельные инвентари
  4. Тестируйте роли с Molecule перед деплоем
  5. Шифруйте все секреты с помощью Ansible Vault
  6. Документируйте каждый playbook с комментариями и описательными name

Для сложных производственных инфраструктур управляемый выделенный сервер или сервис администрирования серверов может значительно сэкономить ваше время.

Структура полного Ansible-проекта

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.

SHARE
// Что говорят наши клиенты

Что говорят наши клиенты

Реальные отзывы клиентов, которые доверяют 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."

AM
Andrei M.
eCommerce owner · Chișinău
★★★★★

"Migrated 12 client sites to CLIQHOST. Free migration, zero downtime, and the cPanel setup is exactly what my team needed. Highly recommend."

EV
Elena V.
Web agency · Bălți
★★★★★

"Our NVMe VPS handles traffic spikes without a sweat. Full root, local datacenter, and billing in MDL — everything we wanted from a provider."

DC
Dmitri C.
SaaS founder · Chișinău