Скрипт массовой установки wordpress

Небольшой скриптец на 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:

5.00 avg. rating (90% score) - 1 vote

10 комментариев

  • Джедай, епт, твою бы голову да в трезвые руки — был бы королем мира

  • Неистребимы в нашем народе кулибины — все стремятся переделать, лишь бы не пользоваться нормальным сервисом. Нормальные хостинги все эти функции предоставляют по определению, да еще и не за самые большие бапки.

    • Shimus, я как бы не переделывал, я с нуля писал. Не подскажешь хостинг, который предоставляет такую возможность автоматом установить сразу N вордпрессов, да еще и с минимальными данными — урл и заголовок?

  • Нет хостингов с такой возможностью, так что скрипт весьма полезен, автору спасибо.

  • Действительно интересно написано. Добавил в избранное, буду заходить почаще.

  • Да это действитеьно интересно, будем ждать продолжения

  • Да тема интересная, нигде подобного не встречал. Ну что ж ждем продолжения.

  • […] писал про скрипт массовой установки вордпресса, но вот появилось более оптимальное решение, как это […]

  • есть еще более простые способы сделать «мультиблоговую» систему, причем на 1 копии WP и не так сильно париться со скриптами и заменами. а сделать все на 1 хранимой процедура.
    а хостинг любой, главное , что бы ограничения не было по числу припаркованных доменов

  • скрипт отличный, только непонятно как его устоновить

css.php