У меня есть небольшой виртуальный сервер Linux (500 мегабайт оперативной памяти). Со временем я могу получить еще один или два сервера, не больше.
Я разработчик, а не системный администратор, поэтому я не знаю лучших практик администрирования Linux. Я знаю, что не хочу настраивать машину, выдавать кучу команд для настройки пользователей, установки пакетов, изменения переменных среды, только чтобы потерять все это, если моя машина выйдет из строя.
Я бы предпочел хранить всю эту информацию в исходном репозитории вместе со своим кодом.
Очевидные решения - марионетка или повар, но я не управляю кластером машин. Мне нужен декларативный способ настройки пользователей, установки пакетов и т. Д., Но я не хочу настраивать сертификаты ssl, главные серверы и т. Д. (Честно говоря, я не могу, мои машины очень дешевые и имеют очень мало памяти).
Есть ли лучшее решение для автономных машин? Я хочу иметь возможность быстро использовать это решение для воссоздания моей машины (на Amazon, linode, в стойке или на моем нижнем рабочем столе).
Puppet довольно легко настроить. Вам не нужно почти ничего делать, и клиент может работать автономно. Позвольте мне привести вам пример. Скажем, у вас есть файл с именем config.pp
со следующими строками:
package { 'apache2': ensure => installed }
service { 'apache2':
ensure => running,
enable => true,
require => Package['apache2'],
}
user { 'bob':
ensure => present,
uid => 1000,
gid => 'bob',
require => Group['bob'],
}
group { 'bob':
ensure => present,
gid => 1000,
}
Если ты бежишь puppet apply config.pp
, он гарантирует, что пакет apache2 установлен, служба запущена и разрешена для запуска при загрузке, и что пользователь bob будет создан с группой bob.
Вот и все - установите марионеточный клиент, введите его в этот файл и выполните команду. Вы можете запланировать это в crontab, если хотите гарантировать, что конфигурация будет контролироваться без мастера. Однажды я установил 10 серверов ganeti, что включает в себя настройку ряда пакетов и конфигураций, по крайней мере, с одной перезагрузкой на полпути - примерно так.
Puppet действительно потребляет немного памяти - 500 МБ - это немного меньше, но если вы собираетесь запускать его в основном для установки, этого должно быть достаточно. Я держу свои собственные серверы на 1 ГБ, по крайней мере, чтобы гарантировать, что марионетка не вызовет проблем для служб, работающих на сервере.
Кроме того, Puppet определенно декларативен, хотя вам может потребоваться немного дополнить его запускаемыми скриптами или кодом Ruby, чтобы научить его новым трюкам. Для ваших нужд маловероятно, что вам придется прибегать к этому.
Cfengine это инструмент управления конфигурацией, который вдохновил Puppet, а затем Chef, зарекомендовавший себя более 15 лет.
Несколько замечаний:
Вы можете автоматизировать процедуры установки и заставить Cfengine проверять их из исходного репозитория и иметь возможность воспроизвести их на любом сервере, если вы потеряете текущий. Вы также получите дополнительное преимущество автоматического исправления - после того, как вы определите состояние, в котором вы хотите, чтобы ваш сервер находился, любые изменения (например, удаление пакета, удаление пользователя и т. Д.) Будут автоматически отменены конфигурацией. инструмент управления.