Скрипт массовой установки wordpress
Апр 16
Небольшой скриптец на php, поможет установить сразу n вордпрессов, код открыт, можно интегрировать в свои решения. Скрипт под шелл, из веба незнаю будет работать или нет.
Исходные данные, нужные для работы. Надо дамп базы, дистрибутив вп, файл задания.
Дамп я делаю так – ставлю пустой вп, удаляю все не нужное – дефолтные страницы, записи, ссылки, добавляю нужные плуги, чпу и т.д., в зависимости от нужд. Дистрибутив ессно должен иметь все эти плуги. Это все делается не каждый раз, дамп у меня один на всех, дистр под новый замес обновляю (тему меняю, прописывается в дампе потом).
В дампе надо поменять значения полей:
- siteurl site.ru на {siteurl}
- blog title на {blogtitle}
- home site.ru {home}
- admin_email {mail}
1 и 3 это урл блога, второе заголовок блога, четвертое – мыло админа. При желании можно выставить много значений, например запрет коментирования, кол-во строк в рсс и т.п. Я простой пример рассмотрю.
Формат задания
урл|заголовок блога
урл2|заголовок блога2
и т.д.
Немного про конфиги. У меня на сервере так настроены папки с сайтами – /home/user/site.ru/ Т.е. скрипт высчитывает рабочий путь путем $installation_dir + $url. База создается для site.ru просто site.
Сам скрипт. Комментировал по енг, потому что лень переключатся на русский, думаю итак понятно. Отработал три домена меньше чем за секунду.
#!/usr/bin/php
//author Alex Volkov, http://alexvolkov.ru
//distributed AS IS!
<?
//blog settings
$admin_mail = "my@mail.ru";
//folders and files
$task_file = "task.txt";
$dump_file = "dump.sql";
$installation_dir = "/path/to/domains/";
$distr_folder = "/wordpress/";
$work_dir = exec("pwd");
//db settings
$db_user = "user";
$db_pass = "pass";
//permissions settings
$group_id = "user";
$owner_id = "group";
function MakeInstall($url, $blog_title){
global $admin_mail, $dump_file,
$installation_dir, $distr_folder,
$work_dir, $db_user, $db_pass,
$group_id, $owner_id;
//start editing sql dump
$tmp_dump = file_get_contents($work_dir."/".$dump_file);
if(!$tmp_dump){ echo "no dump file here"; }
// make some replacements, i think it's clear to understand what i've changed
$tmp_dump = preg_replace("!{siteurl}!si","http://". $url, $tmp_dump);
$tmp_dump = preg_replace("!{home}!si", "http://".$url, $tmp_dump);
$tmp_dump = preg_replace("!{blogtitle}!si", $blog_title, $tmp_dump);
$tmp_dump = preg_replace("!{mail}!si", $admin_mail, $tmp_dump);
//create tmp file for dump
exec("touch tmp_dump.sql");
$tmp_file = fopen("tmp_dump.sql", "a+");
fwrite($tmp_file, $tmp_dump);
fclose($tmp_file);
$db_name = explode(".", $url);
$db_name = $db_name[0];
//prepare the query
$query = "CREATE DATABASE ".$db_name.";";
//execute it
exec("mysql -u ".$db_user." -p".$db_pass." --execute=' ".$query."'");
//importing the dump
exec("mysql -u ".$db_user." -p".$db_pass." ".$db_name." < tmp_dump.sql");
//remove temporary dump
exec("rm -f ./tmp_dump.sql");
//now copying wp distr
exec("cp -R ".$work_dir.$distr_folder."* ".$installation_dir.$url);
//here we're copying the configuration file and connect wp to db
//check before that your names in sample config like mine
$sample_config =
file_get_contents($work_dir.$distr_folder."wp-config-sample.php");
$sample_config =
preg_replace("!putyourdbnamehere!si", $db_name, $sample_config);
$sample_config =
preg_replace("!usernamehere!si", $db_user, $sample_config);
$sample_config =
preg_replace("!yourpasswordhere!si", $db_pass, $sample_config);
//writing our connect data into config
$tmp_file = fopen("wp-config.php", "a+");
fwrite($tmp_file, $sample_config);
fclose($tmp_file);
exec("cp ".$work_dir."/wp-config.php ".$installation_dir.$url);
exec("rm -f ./wp-config.php");
//changing the owner/group permissions
exec("chown -R ".$group_id.":".$owner_id." ".$installation_dir.$url);
}
$directive = file($task_file);
foreach($directive as $command){
$command = explode("|", $command);
if($command[0] !== ""){MakeInstall($command[0], $command[1]);}
}
?>
Скачать скрипт
P.S. Знатокам линуха – при chown идет GID:UID или UID:GID ? Маны рулят. OWNER:GROUP:

Апр 16 at 21:38
Джедай, епт, твою бы голову да в трезвые руки – был бы королем мира
Апр 19 at 10:54
Неистребимы в нашем народе кулибины – все стремятся переделать, лишь бы не пользоваться нормальным сервисом. Нормальные хостинги все эти функции предоставляют по определению, да еще и не за самые большие бапки.
Апр 19 at 12:15
Shimus, я как бы не переделывал, я с нуля писал. Не подскажешь хостинг, который предоставляет такую возможность автоматом установить сразу N вордпрессов, да еще и с минимальными данными – урл и заголовок?
Апр 19 at 16:22
Нет хостингов с такой возможностью, так что скрипт весьма полезен, автору спасибо.
Май 11 at 14:11
Действительно интересно написано. Добавил в избранное, буду заходить почаще.
Май 11 at 20:26
Да это действитеьно интересно, будем ждать продолжения
Май 11 at 21:51
Да тема интересная, нигде подобного не встречал. Ну что ж ждем продолжения.
Сен 14 at 12:16
[...] писал про скрипт массовой установки вордпресса, но вот появилось более оптимальное решение, как это [...]
Июл 06 at 16:51
есть еще более простые способы сделать «мультиблоговую» систему, причем на 1 копии WP и не так сильно париться со скриптами и заменами. а сделать все на 1 хранимой процедура.
а хостинг любой, главное , что бы ограничения не было по числу припаркованных доменов