Установка Drupal 7 на облако Microsoft Azure

Опубликовано 2011.11.11

Drupal 7 + Microsoft Azure Подружить эти две вещи очень даже легко. Что такое Drupal-думаю все знают..это очень гибкая и функциональная CMS. Microsoft Azure-это облачная технология,предоставляемая компанией Microsoft. В чём же её достоинство. Работает точно также,как и обычное облако. Если сайт рассчитан на высокие нагрузки-можно построить кластеры или придумать ещё что-нибудь.Облачный подход сейчас наиболее популярен. Подружить шестую версию Drupal не получится,или же самому придется писать драйвер к БД.Для семерки качаем модуль тут настраиваем. Далее идем на http://www.microsoft.com/windowsazure/ и получаем аккаунт. Предполагается что сайт у вас уже готов. По адресу https://windows.azure.com увидим админ панель. Имеется также рускоязычная версия интерфейса, так что сориентироваться можно. Подключам базу данных. PhpMyAdmin-а к сожалению не увидим...Но у обозревателя базы данных MsSql(Работать кстати придется именно с ней) тоже есть свои достоинства. Стандартные модули друпала впринципе дружат с такой БД,но если будете писать свои модули-имейте ввиду что запросы к БД строятся немного иначе,нежали к MySql. Лично у меня запарка произошла с оператором group by mssql. Джойны и ордеры работают также,хэвинги не проверял. Ещё отмечу-при указании длинны поля типа int - вылезет ошибка,указывать его не надо.(в MySql можно было указать без проблем) Чтобы свести ошибки написания кода к минимуму-рекомендую использовать DataBase API.У седьмого друпала она очень даже ничего. Используя её-никогда не ошибешся в последовательности написания операторов where,left loin.order by и group by(если они все присутствуют в одном запросе), в общем попробуйте сами.Например select будет выглядеть вот так:
  1. $query =db_select('cb_sessionss','s');
  2. $query ->condition('v.ProjectID',$user->uid,'=');
  3. $query ->leftjoin('cb_videos', 'v', 's.VideoID = v.ID');
  4. $query ->leftjoin('cb_node_guid','ng','ng.guid=v.AvsURL');
  5. $query ->leftjoin('node', 'n', 'n.nid = ng.nid');
  6. $query ->fields('s',array('VideoID'));
  7. $query ->fields('v',array('AvsURL'));
  8. $query ->fields('n',array('title'));
  9. $query ->addExpression('count(*)','views');
  10. $query ->addExpression('count(distinct s.UserID)','uniques');
  11. $query ->groupBy('s.VideoID ,v.AvsURL, n.title');
  12. $query ->orderBy('views','desc');
  13. $query ->orderBy('uniques','desc');
  14. $result=$query->execute();
Не забываем что названия полей BD MSSQL регистрозависимы. А вставить запись можно так:
  1. $query=db_insert('cb_users');
  2. $query->fields(array(
  3. 'IP'=>$IP,
  4. 'Platform'=>$Platform,
  5. 'BrowserName'=>$BrowserName,
  6. 'BrowserVersion'=>$BrowserVersion,
  7. 'Info'=>$Info,
  8. 'LastSeen'=>$lastseen,
  9. 'Hash'=>$Hash
  10. ));
  11. $query->execute();
Использование такого подхода покажется сложным,на первый взгляд. Но попрограммируйте так денек другой-вообще можете забыть как когда то писали SQL-запросы на чистом PHP. Drupal 7 DataBase API кстати использует библиотеку PDO.Тому кто с ней знаком-будет несколько проще. Её использование защитит вас от такого неприятного, но крайне важного момента,как внедрение SQL-инъекции злоумышленником. Немного ушли от темы... Сайт,собранный на стороннем сервере(или даже локальной машине) собирается в деплой и заливается на облако. Само облако может представлять из себя несколько виртуальных машин(иначе зачем мы его используем?!),называемых инстансами. Тоесть запускаем 10 инстансов,заливаем на них деплой.База данных у них общая,IP адрес тоже будет один. И теперь при обращении к сайту-вы будете попадать на один из инстансов.Таким образом нагрузка будет распределена и сайт будет выдерживать высокие нагрузки.