Версионность конфигураций серверов на базе debian/ubuntu

в 12:50, , рубрики: bitbucket, config, Debian, Mercurial, nix, Ubuntu, системное администрирование, Убунтариум, метки: , , , , ,

Доброго времени суток, уважаемое сообщество.
Решил поделиться небольшой идеей, возможно кому-то будет интересно и полезно.

Устав от утерянных и сломанных конфигураций, авторизацию на серверах под рутом, чтоб перенести новые оптимальные конфигурации, я решил создать репозитарии из папок с конфигурациями и дать к ним доступ в более доступном месте.

Немного о себе

Сам я web-программист, какое-то время сидел на ubuntu, сервера (VPS) практически все на debian. Большого опыта нет в администрировании серверов, в отличии от коллег и хостеров, но всегда очень привлекало знания в эту сторону. Я мог часами сидеть в консоли и решать те или иные задачи. Когда время заканчивалось, более опытные коллеги забирали игрушки задачи и рассказывали что я делаю не так. Но всегда было интересно, что именно они сделали сами и как происходят настройки более нагруженных проектов. Все проекты мы храним в bitbucket, используя систему управления версиями Mercurial. В один прекрасный день решили поддерживать актуальную версию проектов на серверах используя этот же инструмент и очень облегчили себе жизнь. Теперь поднять на сервере последние обновления можно в две команды:

hg pull && hg up

Почему хостеры не предлагают подобное ПО у себя на shared-хостингах остается загадкой. По-моему заливка по FTP вчерашний день. Сейчас приходят новые сотрудники и им потихоньку даем доступ до серверов, но уже под моим контролем, увидев картину с другой стороны я ужаснулся, что именно натворили на сервере найти было очень сложно. После нескольких часов вернуть в нормальное состояние сервер мне и пришла:

Идея на миллион

Получив новый сервер (VPS) на базе debain, я недолго думая создал репозитарий в папке с конфигурациями.

Новый сервер

Все команды производим из под root-пользователя.
Первым делом обновляем ПО на сервере:

apt-get update && apt-get upgrade

Ставим пакет Mercurial (появился в debian 6, но видел статьи установки и под debian 5):

apt-get install mercurial

Переходим в папку с конфигурациями:

cd /etc

Создаем репозитарий:

hg init

на что будет создана скрытая папка ".hg"
Немного расскажем о себе:

nano /etc/.hg/hgrc

Укажем данные:

[ui]
username = User <****@gmail.com>

Уже сейчас можно узнать о всех файлах запустив команду:

hg status

Меркуриал лишь покажет список файлов, которые для него еще новые.

Укажем что хотим добавить все новые файлы в следующий коммит:

hg add

И наконец зафиксируем первое состояние конфигураций:

hg commit -m 'first commit'

Теперь можно спокойно установить и настроить остальное ПО.

В любой момент можно проверить состояние конфигураций используя команду:

hg status

Что именно изменили в файлах можно узнать командой:

hg diff ./путь до файла

Откатить изменения можно командой:

hg revert ./путь до файла

Еще лучше будет ознакомиться со всеми командами:

hg help
Публикация

Когда поднимаем новый сервер или обновляем старый все время вспоминаешь:

  • Где твои памятки по настройке сервера
  • На каком проекте уже поднимал подобное ПО
  • Какой root-пароль от сервера (чтоб прочитать конфиги)

и список может быть большим.

Решил все залить в приватный репозитарий. Повторюсь, что мы используем bitbucket. Создаем на нем репозитарий, получаем путь, что то вроде:

https://bitbucket.org/username/etc-project-a

открываем заново конфигурацию нашего репозитария:

nano /etc/.hg/hgrc

И укажем ниже:

[paths]
default = https://bitbucket.org/username/etc-project-a

Выполним команду:

hg push

На что меркуриал спросит вас данные авторизации на сервере битбакет. Приятная новость, что можно настроить авторизацию по ssh-ключу.

Теперь наши конфигурации в сухом, прохладном месте. Вы всегда можете посмотреть как настроен тот или иной сервер и на примерах поднять новый. Для этого вам надо клонировать репозитарий на локальную машину, либо воспользоваться вполне удобным web-интерфейсом от битбакет.

Плюсы:

  • Храним версии конфигураций
  • Всегда можно откатить к стабильному варианту
  • Можно в одну команду определить что натворили без вас
  • Быстро можно узнать как настроен сервер не авторизовываясь на нем

Минусы:

  • Не забывать коммитнуть последние изменения

Хотел по крону добавить автоматические коммиты, но подумал, что лучше оставить такое простое решение. Возможно есть другие уже готовые решения о чем я бы с радостью ознакомился. Кто знает, может эта небольшая статья поможет вам придумать более простое и полезное решение о котором, я надеюсь, вы тоже с нами поделитесь.

Спасибо.

Автор: Arik

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js