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

Опубликовано 2011.11.11 в разделе Drupal

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 адрес тоже будет один. И теперь при обращении к сайту-вы будете попадать на один из инстансов.Таким образом нагрузка будет распределена и сайт будет выдерживать высокие нагрузки.

6 Комментариев

Оставить комментарий

  1. Админ 2012/01/25

    С Boost не работал. Надо посмотреть что и где он кэширует.Если его кэш будет храниться в блобе-то думаю без проблем будет работать.Но тестить конечно надо.

    Ответить

  2. Гость 2012/01/24

    Извиняюсь,я видимо не четко сформулировал вопрос. То что обычные картинки идут с блоба минуя инстанс это конечно же понятно(у нас сейчас все на облаке амазона крутиться и файлы так же с форефронта тянуться). Я спрашивал откуда тянуться файлы созданные в результате кэшированния модулем Boost?

    Ответить

  3. Админ 2012/01/19

    Да,файлы тянутся сразу с блоба,минуя инстанс.
    Да, этот модуль и используем.Писали также свои модули, для специфичных задач.
    Вот так настроено в админке.

    Ответить

  4. Гость 2012/01/19

    Теория про блоб и инстансы понятно! Интересует не теория, а практика именно с Drupal. Как настроить сохранение всех картинок в блоб? Нашел вот этот модуль - http://drupal.org/project/azure , но смущает, что это еще релиз кандидат, да еще вроде и не поддерживаемый. Вы какими модулями пользуетесь для сохранения картинок и видео в блоб?
    А еще интересует кэширование модулем Boost ! Можно ли чтобы клиент получал закэшироаные им файлы сразу с блоба не трогая винт инстанса?

    Ответить

  5. Админ 2012/01/18

    Можно. Как раз их и храним,и видео.
    Нет, инстанс-это сервер под сайт..тоесть на трех инстансах,скажем, стоит твоя CMS,статичная. А блоб будет 1 на все инстансы.И когда обратишься к сайту-сайт подгрузится с любого инстанса.А картинки(любой динамичный контент) будет грузиться с одного единственного блоба.

    Ответить

  6. Гость 2012/01/18

    А как на счет сохранения картинок? В блоб можно сохранять? Ведь если будет 10 инстанцев то не известно на какой из них зальется картинка и как они потом будут синхронизироваться?

    Ответить

Ваш комментарий успешно создан

Ваш комментарий

  • Для выделения кода оберните его в тэги <code> и </code>
  • Отметьте кредитку