Batch скрипт для добавления новых доменов на собственный хостинг (с SSL и блэкджеком)

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
lazhu
сержант
Сообщения: 254
Зарегистрирован: 2013-08-10 14:28:38
Контактная информация:

Batch скрипт для добавления новых доменов на собственный хостинг (с SSL и блэкджеком)

Непрочитанное сообщение lazhu » 2023-03-24 11:21:41

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

Код: Выделить всё

#!/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>
Дефолтный вхост (при корректно настроенном днс и отсутствии отдельного вхоста, именно он выдается по запросу URI домена):

Код: Выделить всё

% 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>
SNI map для постфикса:

Код: Выделить всё

%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

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/