Пакетное добавление сайтов в панель ISP Manager 6
Друзья, привет! Недавно столкнулся с задачей, по переносу с сервера на сервер более пятисот сайтов, после переноса все сайты нужно было добавить в панель управления сервером ISP Manager 6, с указанием директории сайта, алиаса, режима работы PHP и его версию, поддержку HTTPS и SSL сертификат. Разумеется вручную, такую работу выполнить невозможно, поэтому я написал скрипт на PHP, который всю работы сделает сам, а именно: — получит нужные данные из конфигурации хостов веб-сервера Apache и добавить сайты в панель. Далее расскажу обо всем подробнее.
О работе скрипта
Скрипт написан на PHP, для его запуска необходимо указать директорию в которой Apache хранит конфигурационные файлы веб-хостов, это может быть директория на сервере /etc/apache2/vhosts/user/ или /etc/httpd/vhosts/user/. Далее скрипт запускается из командой строки с правами root (т.е. вы должны авторизоваться по SSH именно под root).
Запуск скрипт:
php addSitesToIsp.php |
Скрипт обходит все конфигурационные файлы в директории, получает из них данные о домене, SSL сертификате и IP адресе хоста. Затем, проверяет полученные данные на корректность и путем вызова команды exec(), выполняет внешнюю команду, запрос к API панели ISP Manager, на добавление сайта, с указанием всех необходимых параметров. Если домен уже существует в панели, то он просто будет пропущен, API панели сообщит об этом. Скрипт работает как для панели версии 5, так и 6.
Код скрипта
<?php // Скрипт добавляет домены в ISP. /** * Проверка, является ли переменная IP адресом v4 */ function is_IP($ip) { return (bool) (ip2long($ip) > 0); } /** * Проверка, является ли домен корректным */ function is_valid_domain_name($domain_name) { return (preg_match("/^([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i", $domain_name) //valid chars check && preg_match("/^.{1,253}$/", $domain_name) //overall length check && preg_match("/^[^\.]{1,63}(\.[^\.]{1,63})*$/", $domain_name) ); //length of each label } $files = scandir('/etc/apache2/vhosts/user/'); // Путь к директории в которой Apache хранит конфигурационные файлы веб-хостов $i = 0; foreach($files as $file) { $file = trim($file); if(!in_array($file, array('.', '..')) && strpos($file, '.conf') !== false ) { $i++; $data = file_get_contents($file); $regexp = "/ServerName\s([a-z0-9_.-]{3,50})$/ism"; preg_match($regexp, $data, $matched); $regexp = "/VirtualHost\s([0-9.]{7,15})/ism"; preg_match($regexp, $data, $matchedHost); if(isset($matched[1]) && is_valid_domain_name($matched[1]) && isset($matchedHost[1]) && is_IP($matchedHost[1])) { $domain = trim($matched[1]); $ip = trim($matchedHost[1]); $regexp = "/SSLCertificateFile\s[\"]{1}(.*?)([\*a-z0-9_.-]{3,50})[\"]{1}/ism"; preg_match($regexp, $data, $matched); if(isset($matched[2])) { $cert = trim($matched[2]); } else { $cert = ''; } $command = '/usr/local/mgr5/sbin/mgrctl -m ispmgr webdomain.edit aliases=www.' . $domain . ' name=' . $domain . ' owner=admin docroot=/var/www/admin/data/www/' . $domain . ' php_mode=php_mode_mod ' . 'php_version=5.6.40 active=on analyzer=off ipaddr=' . $ip .' email=webmaster@' . $domain . ' ' . ($cert ? 'secure=on ssl_port=443 ssl_cert=\'' . $cert . '\' ' : '') . ' sok=ok ;' . "\n\n"; exec($command); echo 'ADD: '. $domain . " | {$cert} \n"; } else { echo 'NOT FOUND Domain'; } } else { echo 'SKEEP: '. $file . "\n"; } } |
Данный скрипт вы можете изменить под себя. Он хорош как базовая заготовка для манипуляцией большим количеством сайтов в рамках панели ISP Manager и использования его API. Разумеется команды API можно использовать и другие, для других действий с сайтами. А если вам нужна помощь в администрировании серверов, с большими объемами данных, большим количеством сайтов, то обращайтесь, буду рад помочь.

Автор:






