Перенос Drupal с локального компьютера на хостинг.
В этой статье я расскажу как перенести Drupal с локального компьютера на хостинг. Хотя ничего особо сложного в этом нет, но многие часто сталкиваются с проблемами при переносе или после переноса. Возможно потому, что плохо себе представляют как же всё работает...
Автор: Виктор Вислобоков
Итак, дано: поднятый локально Drupal (например в Denwer). Перенос будет состоять из нескольких отдельных операций:
- Заходим в админку в раздел admin/settings/site-maintenance и переводим сайт в режим обслуживания Off-line. Это необходимо для того, чтобы в момент создания копии БД и файлов, а также в момент развёртывания этих копий на хостинге, никто не внёс каких-либо изменений в файлы или БД, которые сделают ваш сайт неработоспособным.
- Делаем архив файлов Drupal тем архиватором, который гарантировано есть на хостинге. Разумеется, что если у вас файлов немного, а хостер предоставляет доступ по FTP или SSH, возможно, более быстрым и менее трудоёмким способом будет просто копирование файлов напрямую на сам сервер хостинга. Тут уже смотрите сами.
- Переносим созданный в предыдущем пункте архив на хостинг и распаковываем его. Если вы не создавали архив в предыдущем пункте, можете пропустить этот пункт.
- А теперь внимание! Для хостинга на UNIX (Linux, FreeBSD), убедитесь, что на перенесённые вами файлы и каталоги выставлены правильные права доступа и правильный владелец/группа. Если вы не знаете какие должны быть права доступа - обратитесь к хостеру (обычно хостер сам пишет это в FAQ на своём сайте). Для сайтов, где PHP работает в режиме CGI или FastCGI права на файлы обычно 0644 и на каталоги 0755. Владелец и группа обычно совпадают с именем учётной записи (аккаунта) с помощью которой вы осуществляете вход на FTP и/или SSH. Многие FTP-клиенты устанавливают неправильные права доступа!
- Переходим к БД. Сделайте дамп БД командой
mysqldump имя_БД > dump.sql
и перенесите файл с дампом на хостинг. Можно, конечно, попробовать сделать дамп с помощью phpMyAdmin, а потом залить этот дамп также с помощью phpMyAdmin на хостинге, но я бы ОЧЕНЬ не рекомендовал этого делать в силу нескольких причин, а именно:-
— При выгрузке дампа он может выгрузиться неполностью без каких-либо сообщений об ошибках, преценденты бывали!
— Кодировки для phpMyAdmin у вас на локальном хосте и у хостера могут отличаться и в результате дамп загрузить либо вообще не получится, либо вместо русских букв вы потом на сайте увидите знаки вопроса, квадратики и прочие "полезные" символы.
— Поскольку загрузка большого дампа через phpMyAdmin является затратной операцией с точки зрения ресурсов сервера, хостеры обычно ставят различные лимиты, начиная от размера закачиваемого дампа, заканчивая временем в течение которого может загружаться дамп. Поэтому процесс загрузки может закончится посередине и хорошо ещё если вы получите сообщение об ошибке, а иначе вы будете уверены, что загрузили весь дамп и будете искренне удивляться почему у вас не работает Drupal, выдавая странные ошибки.
- Создайте БД и пользователя БД на хостинге, а также предоставьте пользователю необходимые права на БД. Обычно это легко делается через панель управления хостингом, которую вам предоставляет хостер.
- Перед загрузкой дампа в БД
убедитесь, что БД у вас на локальной машине и БД на хостинге имеют одинаковые кодировки (CHARACTER SET) и параметр называмый COLLATE (который в частности влияет на чувствительность к регистру букв). В противном случае, либо дамп не загрузится, либо вы снова вместо русских букв увидите мусор. Задача определения кодировки не столь тривиальна как кажется. Остановимся на этом поподробней.
Вообще-то современные версии MySQL (я имею в виду 5.0 и выше) делают дамп уже явно указывая кодировку для каждой таблицы. Поэтому, несмотря на кодировку самой БД, которая работает по умолчанию, таблицы будут созданы с правильной кодировкой. Так что, если у вас современная версия MySQL, то по идее всё дожно загрузится нормально, даже если кодировки БД по умолчанию на вашем локальном компьютере и на хостинге отличаются. Однако, если ещё один возможный подводный камень - упомянутый параметр COLLATE. Дело в том, что как правило он тоже берётся для данного CHARACTER SET по умолчанию и вот эти умолчания уже могут отличаться на вашем локальном компьютере и на хостинге. Это может привести к тому, что при загрузке дампа вы получите сообщение о том, что у вас есть дубликат какого-либо значения в таблице. На самом деле записи могут и не быть дупликатами, а просто иметь разный регистр одних и тех же букв. Если COLLATE например на вашем локальном компьютере различает значения больших и маленьких букв (чувствителен к регистру или ещё говорят зависит от регистра букв), то COLLATE на сервере хостера может их не различать и таким образом считать их дубликатами.
В общем и целом вы можете сделатьSHOW CREATE TABLE system;
в MySQL на вашем локальном компьютере и получить как кодировку так и COLLATE, например:) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin
из этой строки в полученном по запросу результате. А можете COLLATE и не увидеть, например:) ENGINE=MyISAM DEFAULT CHARSET=utf8
В этом случае вам надо выполнить ещё один запрос:SHOW COLLACTION;
и найти в таблице, которую вы получите строчку, в которой значение поля Charset равно "utf8", а поля Default равно Yes. Тогда вы и увидите в поле Collation искомое значение COLLATE, например:+----------------------+----------+-----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +----------------------+----------+-----+---------+----------+---------+ | utf8_general_ci | utf8 | 33 | Yes | Yes | 1 |
где utf8_general_ci, означает Case Insensitive, т.е. чувствительности к регистру букв нет, в то время как cs означало бы Case Sensitive, т.е. чувствительность к регистру букв есть.
Если вы обнаружили, что у вас значение cs, а у хостера ci, а в выгруженном вами дампе при создании таблиц параметр COLLATE и указан, то вам нужно привести параметр COLLATE на хостинге в соответствие с COLLATE на вашем локальном компьютере. Для этого вы должны подключиться к БД на хостинге с помощью команды[1]:mysql -u пользователь --password="пароль" имя_БД
и выполнить запрос:ALTER DATABASE DEFAULT CHARACTER SET utf8; ALTER DATABASE DEFAULT COLLATE utf8_general_cs;
Первый запрос скорее на всякий случай, лишним не будет. - Итак, после того как проблемы с кодировками решены, загружаем дамп, командой[1]:
mysql -u пользователь --password="пароль" имя_БД < dump.sql
- Теперь отредактируйте файл sites/default/settings.php, замените в нём параметры доступа к БД с тех, которые использовались на локальном компьютере, на те, которые вы используете на хостинге (и которые вы использовали при загрузке дампа).
- Если вы сделали всё правильно, то можете заходить на ваш сайт уже на хостинге. Конечно же вас встретит сообщение о том, что сайт находится в режиме обслуживания, но вы можете перейти на страницу /user и авторизоваваться там как администратор Drupal.
- Далее, что рекомендуется сделать - это убедиться, что веб-севрер на хостинге имеет права на запись в необходимые каталоги, такие как sites/default/files. Для этого попробуйте загрузить на сайт какой-либо файл. Если это получилось сделать - значит всё нормально, если не получилось, установите соответствующие права доступа.
- И последнее, если у вас использовались чистые ссылки (clean URL), то проверьте работают ли они у вас! В случае проблем, прочитайте данную статью.
- Теперь вы можете перейти в раздел admin/settings/site-maintenance и перевести сайт в нормальный режим On-line.
Вот собственно и весь процесс переноса!
1. Возможно вам ещё понадобится указать ключ -h имя_хоста, если сервер MySQL находится на другой машине, а не на этой же. Вы должны это узнать из панели управления хостингом или данных, которые вам предоставил ваш хостер.
- Тэги:
- Войдите или зарегистрируйтесь, чтобы добавлять комментарии
