ISPmanager vs Plesk

Выбор в пользу ISPmanager был обусловлен, прежде всего, наличием в хозяйстве BillManager, изделием той же мануфактуры. Ну, боле лучшая интеграция, вот это все. Но это не в первую очередь, изначально было желание избавиться от Plesk.

Я несколько лет прожил рядом с Plesk 10/11 и готов признать, что это зрелый, хорошо укомплектованный, продуманный и серьезный продукт. Я нечасто сталкивался с CPanel, чуть больше на данный момент вник в ISPmanager, так вот, по большинству направлени Plesk их затмевает. Но не по всем.

Для пользователя, для бизнесмена — да, отличная вещь этот Plesk. Симпатичный, многое умеет, обновляется, развивается, присутствует более-менее вменяемая поддержка. С другой стороны, Plesk диктует что и как вы должны использовать. Поддержка системных сервисов обусловлена лицензией. При установке панель сносит все, что ей не нравится и устанавливает то, что хочет. Она всюду запускает свои щупальца, управляет всем, контролирует все, чему обучена (и что покрыто лицензией). У вас сто серверов, для вас важно единообразие, контроль, быстрое «шаблонное» обучение персонала, оперативное развертывание новых серверов? Plesk вам понравится.

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

Отдельно скажу про лицензию — она дешевле и тоже проще, без странной необходимости доплачивать за отдельные компоненты.

Изначально, как любитель нового, я остановился на версии ISPmanager 5 lite. Она объективно удобнее и так же объективно беднее схожей по цене версии ISPmanager 4 pro. Тут выяснилось, что версии 5 pro нет и неизвестно когда будет. Также стало понятно, что несмотря на статус товарного продукта, далеко не все приемлемо работает. Накопленные коллективным разумом знания по «четверке» неприменимы, каждый вопрос нужно адресовать поддержке, что тоже не гарантия быстрого разрешения проблемы.

Один пример — установил ISPmanager 5 lite, связал с Billmanager, завел клиента. В ISPmanager попал только клиент (пользователь), при этом домен не создался, www-домен не создался, почтовый домен не создался.

Короче, обменял лицензию 5 Lite на 4 Pro. Тоже не подарок, надо сказать. Несколько попыток установки «по инструкции» в полной или рекомендованной конфигурации прошли неудачно. Каждый раз все заканчивалось на этапе «Checking www …». Несколько раз восстанавливал «виртуалку» из девственно пустого образа и начинал заново. В итоге догадался установить минимальную конфигурацию, в которую затем по-очереди добавлял компоненты (возможности), попутно вычитывая логи и устраняя затыки. Это несложно, но муторно — 6 часов ушло.

Перенос имеющихся клиентов, их доменов, сайтов, почты занял куда больше. Встроенным в ISPmanager импортом из архивов, сделанных в Plesk, я пользоваться не стал по нескольким причинам. Первое, этот импорт глючит, как многое в ISPmanager, разнообразно и непредсказуемо, тем более, что официально он не поддерживает Plesk 11. Второе и самое важное — импорт через ISPmanager не дает в итоге никакой связи с биллингом, туда этих клиентов придется привязывать руками.

В итоге процесс выглядел так:

  • Установка ISPmanager, создание шаблонов (будущих тарифов)
  • Привязка Billmanager-ISPmanager, создание новых тарифов, полностью копирующих старые, до окончания переноса с нулевой ценой.
  • Переименование пользователя и домена в старой услуге типа «хостинг» у клиента. Создать вторую услугу с одинаковыми именеи и доменом не получится, к сожалению, что очень неудобно.
  • Заведение новой услуги хостинга на новом сервере с новым тарифом и прежними данными.
  • Ручной перенос баз данных, настроек доменов, почтовых ящиков, сайтов на новый сервер.
  • Проверка работоспособности сайтов на новом месте, изменение записей в DNS на прежнем месте.
  • Повторить по числу клиентов.

В ходе переноса пришлось понизить версию PHP с 5.4 до 5.3, поскольку старинные сайты иначе пришлось бы существенно править. На прежнем месте была 5.2, так что выбран некий компромиссный вариант. Инструкция нашлась здесь, почти пошаговая, разве что версия другая и пакетов пришлось устанавливать больше.

Коротко

$ apt-get remove --purge `dpkg -l | grep php | grep -w 5.4 | awk '{print $2}' | xargs`
 
$ VERSION="5.3.3-7+squeeze17"
$ apt-get install php5=$VERSION php5-cli=$VERSION php5-common=$VERSION libapache2-mod-php5=$VERSION  php5-cgi=$VERSION php5-gd=$VERSION 
$ echo php5 hold| dpkg --set-selections
$ echo php5-cli hold| dpkg --set-selections
$ echo php5-common hold| dpkg --set-selections

Для переноса баз данных сделал небольшой скрипт mysqldump/mysql, которому нужно было только дать название базы. Ее, правда, для начала приходилось руками заводить в панели.

Почту переносил вручную, благо, мало кто ей пользуется. Все логины и пароли Plesk хранит в открытом виде, то есть их запросто можно узнать. Дальше простыня как раз на эту тему. Собрано из разных источников и наспех адатировано, так что все это неидеально, но вполне работает.

*** BASIC QUERY PLESK ***

mysql -uadmin -p` cat /etc/psa/.psa.shadow` -Dpsa -e"XXX"


*** DATABASES AND DATABASE USERS ***

SELECT domains.name AS domain_name,
data_bases.name AS database_name, db_users.login, accounts.password
FROM data_bases, db_users, domains, accounts
WHERE data_bases.dom_id = domains.id
AND db_users.db_id = data_bases.id
AND db_users.account_id = accounts.id
ORDER BY domain_name;


*** MAIL USERS AND REDIRECTS AND ALIASES ***

select mail.id, mail_name,name,password, address, GROUP_CONCAT( mail_aliases.alias SEPARATOR ',') as aliases
from mail 
left join domains on mail.dom_id = domains.id
left join accounts on mail.account_id = accounts.id
left join mail_redir on mail.id = mail_redir.mn_id
left join mail_aliases on mail.id = mail_aliases.mn_id
group by mail.id
order by name


*** FTP USERS ***

select REPLACE(sys_users.home,'/var/www/vhosts/','') AS domain,
sys_users.login,accounts.password, smb_users.contactname, smb_users.email, smb_users.companyname, smb_users.phone, smb_users.address
 FROM sys_users
left join accounts on sys_users.account_id=accounts.id
left join smb_users on smb_users.login = sys_users.login
order by sys_users.home ASC;

*** DOMAINS AND ALIASES***

select clients.login, domains.name, GROUP_CONCAT( DISTINCT CONCAT(domainaliases.name, ' (', domainaliases.mail,')' ) SEPARATOR ', ') as aliases,
GROUP_CONCAT( DISTINCT domainaliases.displayname SEPARATOR ', ') as aliasesdsp
,
GROUP_CONCAT( CONCAT(dns_recs.type, ' ', dns_recs.val ) SEPARATOR '\n') as dns

from domains 
left join clients on clients.id = domains.cl_id
left join dns_recs on dns_recs.dns_zone_id = domains.dns_zone_id
left join sys_users on sys_users.login = clients.login
left join domainaliases on domains.id = domainaliases.dom_id
group by domains.id
order by clients.login

С такими средствами малой механизации на перенос одного клиента уходило примерно 15-20 минут. В некоторых случаях приходилось донастраивать по месту CMS, в основном из-за использования абсолютных путей (/var/www//data/www/domain.ru вместо /var/www/vhosts/domain.ru/httpdocs) и /tmp папки, которая в ISPmanager не входит в open_basedir, в отличие от Plesk.

Отличная дурная работа, которая особо не нагружает мозг, но при этом создает полное ощущение всепоглощающей занятости.

Последние 5 копеек про ISPmanager. О поддержке. Точнее, о форуме поддержки. Много раз замечено, что русские форумы обладают особым шармом. Пренебрежение, снисходительность, немного грубости и хамства — все это есть, все такое родное и знакомое. Есть и исключения, редкие, от того неожиданные и особо приятные.

А, нет, еще 2 копейки. ISPmanager — продукт, созданный программистами. Он структурирован по логике тех, кто понимает, что за каждой кнопкой стоит вон тот компонент или вот этот сервис. Терминология подогнана под существующую структуру. Объясните среднему клиенту про домены, www-домены и почтовые домены, про их взаимосвязь и отличия. Или про «Авто поддомены в отдельной директории». А он должен это знать, по идее. И ему предлагают справку, помощь, видео-уроки. Много вы знаете людей, готовых инвестировать свое время в изучение хотя бы основ панели управления хостингом? Да и вообще способных это дело осилить. Гораздо больше тех, кто начинает чувствовать себя умственно неполноценным, раздражается, злится. Ну или спешит обратиться в поддержку, что серьезно снижает полезность панели управления для хостера.

Починка named.conf в Plesk 11

Это на память и на будущее, не последний раз потребовалось, вероятно.

После установки (наконец-то) всех доступных обновлений на сервер с панелью Plesk 11 случилось неприятность с сервисом named — он сперва отказывался запускаться, а затем потерял половину данных о доменах.

На этот случай у Parallels есть статья в базе знаний и вложенный shell script для починки named.conf
Одна проблема, они забыли о синонимах доменов, которые в табличке domains не хранятся. Поэтому в нашем случае скрипт восстановил не более половины имевшихся зон.

Я посмотрел структуру базы данных psa, нашел синонимы в табличке domainaliases и подправил скрипт. (скачать dns_rebuild.sh.gz).

#!/bin/sh

ADMIN_PASS=`cat /etc/psa/.psa.shadow`
MYSQL_BIN_D=`grep MYSQL_BIN_D /etc/psa/psa.conf | awk '{print $2}'`
PRODUCT_ROOT_D=`grep PRODUCT_ROOT_D /etc/psa/psa.conf | awk '{print $2}'`
mysql="${MYSQL_BIN_D}/mysql -N -uadmin -p${ADMIN_PASS} psa"

query="select name from domains;"
domains=`echo $query | $mysql `

echo "Updating domains"
for i in ${domains}; do
    echo "$i"
    $PRODUCT_ROOT_D/admin/sbin/dnsmng --update $i
done 

query="select name from domainaliases;"
domains=`echo $query | $mysql `

echo "Updating domain aliases"
for i in ${domains}; do
    echo "$i"
    $PRODUCT_ROOT_D/admin/sbin/dnsmng --update $i
done 

Клиенты, подписки, домены в Plesk 10

Есть клиент. У него была подписка с доменом aaa77.ru. Затем в подписку был добавлен еще один домен — bbb77.ru. Через какое-то время aaa77.ru стал не нужен. Задача — удалить из подписки первый домен, оставив второй. Не меняя логин (панель, ftp) клиента.

Первый (aaa77.ru) — это «главный домен» подписки и удалить его нельзя. Но можно переименовать, заодно сменив корневой каталог сайта. Проблема — сменить имя домена на bbb77.ru нельзя, поскольку он уже существует.

Процедура:

1. Делаем резервную копию корневой папки второго домена (bbb77.ru). Это необходимо сделать, иначе на втором пункте все файлы будут удалены. Альтернативно, можно создать новую корневую папку (пустую) и сменить ее для домена bbb77.ru через GUI (Websites & domains → bbb77.ru → Document root).

2. Удаляем домен bbb77.ru. Ахтунг! Папка, на которую указывает Document root тоже будет удалена! Это очень опасная практика, я бы сделал опцию оставить/удалить данные. В HSphere, которую Parallels купили, именно так и было, если память не изменяет.

3. Переименовываем aaa77.ru в bbb77.ru и изменяем для него корневую папку, это там же в «Сайтах и доменах».

Побочные эффекты:

1. Переименуется папка /var/www/vhosts/aaa77.ru/ (корень подписки) в bbb77.ru. Это логично, но может привести к проблемам в настройках CMS и прочих веб-приложений, если где-то используется абсолютный путь.

2. Корневой каталог первого сайта останется, его надо удалять вручную. Загадка — удалит или не удалит данные какая-то операция в Plesk? Бездна логики.

3. Пропадут почтовые ящики на домене bbb77.ru, их надо будет создавать заново. Можно сделать это заранее (я не удосужился).

4. Последнее, но важное — Plesk похерил .htaccess из корневой папки bbb77.ru. Скорее всего — в процессе переименования (см. п.1).

UPDATE Еще не все — опять связано с п.1. Папку Плеск переименовал, а вот open_basedir в php.ini (которые теперь у каждого клиента отдельные) так и остался прежний путь! Симптомы — не работает PHP. Решение — поправить ~/etc/php.ini руками, либо через настройки PHP в GUI надо сменить значение для open_basedir с Default на единственную опцию в выпадушке. Потом можно менять назад, главное чтобы php.ini обновился.