Перенос сайта на WordPress на VPS

Зачем переносить WordPress на VPS?

Подавляющее большинство сайтов на WordPress, используют виртуальный хостинг, который имеет два важных преимущества — он дешев и все заботы по настройке и администрированию берет на себя хостер. Виртуальный хостинг отлично подходит для нетребовательных сайтов с невысокой посещаемостью. С ростом посещаемости, растут требования сайта к ресурсам и часто возникает необходимость в использовании дополнительных модулей или специфических настройках, в этом случае оптимальным решением будет перенос сайта на WordPress на VPS (Virtual Private Server). VPS — гораздо дешевле аренды физического сервера и более гибкие в конфигурации, вы можете купить VPS с нужным объемом ресурсов а когда их станет недостаточно просто докупить еще ОЗУ, места на диске или процессорных ядер. VPS с минимальными параметрами по цене сравнимы с виртуальным хостингом, но предоставляют гораздо больше ресурсов и свободы в конфигурировании и оптимизации.

Как выбрать VPS?

При выборе я руководствуюсь следующими критериями:

  • цена, но не стоит искать самое дешевое предложение, оно может оказаться слишком дорогим впоследствии;
  • компания должна иметь историю и присутствовать на рынке хотя бы несколько лет;
  • высокий уровень доступности сервисов (Uptime);
  • отзывчивая поддержка;
  • однозначный плюс — наличие в списке клиентов популярных сайтов с высокой посещаемостью;
  • возможность выбора страны размещения сервера из нескольких вариантов, географически сервер должен быть как можно ближе к большинству посетителей.По всем нашим критериям  отлично подходит хостинг Fornex

Как определить когда стоит переносить свой сайт с WordPress на VPS?

Практически на любом виртуальном хостинге можно узнать столько ресурсов использует ваш сайт, например в Cpanel это выглядит так:

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

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

Заказываем виртуальный сервер SSD VPS:

Выбираем тариф, операционную систему, панель управления сервером (грубо говоря это веб-интерфейс для управления параметрами сервера, ее использование не обязательно но в целом упрощает и ускоряет настройку сервера), выбираем расположение сервера — чем ближе географически сервер к посетителям тем быстрее будет загружаться сайт, рекомендую сразу купить место для резервных копий или продумать какую-то свою систему резервного копирования:

Если вы не сильны в администрировании Linux-серверов, настоятельно рекомендую взять панель ISPmanager, с ее помощью можно настроить сервер не прибегая к использованию консоли и прочей не очень понятной «магии» для новичков.

После заказа оплачиваем и ожидаем активации, как правило она практически мгновенная, наш сервер готов и можно приступать к настройке:

При клике по строке с именем сервера открывается удобное меню с обзором основных метрик и состоянием сервера:

Например я хочу изменить ОС, я не большой специалист по Debian и обычно я использую Ubuntu, заходим в настройки, выбираем пункт «Переустановить ОС»

Выбираем образ, выбираем нужную панель управления и жмем кнопку «Запустить переустановку»:

Переустановка ОС занимает около 15 минут, по окончании процесса на почту приходит уведомление, пока сервер переустанавливается можно настроить домен. Я для примера сделал тестовый поддомен — test.kakpedia.org, вы будете использовать свое имя, для того чтоб связать доменное имя и ваш VPS, необходимо в панели управления доменом, создать DNS-запись типа А и прописать ей IP адрес вашего VPS, интерфейсы у большинства регистраторов отличаются незначительно, проблем тут возникнуть не должно:

В зависимости от регистратора на обновление записей DNS может потребоваться от нескольких минут до нескольких дней (сейчас это редкость чаще всего обновление записей DNS занимает менее часа).

На этом этапе уже можно попробовать зайти на ваш сайт и если все сделано верно, вы должны увидеть вот такую картину:

Возвращаемся в личный кабинет, там в меню «Настройка», есть вкладка «Доступы», грубо говоря это способы управления вашим сервером, вы можете делать все по старинке через консоль (и она наверняка пригодится для каких-то специфических настроек), можете использовать VNC, ну а мы для простоты и скорости будем использовать панель управления сервером ISPManager, кликаем по ссылке, вводим указанные на странице логин и пароль:

И попадаем в панель управления сервером, обратите внимание что вы залогинились под пользователем root он управляет всеми настройками сервера, а когда вы добавите домен, им будет управлять отдельный пользователь с ограниченными правами, указанный в поле «Владелец», ниже я покажу как переключаться между пользователями, а пока добавляем наш тестовый домен, заполнять надо поля помеченные красными прямоугольниками, остальные поля можно оставить как есть или поменять. В поле «Выбор скрипта» можно сразу выбрать WordPress он будет установлен автоматически, логин и пароль от сайта будут в уведомлениях (значок появится рядом с логотипом):

Я рекомендую включить сжатие, но с уровнем следует экспериментировать, оптимально значение 3-5 в зависимости от посещаемости вашего сайта, при значениях выше 5 нагрузка на процессор растет сильнее чем степень сжатия.

После того как домен добавлен можно установить WordPress, заходим в меню «WWW-Домены» и жмем кнопку «Скрипты»

Затем в меню выбираем WordPress, если нажать «Быстрая установка», то будет установлена выбранная версия, если вам нужна другая жмите на «Установить», и выбирайте нужную версию, но я рекомендую ставить последнюю, именно она и предлагается по умолчанию:

На следующем шаге необходимо создать базу данных, пользователя для базы данных, создать администратора в WordPress, и т. п:

Если у вас много доменов, внимательно проверяйте настройки чтоб не записать новую установку поверх имеющейся:

На этом этапе мы получили рабочий но пустой блог на WordPress, далее вы можете его настраивать и использовать, если нужно перенести уже существующий сайт, то читайте далее.

Перенос файлов и БД WordPress на VPS

Я покажу перенос на примере наиболее популярной панели для виртуального хостинга Cpanel, в других панелях пункты меню могут называться по-другому и находиться в других местах, но смысл такой же.

  1. Перенос файлов.
    Это можно сделать несколькими способами (можно использовать резервные копии, FTP-клиент), проще и быстрее в Cpanel зайти в менеджер файлов, выбрать нужные и нажать «Сжать», и затем упаковать их в ZIP-архив, кликнув по иконке справа от имени архива можно его скачать.
    Важно: Файл wp-config.php в архив добавлять не нужно!

    Затем возвращаемся в ISPManager, заходим в менеджер файлов и переходим в папку с нашим сайтом, в эту папку загружаем скачанный ранее архив:

    После загрузки его нужно распаковать:

    Если вы все же перенесли старый wp-config.php, то нужно его отредактировать и указать новые данные для доступа к БД, пример ниже.
  2. Перенос БД
    Проще всего дамп БД сделать с помощью phpMyAdmin:

    Выбираете свою базу, переходите на вкладку «Экспорт» и жмете вперед, в зависимости от размера базы процесс может занять некоторое время, в итоге вам на компьютер скачается файл с дампом БД.
  3. Если WordPress переносится вместе с доменом, этот шаг можно пропустить, но если вы переносите сайт с одного домена на другой, то в дампе БД нужно заменить старое доменное имя новым, для этого откройте дамп в любом текстовом редакторе (кроме стандартного Блокнота, он плохо работает с большими файлами) и выполните замену:
    Теперь дамп базы нужно загрузить на наш новый сервер:
  4. Если нужно отредактируйте wp-config.php:
    для корректной работы как правило достаточно указать правильные данные для доступа к БД:
  5. Настройка SSL
    Этот пункт не является обязательным, но я настойчиво рекомендую использовать SSL, тем более что сертификат бесплатен, для этого необходимо сменить пользователя на root и перейти в пункт меню «Интеграция — Модули»:

    Здесь находим модуль Let`s Encrypt и жмем установить.
    Теперь нужно сменить пользователя, чтоб продолжить настройку нашего сайта, как это сделать понятно из картинки:

    Переходим в меню SSL-сертификаты и жмем появившуюся кнопку:

    Ставьте галочку, заполняйте поля, обратите внимание на поле в прямоугольнике, в нем указано ваше доменное имя с псевдонимами, проверьте что все они открываются в браузере, те которые не открываются — удалите из этого поля, иначе сертификат не будет получен:

    Получение сертификата занимает некоторое время (у меня это заняло около 5 минут), статус процесса можно узнать в журнале Let`s Encrypt, если что-то пошло не так, то в журнале будет описание ошибки:
    Если всё сделано верно, то предупреждение в адресной строке должно исчезнуть:

Теперь ваш сайт работает на новом сервере и готов к росту посещаемости, текущей конфигурации для этого вполне достаточно. Конечно все нюансы в одной статье охватить невозможно, поэтому пишите в комментарии разберемся вместе.

Решено: WordPress ошибка «Briefly unavailable for scheduled maintenance. Check back in a minute»

WordPress — отличный движок для сайтов и блогов, но изредка даже с ним бывают проблемы, впрочем эта ошибка скорее связана с хостингом и сбоями в работе сети. При обновлении как движка самого WordPress так и плагинов, сайт на несколько секунд закрывается на обслуживание, нужные файлы перезаписываются и сайт продолжает работать как и раньше. Но иногда эти несколько секунд затягиваются на минуты и даже часы. Дело в том что механизм закрытия сайта на обслуживание работает следующим нехитрым образом:

  1. в корне сайта создается специальный файл с названием .maintenance, в этот момент сайт переходит в режим обслуживания и если попробовать на него зайти, то получите сообщение — «Briefly unavailable for scheduled maintenance. Check back in a minute»
  2. затем выполняется обновление движка или плагинов
  3. файл .maintenance удаляется и сайт переходит в обычный режим работы

По разным причинам второй этап может затянуться (обычно это слишком маленькое ограничение времени выполнения скриптов php либо медленная работа сети) и в результате третий пункт не выполняется и получается что сайт хоть и обновился — но переключения в обычный режим работы не произошло, ожидание ничего не дает и сайт по-прежнему выдает сообщение «Briefly unavailable for scheduled maintenance. Check back in a minute».

В этом случае нужно вручную перевести сайт из режима обслуживания в обычный режим работы, сделать это не сложно, нужно используя FTP-клиент или панель управления хостингом с диспетчером файлов, зайти в корневую директорию сайта, отыскать там файл .maintenance и удалить его.  В Cpanel это выглядит как-то так:

Как исправить Briefly unavailable for scheduled maintenance

Точка в начале имени  файла .maintenance означает что он «скрытый», если ваш сайт выдает сообщение «Briefly unavailable for scheduled maintenance. Check back in a minute«, но в корне вы не видите файла .maintenance, то скорей всего нужно в настройках панели управления разрешить показ скрытых файлов и затем его удалить. Сразу же после удаления файла .maintenance ваш сайт заработает в нормальном режиме.

Решено: В WordPress не работает удаленная публикация постов через xmlrpc

Публиковать посты в блог на WordPress удобно через клиенты, особенно если они с большим количеством картинок, сложным форматированием и другими возможностями, которые сложно или неудобно реализовать в редакторе админ-панели. Для этого используется стандартный протокол XML-RPC, который позволяет добавлять посты удаленно, но проблема в том что реализация этой возможности в WordPress имела уязвимости из-за этого многие хостеры стали использовать различные варианты ограничения доступа к файлу xmlrpc.php, также есть плагины для WordPress которые делают использование XMLRPC более безопасным и защищают Ваш блог.

Для написания постов в этот блог я иногда использую Windows Live Writer, это клиент для блогов от Microsoft, не скажу что он обладает какими-то супер возможностями, но он вполне удобен, последний раз я его использовал до переезда на нынешний хостинг и все работало, а недавний запуск оказался неудачным, при попытке опубликовать пост получил ошибку 404, мол файл xmlrpc.php не найден. Зайдя по FTP в папку с сайтом оказалось что файл на месте, недолгое разбирательство позволило выяснить причину — доступ к файлу заблокирован хостером. Мой хостер использует ModSecurity — я детально не разбирался, это что-то вроде защитного модуля, который защищает сайты от известных и не очень атак, если в панели управления хостингом его отключить то удаленная публикация — работала, но лишаться полностью защиты не хотелось, поэтому я написал в техподдержку  и они разрешили доступ к xmlrpc.

На некоторых хостингах помогает добавление в .htaccess директивы (в моем случае не сработало):

<Files xmlrpc.php>
SecFilterInheritance Off
</Files>

Для дополнительной защиты от атак на xmlrpc можно использовать плагин Rename XMLRPC если не хотите использовать эту возможность используйте плагин Disable XML-RPC.

Подключаем к блогу на Wordress SSL-сертификат или WordPress и HTTPS

С 2017 года Google будет отдавать предпочтение сайтам использующим SSL-сертификаты, которые обеспечивают шифрование трафика между сервером и пользователем, это необходимо для защиты личных данных пользователей, такая защита актуальна для любых сайтов ведущих коммерческую деятельность, блогам вроде бы SSL-сертификат не очень нужен, но с другой стороны если у в вашем блоге открыта возможность комментирования, то авторизация пользователей по HTTP оказывается не очень безопасной и пароль легко может быть перехвачен. Чтобы обезопасить свой блог и его посетителей, не потерять с трудом занятые позиции я решил использовать SSL сертификат, в процессе возникло несколько сложностей о решении которых и будет эта статья.

WordPress и SSL-сертификат

  1. Для начала нам нужен собственно сам сертификат и ключи, способов его получить достаточно много, есть платные сертификаты, есть бесплатные решать вам, я человек небогатый и остановился на бесплатном сертификате, тем более что мой хостер поддерживает сертификаты  Let’s Encrypt SSL, поддержка встроена в Cpanel.

    Ничего сложного там нет, выбрать домен, создать сертификат и он будет автоматически привязан к домену;
  2. После этого ваш сайт заработает по протоколу https, некоторые хостеры после установки сертификата автоматически редиректят запросы с http на https, но большинство по-моему этого не делает, поэтому Ваш сайт будет работать и с http и с https, надо настроить редирект запросов с http на https. Вариантов редиректа и способов реализации достаточно много, если не знаете какой использовать лучше обратитесь в техподдержку и там помогут все правильно настроить, у меня заработал вот такой вариант, с сайта хостера, я использую встроенные в WordPress ЧПУ, жирным выделен код который я добавил в файл .htaccess:# BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    RewriteBase /
    RewriteRule ^index\.php$ — [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    # END WordPress
  1. Проверяем, если ввести в адресную строку браузера https:// любая страница с вашего сайта, то должна сработать автоматическая переадресация на https:// любая страница вашего сайта. Если это не так проверяйте файл .htaccess на ошибки, пробуйте другой вариант переадресации (чаще всего его можно найти в документации вашего хостера) или используйте переадресацию на php.
  2. После того как переадресацию настроили и сайт стал всегда открываться по https, может возникнуть еще одна проблема, заветный зеленый замочек в адресной строке не появляется, вместо него в хроме все выглядит вот так:

    Проблема в том что часть контента грузится по протоколу http, в данном случае ссылки на картинки были вставлены до перехода на http и поэтому браузер считает ваш сайт не полностью безопасным, дело в том что весь контент загружаемый по http может быть подменен злоумышленником, например он может легко вставить в код сайта форму для ввода паролей и украсть ваши данные. Поэтому нужно исправить все ссылки на картинки и другой контент с http на https. Сделать это тоже можно несколькими способами, скачать дамп базы SQL открыть в текстовом редакторе и заменить все http на https, если ссылок немного — поменять их вручную, открыть PhpMyAdmin и выполнить несколько SQL-запросов на обновление ссылок, но самый быстрый и удобный — использовать плагин Better Search Replace, или аналогичный. Перед использованием плагина обязательно сделайте резервную копию базы данных!
    После установки и активации заходим в меню плагина, настройки ставим как на картинке:

    Wordpress и HTTPS
    Тут все просто:
    Искать — строка которую будем заменять (тут пишем http)
    Заменить на — чем заменять (https)
    Выбор таблиц — таблицы в которых производить поиск и замену, если меняем только в постах то выбираем таблицу wp_posts (еще ссылки могут быть в комментариях, тогда нужно выбрать таблицу wp_comments), несколько таблиц можно выбрать мышкой удерживая CTRL
    Установленная  галка “Холостой запуск” запрещает внесение изменений сразу, сперва лучше выполнить поиск и посмотреть что получится, если все верно снимаем  галку  и жмем на Запустить поиск/замену. Если все сделано верно и все ссылки с http заменились на https, то на всех страницах сайта в адресной строке браузера должен появиться зеленый замок:

    Он означает что соединение полностью защищено.

  3. Также не забудьте зайти в настройки блога — общие и изменить Адрес WordPress (URL)  и Адрес сайта (URL) добавив букву S к http.Если у Вас возникли вопросы, задавайте в комментариях постараюсь помочь.

Решено: Нет ни одного доступного HTTP-транспорта, который может завершить запрос

Текст ошибки может меняться, но смысл один — в консоли WordPress не загружаются новости, ошибка возникает при попытке обновить WordPress, обновить или установить новую тему или плагин. Конечно можно скачать нужные файлы и загрузить их на хостинг по FTP, но это неудобно.

Варианты текста ошибки:

  • Нет ни одного доступного HTTP-транспорта, который может завершить запрос
  • Произошла внутренняя ошибка HTTP
  • Ошибка RSS: WP HTTP Error: Нет ни одного доступного HTTP-транспорта, который может завершить запрос

Все эти ошибки говорят о том что WordPress не может получить доступ по протоколу Http или Https к другим серверам, причины могут быть разнообразны и поэтому придется пробовать различные варианты.

Способы решения:

  • Если ошибка возникает изредка, то скорей всего проблема не у Вас и стоит просто подождать пока все наладится
  • Если Вы не разбираетесь в тонкостях — обратитесь в техподдержку своего хостинга и попросите их решить проблему
  • Для решения ошибок необходимо установить/подключить расширения PHP — curl и openssl, на некоторых хостингах это можно сделать самостоятельно в панели управления, но на большинстве придется обращаться в техподдержку.
  • Если Вы используете собственный сервер — то установите curl и openssl

После этого все должно заработать и вы сможете обновить WordPress или установить плагины.