Автоматизация процесса создания виртуальных хостов

В итоге оказалось, что это Redo Backup образ. Shodanshok, спасибо за ваши предложения.

1
28.03.2017, 03:03
3 ответа

GNU make работает хорошо

Вы можете использовать GNU make 1 , создавая новый виртуальный хост так же просто, как выполнить make example.com

Кратко и просто: один статический шаблон

Сначала создайте / etc / apache2 / sites-available / Makefile , содержащий:

% :
    printf '%s\n'                         \
    '<VirtualHost *:80>'                  \
    '  DocumentRoot "/var/www/html/$@"'  \
    '  ServerName www.$@'                 \
    '  <Directory "/var/www/html/$@">'    \
    '    Options +SymLinksIfOwnerMatch'   \
    '    Require all granted'             \
    '  </Directory>'                      \
    '  ServerAlias www.$@'                \
    '</VirtualHost>'                      \
    > "$@"
    a2ensite "$@"
    systemctl restart apache2.service

Обратите внимание, что каждая строка после %: начинается с табуляции, а не с пробелов. Также обратите внимание, что по большей части это ваш файл шаблона, но с d.t замененным на $ @ .

После этого вы можете создать новый виртуальный хост под названием домен.tld :

cd /etc/apache2/sites-available
make domain.tld

Опции добавления: несколько шаблонов

Это был один из простейших способов использования make . Для более сложной конфигурации предположим, что у вас есть два (или более) шаблона. Я покажу один здесь, который я назвал basic.template , в качестве шаблона:

<VirtualHost *:80>
  DocumentRoot "/var/www/html/$domain$"
  ServerName www.$domain$
  <Directory "/var/www/html/$domain$">
    Options +SymLinksIfOwnerMatch
    Require all granted
  </Directory>
  ServerAlias www.$domain$
</VirtualHost>

Затем вы измените (упростите!) Свой Makefile :

% :
    sed 's/\$$domain\$$/$@/g' < "$<" > "$@"
    a2ensite "$@"
    systemctl restart apache2.service

.PHONY : all
all :
    @true

Здесь рецепт включает используя sed , чтобы заменить переменную вида $ domain $ на предполагаемое доменное имя. Кроме того, я добавил цель PHONY под названием all , использование которой скоро станет очевидным.

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

#!/bin/sh
# File update-makefile
# Call as:
#    ./update-makefile domain.tld basic.template
sed '/^all :/s/$/ '"$1"'/' < Makefile > Makefile.new
printf '%s\n' "$1 : $2" >> Makefile.new
mv Makefile.new Makefile

Обратите внимание, что здесь есть дополнительный шаг добавления 2 нового виртуального хоста в Makefile. Это позволяет заставить увидеть, от какого шаблона domain.tld зависит . Затем вы можете сделать:

cd /etc/apache2/sites-available
./update-makefile domain.tld basic.template && make

При такой настройке каждый сайт будет обновлен, если его соответствующий шаблон изменился.

Важно, чтобы все были первой названной целью. Это делает его значением по умолчанию, когда make вызывается без аргументов. Сценарий update-makefile добавляет новый домен как зависимость all , поэтому make воссоздает его, если он устареет по отношению к его собственной зависимости, файл шаблона.


1 make - это инструмент, который используется для создания целевых файлов из набора рецептов и зависимостей , которые задокументированы в a Makefile . В синтаксисе GNU

% :
    # do stuff

- это шаблонное правило . В нем указано, что файл с любым именем (% ) может быть создан в качестве цели и что он не имеет зависимостей. # do stuff - это рецепт (любой сценарий оболочки) с отступом в одну табуляцию. Существуют переменные, которые можно использовать для ссылки на имя цели ( $ @ ), первую зависимость ( $ <) или все зависимости ( $ ^ ) и другие. Для получения дополнительной информации см. Википедию .

В вашей системе может не быть установлено приложение make , и в этом случае вам придется установить его самостоятельно. Кроме того, в некоторых системах используется вариант BSD make . Концепции те же, но синтаксис правил немного отличается от версий GNU.

2 Убедитесь, что вы используете >> для добавления, а не > для перезаписи!

3
27.01.2020, 23:19

Поздравляем, вы делаете первые шаги к управлению конфигурацией!

Здесь есть много возможных результатов, но в основе всего этого лежит создание шаблона фрагмента конфигурации и создание экземпляров этого шаблона.

Вы правы в том, что несколько переменных в вашем шаблоне могут соответствовать вашим потребностям; это просто вопрос выбора какого-либо языка программирования (даже простого shell) для заполнения шаблона нужными значениями. Ответ Fox'а с использованием Make - хороший короткий пример; и вы могли бы изменить его, объявив все сайты позже в Makefile, чтобы перестроить их все, когда вы захотите обновить шаблон.

Это на простом этапе управления конфигурацией (сохраните свой скрипт, заполняющий шаблон переменными, на случай, если вы захотите обновить множество конфигураций позже).

К более сложным относятся инструменты управления конфигурацией, такие как Puppet, Chef, Cfengine, Salt и другие.

Вот готовый пример использования Puppet с модулем PuppetLabs Apache и заполнением его данными из Hiera (структурированный набор значений ваших переменных).

1
27.01.2020, 23:19

Вы можете использовать ansible, он использует Jinja2 для создания шаблонов, а также позволяет автоматизировать множество других вещей.

0
27.01.2020, 23:19

Теги

Похожие вопросы