# Конфигурация DNS-зон в Git

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

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

Остановил свой выбор на [dnscontrol](https://stackexchange.github.io/dnscontrol/), написанном на Go, а значит позволяющей использовать бинарные файлы в различных операционных системах. Поддерживает большое число различных провайдеров, и довольно простая в использовании.

Установка тривиальна, либо использовать homebrew:

```shell
brew install dnscontrol
```

Либо скомпилировать с помощью Golang:

```shell
go get github.com/StackExchange/dnscontrol
```

Создал репозиторий [juev/dns-config](https://github.com/juev/dns-config), в котором описал текущую конфигурацию своих доменов.

Для использования достаточно создать два файла:

1. `dnsconfig.js`
1. `creds.json`

В первом описывается конфигурация доменов, во втором размещаются ключи и токены для доступа к регистратору. При этом для того, чтобы можно было разместить второй файл в репозитории, сами токены можно размещать в переменных среды. А в конфигурации использовать имена их переменных.

После создания конфигурации достаточно проверить внесенные изменения с помощью команды:

    dnscontrol preview

И если все устраивает, применить ее:

    dnscontrol push

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

