Ответ
Для конфигурации серверов (Configuration Management) я в основном использую Ansible, но также знаком с альтернативами. Их ключевая задача — привести сервер в желаемое состояние, установив пакеты, настроив сервисы и развернув код.
Ansible — мой основной инструмент для этого. Он агентлесс, использует SSH, и его YAML-плейбуки легко читать.
- Почему Ansible? Низкий порог входа, идемпотентность (можно безопасно запускать плейбук много раз), огромная коллекция модулей (Ansible Galaxy).
- Пример плейбука для настройки веб-сервера Nginx с установкой SSL-сертификата:
- name: Configure web servers
hosts: webservers
become: yes
tasks:
- name: Ensure Nginx is installed and latest version ansible.builtin.apt: name: nginx state: latest
- name: Copy custom Nginx configuration ansible.builtin.template: src: nginx.conf.j2 dest: /etc/nginx/sites-available/default notify: restart nginx
- name: Copy SSL certificates from secure location ansible.builtin.copy: src: /secure/ssl/{{ inventory_hostname }}.pem dest: /etc/ssl/certs/ mode: '0600' handlers:
- name: restart nginx
ansible.builtin.service:
name: nginx
state: restarted
Другие инструменты в этой категории:
- Puppet — использует декларативный язык на основе Ruby DSL. Требует установки агента на целевых хостах и центрального сервера (Puppet Master). Мощный, но с более сложной архитектурой.
- Chef — также агентный, где конфигурация описывается на Ruby ("рецепты" и "поваренные книги"). Очень гибкий, но требует знания Ruby.
- SaltStack — может работать как в агентном (Salt Minions), так и в агентлесс-режиме (используя SSH). Отличается высокой скоростью выполнения за счет использования ZeroMQ для коммуникации.
В современном DevOps-стеке Ansible часто комбинируют с Terraform: Terraform создает виртуальные машины в облаке, а Ansible сразу же их настраивает (используя provisioner или отдельный пайплайн).