Добрый день, уважаемые разработчики!
Сразу хотелось бы попросить опытных участников, которым надоело отвечать на подобные вопросы по множеству раз не ругаться матом и не кричать, что очередному ламеру не охота лезть в Гугл. Если вы хотите сказать именно это, то уж лучше ничего не пишите...
Информации много и зачастую не везде она описывает одинаковые пути. И постоянно находятся люди, у которых что-то не работает и в итоге все темы по "мультисайтингу" в итоге превращаются в свалку ошибок, методов их исправления и ругани.
Просто если имеешь с чем-то дело в первый раз, то можно хоть год в Гугле с чем-то просидеть и всё равно не разобраться до конца. Поэтому надеюсь на конструктивную помощь и критику, а не на ругань.
Из прочитанного:
http://www.razgonka.ru/multisiting/
http://www.drupal.ru/node/6226
http://www.drupal.ru/node/12437
и даже почти всё из http://drupal.org/node/43816.
Из увиденного:
http://www.drupal.ru/node/37277
http://www.drupal.ru/node/36877
и http://gotdrupal.com/videos/multisites-vs-multiple-sites
После такого потока информации, я понял в принципе что к чему, но при этом порядком запутался...
Ситуация получается следующая. На данный момент есть сайт, разработанный на Друпале. Сайт один. А в итоге их нужно наплодить порядка штук 10-15. Все сайты будут однотипные, т.е. с одинаковым (ну или очень похожим) интерфейсом. С практически одними и теми же модулями и блоками. И (что очень важно!) с общими пользователями. Только контент у них будет разный. И ещё очень важный момент - это возможность пользоваться Shared Sign-On. Без него вся эта задумка с мультсайтингом для моего руководства теряет смысл...
И вот, собственно, сразу начинаются сомнения:
Думаю делать всё в одной базе с префиксами - это будет просто нереально, потому что у меня у одного единственного сайта уже порядка 100 таблиц. Следовательно, если сайтов будет 10, то таблиц будет около тысячи... И всё это навивает грусть.
Если делать с одной общей базой (пользователей, ролей и т.д.) и остальными независимыми для каждого сайта, то опять берут сомнения:
В моём распоряжении волею руководства сейчас находится Виртуальный хостинг на HC.RU (он же РБК). Создать несколько баз с одним и тем же пользователем (о чём повествуется в статье http://www.razgonka.ru/multisiting/), скорее всего не получится, потому что:
Допустим у меня есть домен drupalsite.ru - база для него автоматически создаётся с именем wwwdrupalsiteru. Если создаёшь вторую базу, например с именем db2, то имя у неё получается уже wwwdrupalsiteru_db2. И подключение к ним происходит по логинами drupalsite и drupalsite_db2 соответственно. Хотя вот в этой статье - http://drupal.org/node/348619 всё как-то легко и просто... Без одинаковых логинов к базам.
Потом, если всё же получится создание разных баз и одной общей, я так понимаю, нужно создать в директории sites, куда установлен Друпал, папки для каждого из сайтов, допустим /sites/drupalsite1.ru, /sites/drupalsite2.com, /sites/drupalsite3.org. И в каждой из директорий создать конфигурационный файл settings.php с префиксами для базы. Вот я думаю, уже на данном этапе всё ли я понял правильно?
Читал статьи в основном про установку на Локалхост, но хотелось бы понять как это делать уже на боевом хостинге. Что делать с доменными именами? Допустим, у меня есть домен drupalsite1.ru, вот на нём есть уже готовый одиночный сайт на Друпале. Чтобы размножить его, мне нужно привязать к нему алиасы drupalsite2.com и drupalsite3.org?
А потом уже залить копию его базы в отдельные базы для drupalsite2.com и drupalsite3.org (за исключением таблиц, которые будут общими)? Нужно ли вносить какие-либо изменения в httpd.conf, если меня заставят это делать на VPS-хостинге? И вообще возможно ли всё это сделать на Виртуальном хостинге или по-любому нужен VPS?
Буду искренне признателен за любую помощь в виде советов. Если я где-то что-то неправильно понял и описал, то подскажите какой порядок действий будет правильным?
P.S.: Заранее благодарен! И будьте взаимовежливы, а то, как это бывает, польют грязью а что делать не скажут
Комментарии
http://www.lullabot.com/articles/drupal-single-sign-across-sub-domains
Спасибо за ссылку, но этот вариант, я думаю относится к реализации в одной БД с разными префиксами для каждого сайта. А в моих условиях этот вариант скорее всего не подходит из-за того, что в итоге получится база с тысячами таблиц.
Но сама статья, кстати, очень занимательная. Для небольшого количества сайтов очень удобно!
не правильно думаете
а как вы измеряете?
Правильно
Правильно
Не совсем понял.
Нужно что бы для имен drupalsite1.ru, drupalsite2.com и drupalsite3.org корневая директория (rootdirectory) вела на папку с установленным друпалом. Некоторые шареды дают такую возможность, нужно смотреть конкретный тариф и связываться с техподдержкой.
Опять же не понял... У тебя же материалы разные, зачем дублировать БД?
==
Зы связывать, по моему мнению, имеет смысл только таблицы с пользователями(права, поля, сессии и тд), а все остальное у каждого сайта свое(тобишь модули отдельно включить для каждого, темы и тд).
В твоем случае если не переделывать то основной пользовательской БД будет от имеющегося сайта, остальные к ней подключатся.
Как-то так
Может быть. Просто не всё ещё для себя прояснил...
Ну просто вот на тарифе, который я сейчас использую, там можно для домена задать до 15-ти алиасов (синонимов или как их правильно назвать). В общем, если я для домена drupalsite1.ru задам алиасы drupalsite2.com и drupalsite3.org, то все они по сути будут ссылаться на drupalsite1.ru, а он собственно и есть тот самый основной сайт, основная инсталляция Друпала... Может я что-то не так себе представляю, но вроде бы должно быть так.
Просто у меня есть костяк сайта. Там наполнения материалом ещё никакого нет почти. Только созданы Типы материалов, Views, Словари таксономии и настройки для модулей. Всего этого достаточно много и потом заново всё это создавать и настраивать ну как-то не совсем хочется. Все эти перечисленные вещи для всех сайтов будут одинаковые, поэтому я и подумал, что можно размножить все эти таблички для каждой базы, а в отдельную базы вынести юзеров, роли и сопутствующее.
Кажись нет. Алиас = синоним, перенаправление, а надо что бы было так, как я написал выше (в общем это прояснить нужно.
Хм.. не сразу сообразил о чем речь.
Тогда получается так примерно:
1. Каталоги для сайтов в sites/
2. Дублируем БД для каждого сайта
3. Настройка settings.php для каждого сайта (основная БД у каждого своя, общие пользовательские таблицы в отдельной БД)
4. Решаем вопрос с root directory (разбираемся с алиасами)
5. Проверяем
В вашей ситуации, похоже, может спасти только модуль domain или... смена хостинга, так чтобы можно было создавать разные базы, привязывая к нем одного пользователя. Иначе на разных базах вы мультисайтинг не сможете сделать.
Если только в одной базе на префиксах, а вашем случае, как вы сами это заметили - это "не есть гуд".
Поддерживаю. Domain - это очень мощная штука, только запутаная какая-то, но мощная. Если с ней разобраться, то можно корпоративные сайты на ней очень быстро и удобно делать с возможностью всегда добавить следуюющий без особых хлопот.
Вставьте в /sites/drupalsite1.ru/setting.php (главный сайт откуда будут браться пользователи для других сайтов в мультисайтинге)
$db_url = 'mysqli://drupalsite:парольlocalhost/db2';
$db_prefix = '';
/**
* Access control for update.php script
Вставьте в /sites/drupalsite2.com/setting.php
$db_url = 'mysqli://drupalsite_db2:парольlocalhost/wwwdrupalsiteru_db2';
$db_prefix = array(
'default' => '',
'users' => 'db2.',
);
/**
* Access control for update.php script
Все ваш мультисайтинг готов (кол-во сайтов значения не имеет, все зависит от возможностей хостинга)
Спасибо большое за советы! Сегодня попробую сделать и потом отпишусь что получилось, что нет.
Да ладно?! а вы пробовали так делать, при разных именах пользователей баз данных?
Это ж как же данный сайт будет подключаться к базе данных db2 если у нее совершенно другой пользователь.
Хотя... может я что-то пропусти и теперь это можно делать )
А вы не подумали, что drupalsite_db2, тоже имеет права на работу с db2
совсем не факт, но, впрочем... всякое может быть. Буду весьма удивлен если так.
Конечно не факт ), вначале эти права ему нужно дать
вот-вот )
на шаред-хостингах с такими настройками как у топикстартера по умолчанию пользователи жестко привязаны только к одной, своей базе. Более того, зачастую привязать ко второй базе технически не возможно в рамках настроек хостинга.
Тогда к моему ответу, кроме смены хостинга и модуля domain добавляется вариант - обратиться в тех. поддержку... а вдруг )
В общем, что получилось: с префиксами и сотнями таблиц работает всё отлично!
С раздельными БД вот что происходит:
Для главного сайта, в базе которого хранятся его собственные таблицы + общие таблицы прописываю:
$db_prefix = '';
Для второго сайта пишу:
$db_prefix = array(
'default' => '',
'users' => 'wwwdrupalsite1ru.'
);
В ответ получаю:
Warning: SELECT command denied to user 'wwwdrupalsite2ru'@'localhost' for table 'users' query: SELECT u.*, s.* FROM wwwdrupalsite1ru.users u INNER JOIN wwwdrupalsite1ru.sessions s ON u.uid = s.uid WHERE s.sid = 'deedf953b66905d069e53a7be95f782c' AND s.domain = 'drupalsite1.ru' in /www/drupalsite1/www/htdocs/includes/database.mysqli.inc on line 128
Ну, в общем-то, всё печально очевидно - у базы wwwdrupalsite2ru нет доступа на подключение к базе wwwdrupalsite1ru...
Что можно сделать в данной ситуации? Ведь получается, что вторая БД видит первую! Можно ли задать в префиксе строку с паролем (мысли вслух) или ещё как-то?
Я так полагаю, что если бы юзер был одинаковый то всё работало бы?
Дело совсем не в базах, а в пользователях
дайте пользователям соотв. гранты на базы и все будет как надо
nukerster Вы все правильно делаете осталось только сделать то, что мы уже обсудили с WiseMan и -OC-drupal.org , т.е. дать пользователю drupalsite2 , права на работу с базой wwwdrupalsite1ru.
У меня американский хостинг и cpanel , это делается в один клик мышкой. Как это на вашем хостинге не подскажу. Но думаю напишите им в тех.поддержку должны сделать.
Связался с тех. поддержкой. Ну и получил ожидаемый ответ про то, что в рамках Виртуального хостинга (по крайней мере у HC.ru) такое осуществить не получится. Если нужны базы с одним пользователем и правами, то нужно брать VPS. Со следующей недели получаю его в своё распоряжение и начинаю главу "Настройка мультисайтинга - Часть II. VPS"
По идее, руководствуясь всеми приведёнными здесь инструкциями (кстати, всем спасибо огромное, особенно Oleksa@drupal.org) должно всё получиться без проблем. Единственный момент, который немного настораживает - это то, что на Виртуальном хостинге алиас привязывался в 2 клика, а на VPS наверное надо будет ещё httpd.conf править. Прописывать там
<VirtualHost>
. Ну это если, опять же, я ничего не путаю...Буду настраивать и буду отписываться сюда. Может кому-нибудь в дальнейшем пригодится.
Так у них же есть нормальная спанель (тариф МИР-2). Через нее можно пользователя прикрепить к разным пользователям. Или я что-то здесь не понимаю)))