Skocz do zawartości
Kolopik

Migracja kont klientów Cpanel/WHM -> DirectAdmin

Polecane posty

Witam, aktualnie posiadam konto reseller z Cpanel/WHM postanowiłem przejść na serwer dedykowany z DirectAdmin'em na pokładzie, lecz mam problem z migracją wszystkich kont. Na jakimś zagranicznym forum znalazłem skrypt, który tworzy backup z poziomu WHM, ale coś nie chce zadziałać (prawdopodobnie połączenie FTP z moim dedykiem)

 

Skrypt wygląda tak:

 

<?php

/*

dv at josheli.com

3/4/2004

 

What it does:

It will request cpanel make full backups of all accounts under a reseller.

It uses cURL, optionally over SSL.

 

How it works:

Reads all accounts (domain, cpanel and username specifically) from the listaccts page in WHM

Uses cUrl over SSL to call the dofullbackup script of cpanel for each account, using the

account's username and the reseller's password

 

This script doesn't require cron, but could use it.

Cron for Windows:

http://www.kalab.com/freeware/cron/cron.htm

 

Instructions:

1. Make sure you have the curl extension for PHP available

2. Modify "config" variables below, to suit

3. From the command prompt:

>php bkup_full.php

4. ([Or] Optionally) Set up a cron job to call this script

5. If you're going to have it ftp somewhere, make sure that server is setup correctly

6. Since it could take several minutes to generate the backup and ftp it,

and you can't have this request script just waiting around trying to

figure out if the backup/ftp cycle is complete, it might be beneficial

to have another script check for completion, and delete the generated

backup if there was success.

 

*/

 

/*** BEGIN CONFIG ***/

 

$reseller = 'Ip resellera';//your reseller url

$whmUser = 'user whm';//your web host manager user name

$whmPass = 'haslo whm';//your web host manager password

$bkUpReseller = false;//backup the reseller account also? (it's not in the listaccts page)

$resellerCpTheme = 'x3';//if you want to back up reseller, we need the reseller cpanel theme

 

/*

Destination for the backup...

 

$destType = '/';// Home Directory

$destType = '';// Remote FTP Server

$destType = 'passiveftp'; //Remove FTP Server (Passive mode transfer)

*/

$destType = 'ftp';//^^^

$destServer = 'ftp://ip serwera dedykowanego';//only if $destServer = 'ftp' or 'passiveftp'

$destUser = 'login konta ftp';//only if $destServer = 'ftp' or 'passiveftp'

$destPass = 'haslo do konta ftp';//only if $destServer = 'ftp' or 'passiveftp'

$destEmail = 'kacperinjo@gmail.com';//optional; cpanel will send an email when generation is complete

 

$logType = 'echo';//output a log to 'file' or 'echo' or 'none'(no log)

$logFileName = 'bkup_full_log.txt';//can include a path too; only makes sense if $logType = 'file'

$useSsl = false;//if true, requires SSL on your site, or modify this script to use the shared SSL; this hasn't really been tested

 

/*

A comma-separated list of domain names to backup;

Leave blank to backup all domains found in reseller WHM

If not blank, ONLY the domains listed will be backed up.

If listed, the domains must be listed EXACTLY like they appear on the

list accounts page in WHM, i.e. usually without 'www.'

$domains = 'example1.com,example2.net';

*/

$domains = '';

 

/*** END CONFIG ***/

 

/*** BEGIN MAIN ***/

@set_time_limit(0);

$time_start = getMicroTime();

 

if (!extension_loaded('curl')) {

dl('php_curl.' .PHP_SHLIB_SUFFIX) or die("Could not load curl extension");

}

 

if($useSsl) {

$protocol = 'https://';

$cpPort = '2083';

$whmPort = '2087';

writeLog("Using SSL.\n");

}

else {

$protocol = 'http://';

$cpPort = '2082';

$whmPort = '2086';

writeLog("Not using SSL.\n");

}

 

$domains = trim($domains);

if(!empty($domains)){

$chkDoms = true;

$domains = explode(',',$domains);

foreach($domains as $d){

$domains[] = trim($d);

}

}

else {

$chkDoms = false;

$domains = array();

}

//$postFields = urlencode("dest=$destType&server=$destServer&user=$destPass&pass=$destPass&email=$destEmail");

$postFields = '';

$postArray = array();

$postArray['dest'] = $destType;

$postArray['server'] = $destServer;

$postArray['user'] = $destUser;

$postArray['pass'] = $destPass;

$postArray['email'] = $destEmail;

 

$thingy = '';

foreach ($postArray as $k=>$v)

{

$thingy.= "$k=".utf8_encode($v).'&';

}

$postFields = substr($thingy,0,-1);

 

 

//get the WHM 'list accounts' page

writeLog("Retrieving WHM accounts page...\n");

$acctsPage = getByCurl("$protocol$reseller:$whmPort/scripts2/listaccts?viewall=1",$whmUser,$whmPass);

//get each accounts table row

$int2 = preg_match_all("/<tr class=(?:tdshade2|tdshade1)>(.*?)<\/tr>/is", $acctsPage, $matches);

 

$accounts = array();

if($int2 > 0 && is_array($matches[1])) {

writeLog("Parsing accounts...\n");

foreach($matches[1] as $match) {

 

$accDom = '';

$accUser = '';

$accTheme = '';

$r = '';

$fullUrl = '';

 

$account = explode('</td><td>',$match);

$accDom = strip_tags(trim($account[0]));//domain

if($chkDoms)

if(!in_array($accDom,$domains)) continue;

$accUser = strip_tags(trim($account[2]));//username

$accTheme = strip_tags(trim($account[9]));//cpanel theme

 

$fullUrl = "$protocol$accDom:$cpPort/frontend/$accTheme/backup/dofullbackup.html";

writeLog("Requesting backup of $accDom...\n");

$r =& getByCurl($fullUrl,$accUser,$whmPass,array('CURLOPT_POST'=>$postFields));

if($r === false){

writeLog("Backup request of $accDom caused an unknown error.\n");

}

else {

writeLog("Backup request of $accDom complete.\n");

}

//writeLog("\n\n--$accDom--\n\n$r\n\n------\n\n");

}

}

 

if($bkUpReseller){

$fullUrl = "$protocol$reseller:$cpPort/frontend/$resellerCpTheme/backup/dofullbackup.html";

writeLog("Requesting backup of $reseller...\n");

$r =& getByCurl($fullUrl,$accUser,$whmPass,array('CURLOPT_POST'=>$postFields));

}

 

$time_end = getMicroTime();

$time = $time_end - $time_start;

writeLog("Elapsed time: ".round($time,2)." seconds.\n");

 

/*** BEGIN FUNCTIONS ***/

 

function getByCurl($url, $user = '', $pass = '',$extra = '') {

global $useSsl;

 

$ch = curl_init();

//tells curl to save result in a variable instead of outputing to page

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_USERPWD, "$user:$pass");

curl_setopt ($ch, CURLOPT_COOKIEJAR, './cookie.txt');

curl_setopt ($ch, CURLOPT_FOLLOWLOCATION,1);

if(!empty($extra) && is_array($extra)){

foreach($extra as $opt=>$val){

switch($opt){

case 'CURLOPT_REFERER':

curl_setopt($ch,CURLOPT_REFERER,$val);

break;

case 'CURLOPT_POST':

case 'CURLOPT_POSTFIELDS':

curl_setopt($ch,CURLOPT_POST,1);

curl_setopt($ch,CURLOPT_POSTFIELDS,$val);

break;

}

}

}

if($useSsl){

curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);

curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);

}

$result = curl_exec($ch);

curl_close($ch);

 

return $result;

}

 

function writeLog($entry) {

global $logType,$logFileName;

 

$method = strtolower($logType);

 

$entry = date('r').' - '.$entry;

 

if($method == 'file') {

$fp = fopen($logFileName,'ab');

}

elseif($method == 'echo'){

if(isset($_SERVER['REQUEST_METHOD'])) {

echo nl2br($entry);//browser

flush();

return;

}

else {

$fp = STDOUT;//cli

}

}

else {

return;

}

 

fwrite($fp, $entry);

 

if($method == 'file')

fclose($fp);

 

return;

}

 

function getMicroTime(){

list($usec, $sec) = explode(" ",microtime());

return ((float)$usec + (float)$sec);

}

 

?>

 

Kiedy uruchamiam skrypt wypluwa wynik:

 

Wed, 27 Apr 2011 07:53:21 -0500 - Not using SSL.

Wed, 27 Apr 2011 07:53:21 -0500 - Retrieving WHM accounts page...

Wed, 27 Apr 2011 07:53:24 -0500 - Elapsed time: 2.76 seconds.

 

Niestety nic poza tym. Na koncie FTP ciągle pusto. Czy ktoś już się w to bawił, bądź tym skryptem?

Proszę o pomoc :)

Z góry dziękuję :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Właśnie problem polega na tym, że nie mogę otrzymać backupu. Firma, w której trzymam serwer odmówiła mi podesłania backupu resellera na moje konto FTP. Muszę poradzić sobie sam. Chciałbym to zrobić za pomocą tego "pluginu" do DA, żeby poszło szybciej, bo mam około 6gb danych :/

Edytowano przez Kolopik (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Masa firm wyłącza backupowanie, bo to zajeżdża serwer. To żadna "niespotykana" firma, to jest standard.

Ten skrypt raczej sobie odpuść (szczególnie, że on wymaga włączonej opcji backup), bo oba panele się rozwijają (szczególnie cPanel ma od groma zmian każdego tygodnia), a że nie jest on (skrypt) w takim samym tempie rozwijany, to bardzo często powoduje ogrom błędów, które później będą się za Tobą ciągnęły latami.

Niestety, popełniłeś "błąd" (w sensie, że nie byłeś od początku pewny na czym chcesz mieć klientów, bo osobiście nie uważam wyboru cpanelu za błąd) na początku i teraz musisz ponieść tego konsekwencje. Imho najlepszym wyjściem z tej sytuacji będzie poproszenie tej firmy o przeniesienie resellera na ICH serwer dedykowany (powinni to zrobić, bo to jednak większa kasa dla nich w perspektywie), a po tygodniu przenieś sobie to na jakiś VPS z cpanelem (licencja jest tańsza). Sam przez to przechodziłem parę lat temu, uwierz że jest to najlepsze rozwiązanie. Ewentualnie zamiast tego VPSa konwersja do DA (ale to, jak już napisałem, zdecydowanie Ci odradzam).

Edytowano przez is_wm (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
To żadna "niespotykana" firma, to jest standard.

 

Nie wiem jak jest w innych firmach z backupem, czy to DA czy te cPanel w tej opcji powinien być włączony.

 

Nie wyobrażam sobie, żeby klient nie mógł zrobić sobie swojej kopii zapasowej i ściągnąć jej nawet na serwerach budżetowych.

 

Zresztą może jeden klient na 100 używa opcji backupu z panelu.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Wyjątkowo mało klientów musisz mieć, skoro nie wiesz jak poważny jest / może być to problem.

Userki mogą wygenerować ogromny load, wystarczy że kilku z nich zechce to zrobić w jednym czasie. Wystarczy natomiast, gdy udostępni się tę opcję w jakiś godzinach określonych - wtedy wilk syty i owca cała.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Kurczę, czuje się trochę nieswojo. Ale muszę Wam to powiedzieć. Kolopik odpoczywa od forum na dwa tygodnie, więc z odpowiedzią drodzy Panowie musicie poczekać.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Wyjątkowo mało klientów musisz mieć, skoro nie wiesz jak poważny jest / może być to problem.

Userki mogą wygenerować ogromny load, wystarczy że kilku z nich zechce to zrobić w jednym czasie. Wystarczy natomiast, gdy udostępni się tę opcję w jakiś godzinach określonych - wtedy wilk syty i owca cała.

 

Tak widać jakie masz pojęcie o temacie. :)

 

Mamy tylko 10 klientów na kilkunastu serwerach. Backup jest robiony codziennie i jakoś nie ma dużego loadu, oczywiście że w odpowiednich godzinach, dziwię się że tego nie wiedziałeś.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


×