Пакетное добавление сайтов в панель ISP Manager 6

Author Автор: Роман Чернышов    Опубликовано: 7 декабря 2024

Друзья, привет! Недавно столкнулся с задачей, по переносу с сервера на сервер более пятисот сайтов, после переноса все сайты нужно было добавить в панель управления сервером 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 можно использовать и другие, для других действий с сайтами. А если вам нужна помощь в администрировании серверов, с большими объемами данных, большим количеством сайтов, то обращайтесь, буду рад помочь.

Оставить комментарий

Автор блога
Роман Чернышов
Веб-разработчик,
Full Stack
Senior, Architect
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Моя книга
Книга. Веб-разработчик. Легкий вход в профессию
Печатная книга
Веб-разработчик.
Легкий вход в профессию
Купить за 359₽
Популярные записи
Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка