Batch скрипт для добавления новых доменов на собственный хостинг (с SSL и блэкджеком)
Добавлено: 2023-03-24 11:21:41
Давно не брал я в руки шашек...
Понадобилось тут организовать мини-хостинг. Как обычно ленивая жопа решила это дело автоматизировать.
Используется связка апач+постфикс+давкот, но можно легко модифицировать для любых серверов.
Шаблон вхоста:
Дефолтный вхост (при корректно настроенном днс и отсутствии отдельного вхоста, именно он выдается по запросу URI домена):
SNI map для постфикса:
Понадобилось тут организовать мини-хостинг. Как обычно ленивая жопа решила это дело автоматизировать.
Используется связка апач+постфикс+давкот, но можно легко модифицировать для любых серверов.
Код: Выделить всё
#!/bin/sh
# Принимаем аргументы за список доменов
DOMAINS=$*
# Команды
SED=`which sed`
HTTPD=`which apachectl`
CERTBOT=`which certbot`
POSTMAP=`which postmap`
POSTFIX=`which postfix`
DOVEADM=`which doveadm`
# Пути
WEBROOT='/usr/local/www'
TMPROOT="${WEBROOT}/apache24/data"
CONFDIR='/usr/local/etc'
WEBCONF="${CONFDIR}/apache24/Includes"
CERTDIR="${CONFDIR}/letsencrypt/live"
POSTSSL="${CONFDIR}/postfix/vmail_ssl.map"
DOVESSL="${CONFDIR}/dovecot/conf.d/10-ssl.conf"
# Проходимся циклом по доменам
for DOMAIN in ${DOMAINS}; do
# Имя виртуального хоста (имя домена до последней точки)
VHOST=${DOMAIN%.*}
VHOSTROOT="${WEBROOT}/${VHOST}"
# Выпускаем сертификат letsencrypt (требуется правильно настроенная DNS A запись для домена)
${CERTBOT} certonly --webroot -w ${TMPROOT} -d ${DOMAIN}
# Копируем и редактируем шаблон виртуального хоста
cp ${WEBCONF}/tpl ${WEBCONF}/${VHOST}.conf
${SED} -i '' "s/_DOMAIN_/${DOMAIN}/g;s/_VHOST_/${VHOST}/g" ${WEBCONF}/${VHOST}.conf
# Создаем каталог виртуального хоста и кладем туда дефолтный index.html
mkdir ${VHOSTROOT}
chmod 775 ${VHOSTROOT}
cp ${TMPROOT}/index.html ${VHOSTROOT}
${SED} -i '' "s/It/${VHOST}/" ${VHOSTROOT}/index.html
# Добавляем сертификаты в постфикс и давкот
echo -e "${DOMAIN}
${CERTDIR}/${DOMAIN}/privkey.pem
${CERTDIR}/${DOMAIN}/fullchain.pem" >> ${POSTSSL}
echo -e "local_name ${DOMAIN} {
ssl_cert = <${CERTDIR}/${DOMAIN}/fullchain.pem
ssl_key = <${CERTDIR}/${DOMAIN}/privkey.pem
}" >> ${DOVESSL}
done
# Перезагружаем конфиги
${POSTMAP} -F hash:${POSTSSL}
${POSTFIX} reload
${DOVEADM} reload
${HTTPD} graceful
Код: Выделить всё
% cat /usr/local/etc/apache24/Includes/tpl
<VirtualHost *:80>
ServerName _DOMAIN_
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>
<VirtualHost *:443>
DocumentRoot "/usr/local/www/_VHOST_"
ServerName _DOMAIN_
SSLEngine on
SSLCertificateFile "/usr/local/etc/letsencrypt/live/_DOMAIN_/fullchain.pem"
SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/_DOMAIN_/privkey.pem"
<Directory "/usr/local/www/_VHOST_">
Require all granted
AllowOverride Limit
</Directory>
</VirtualHost>
Код: Выделить всё
% cat /usr/local/etc/apache24/Includes/_default.conf
<VirtualHost *:80>
DocumentRoot "/usr/local/www/apache24/data"
ServerName localhost
<Directory "/usr/local/www/apache24/data">
Require all granted
AllowOverride Limit
</Directory>
</VirtualHost>
Код: Выделить всё
%cat /usr/local/etc/postfix/vmail_ssl.map
domain1
/usr/local/etc/letsencrypt/live/domain1/privkey.pem
/usr/local/etc/letsencrypt/live/domain1/fullchain.pem
domain2
/usr/local/etc/letsencrypt/live/domain2/privkey.pem
/usr/local/etc/letsencrypt/live/domain2/fullchain.pem
domain3
/usr/local/etc/letsencrypt/live/domain3/privkey.pem
/usr/local/etc/letsencrypt/live/domain3/fullchain.pem
domain4
/usr/local/etc/letsencrypt/live/domain4/privkey.pem
/usr/local/etc/letsencrypt/live/domain4/fullchain.pem