mysurik.ru

Почему я переехал с хостинга на VPS и поставил WordPress сам

Два года я держал свой блог mysurik.ru на обычном виртуальном хостинге. Платил 300 рублей в месяц, не парился с администрированием, всё работало. Ну, почти работало. Когда на сайт заходило 20 человек одновременно — он начинал тормозить. Когда я ставил плагин для кеширования — хостинг ругался на превышение лимитов inode. Когда я хотел поставить Redis для ускорения — техподдержка сказала: «У нас нет Redis на shared-хостинге». Я терпел, пока в один прекрасный день сайт не лёг на час из-за того, что сосед по серверу запустил парсинг. В тот вечер я сидел с ноутбуком, смотрел на 503 ошибку и думал: «Или я переезжаю на VPS, или закрываю блог». Spoiler: я переехал.

Почему хостинг — это не больно, а очень больно

На старте блога виртуальный хостинг — идеальный вариант. 300 рублей, cPanel, WordPress устанавливается в один клик, техподдержка отвечает за 5 минут. Но когда сайт начинает расти, начинаются проблемы. Во-первых, ресурсы общие. Если ваш «сосед» по серверу запустил скрипт, который жрёт CPU — ваш сайт встанет колом. У меня так было раза три: сижу вечером, лезу в админку, а она выдаёт ошибку подключения к базе данных. Пишу в поддержку — «Ваш сосед превысил лимиты, мы его ограничили, извините». Извинениями сыт не будешь.

Во-вторых, нельзя поставить то, что хочешь. Redis, Memcached, свой nginx, свой PHP-FPM с настройками — на shared-хостинге об этом можно забыть. Хостинг предоставляет стандартный стек, и если он вам не подходит — ну, извините. Я хотел поставить OPcache с большим объёмом памяти, чтобы ускорить загрузку страниц. Хостинг сказал: «У нас фиксированные настройки, изменить нельзя». Пришлось мириться.

В-третьих, безопасность. На shared-хостинге вы делите сервер с десятками других сайтов. Если один из них взломают — теоретически могут добраться и до вашего. У меня, к счастью, такого не было, но я читал истории на форумах — народ терял сайты целиком. Плюс нельзя поставить свой firewall, свой fail2ban, свои правила iptables. Всё, что вы можете — надеяться на хостинг.

Выбор VPS: на чём я остановился

Когда я решил переезжать, я начал изучать варианты. VPS бывают на KVM и OpenVZ. OpenVZ дешевле, но у него общее ядро с хостом — вы не можете менять параметры ядра, ставить свои модули. KVM — полноценная виртуализация, у вас своё ядро, свои настройки, полный root. Я выбрал KVM.

Из провайдеров я рассматривал Timeweb, FirstVDS и Reg.ru. Timeweb — маркетинг, но качество так себе (видел негатив на форумах). FirstVDS — нормально, но цены кусаются. Reg.ru — много у кого стоит, но я слышал про падение скорости дисков. В итоге я выбрал небольшого провайдера, которого посоветовали на форуме samohosting — beget. У них были нормальные цены (около 500 рублей за 2 ядра, 2 ГБ RAM, 30 ГБ NVMe) и хорошая техподдержка. Я взял тариф с NVMe-дисками — они быстрее SSD раза в 3-5, и для WordPress это важно, особенно когда много мелких файлов.

Позже я переехал на собственный сервер (HP ProLiant, про него отдельная статья), а для VPS использую как резервный канал — держу там копию сайта на случай, если домашний сервер ляжет. Синхронизирую через rsync раз в сутки.

Процесс переезда: что делать с сайтом

Переезд с хостинга на VPS — это не «нажал кнопку — всё перенеслось». Пришлось делать всё руками. Вот по шагам, как я это делал:

  • Экспорт базы данных через phpMyAdmin: дамп SQL, 12 МБ. На VPS залил через командную строку — mysql < dump.sql, это быстрее чем импорт через веб-интерфейс.
  • Файлы сайта — скачал архивом через cPanel (это заняло 20 минут, так как файлов много), потом залил на VPS через scp. Перенос 2 ГБ через домашний интернет — занятие на час.
  • Настройка LEMP-стека: Linux, Nginx, MySQL, PHP. Раньше я только с cPanel работал и боялся командной строки. Пришлось гуглить каждую команду. Первый nginx.conf я настраивал часа три — и всё равно потом правил ещё неделю.
  • SSL-сертификат — через Certbot, буквально две команды. Приятно удивило, что Let»s Encrypt работает без танцев с бубном.
  • DNS-записи — поменял A-запись на IP нового сервера. TTL был 24 часа, так что первые сутки часть пользователей видела старый сайт, часть — новый. Я переживал, но всё прошло гладко.

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

Что я получил после переезда

Сайт стал летать. Страница грузится за 0.8 секунды вместо 3-4 секунд на хостинге. Я поставил Nginx FastCGI Cache — это когда страницы кешируются прямо в Nginx, без обращения к PHP. Для блога идеально: посетители получают готовую HTML-страницу, а PHP не грузится. Поставил Redis для объектного кеша WordPress. Поставил OPcache с 256 МБ памяти. Поставил fail2ban — теперь если кто-то ломится в админку, его IP блокируется после 3 неудачных попыток.

Ещё один плюс — полный контроль. Я могу копаться в настройках сколько угодно, ставить любое ПО, смотреть логи, настраивать cron. Мне не нужно писать в поддержку с вопросом «А можно увеличить лимит памяти?» — я просто лезу в php.ini и правлю.

Из минусов — администрирование отнимает время. Раньше я просто писал статьи, а хостинг заботился об обновлениях и безопасности. Теперь я сам слежу за обновлениями PHP, MySQL, Nginx. Раз в месяц захожу и обновляю пакеты. Один раз я пропустил обновление PHP — и сайт выдавал ошибку, потому что версия устарела. Пришлось срочно чинить в 11 вечера.

Сколько это стоит на самом деле

VPS на Beget — 500 рублей в месяц. К этому добавляется домен (около 200 рублей в год), SSL-сертификат (бесплатный через Let»s Encrypt) и плагины WordPress (некоторые платные, я использую бесплатные). В итоге выходит 500 рублей в месяц против 300 за хостинг. Разница 200 рублей — меньше чашки кофе. При этом производительность выросла в разы.

Но есть скрытые расходы: время на поддержку. Если вы не админ, готовьтесь учиться. Первые две недели я сидел по вечерам и разбирался — что такое systemd, как работают права в Linux, почему не запускается MySQL. Это время — тоже деньги. Если вы не готовы тратить вечера на гугление — VPS не для вас.

Ещё момент — резервное копирование. На хостинге бэкапы делает провайдер. На VPS я настроил автоматические бэкапы на домашний сервер через cron + mysqldump + rsync. Раз в неделю сбрасываю дамп базы и архив с файлами на домашний NAS. Если VPS упадёт — восстановлюсь за час.

Если вкратце

  1. Shared-хостинг — для старта, VPS — когда сайт растёт. Переезжайте, как только чувствуете, что хостинг тормозит.
  2. Берите VPS на KVM, а не на OpenVZ. Полноценная виртуализация даёт полный контроль.
  3. Nginx + FastCGI Cache — мастхев для WordPress. Страницы отдаются за доли секунды.
  4. Настройте fail2ban и автоматические бэкапы до того, как случится беда, а не после.
  5. Будьте готовы администрировать сервер сами. Если времени нет — оставайтесь на хостинге.
  6. NVMe-диски стоят чуть дороже, но разница в скорости огромна. Не экономьте на дисках.
  7. Для блога с посещаемостью до 1000 человек в день хватит VPS с 1-2 ядрами и 1-2 ГБ RAM.

Сейчас мой блог работает на домашнем сервере, а VPS стоит как резерв. Но я ни разу не пожалел, что переехал с хостинга. Даже если у вас небольшой блог — VPS даёт свободу и скорость. Я бы сказал так: если вы хотя бы раз задумались о переезде — уже пора. Сделайте это в выходные, выделите день, и вы удивитесь, как быстро сайт начнёт летать после shared-хостинга.

Чего не было в моём чек-листе переезда

Переезжая, я сделал кучу вещей, которые сейчас кажутся очевидными, но о которых не написано ни в одном гайде. Во-первых — это переадресация старых ссылок. На хостинге у меня была структура с index.php?p=123, и когда я переехал, первые дни часть старых постов с соцсетей и форумов вела в никуда. Пришлось включить перманентные ссылки в WordPress и настроить редирект. Если не сделать это заранее — потеряете часть трафика из поисковиков, и это больно.

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

В-третьих — мониторинг. На хостинге я узнавал о падении сайта от читателей в Telegram. На VPS сразу поставил Uptime Kuma — бесплатный сервис мониторинга, который пингует сайт каждые пару минут и пишет мне в Telegram, если что-то упало. Это спасло меня уже раза три, когда я случайно ломал конфиг nginx. Про мой опыт с мониторингом — отдельная статья на блоге, там всё разложено по полочкам.

И последнее, о чём жалею, — что не сделал бэкапы до переезда правильно. Я думал «сейчас перееду, потом настрою», но лучше бы настроил сразу: cron + mysqldump + rsync на домашний сервер. Первый же мой неудачный эксперимент с плагином чуть не стоил мне свежего поста. Теперь бэкапы — первое, что я ставлю на любом новом сервере, и только потом всё остальное.

Если вы сейчас читаете это и сомневаетесь — переезжайте. Но переезжайте с планом: чек-лист, резервное копирование, редиректы, мониторинг. Тогда выходные пройдут спокойно, а сайт начнёт летать. Именно так я и сделал, и ни разу не пожалел.

И напоследок один совет, который сэкономит вам нервные клетки: ведите журнал всех изменений на сервере. Простая заметка в файле — что и когда вы меняли в nginx, php.ini или crontab. Когда через месяц что-то перестанет работать, этот журнал поможет найти причину за минуты, а не за вечер перечитывания логов. Я начал вести такой журнал после первого же сбоя, и теперь это моя самая ценная привычка в администрировании.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *