...
Рейтинг ТОП-20 хостингов
Hostingi.net.uaОбзоры украинских хостинговых компаний

CMS OpenCart - обзор системы управления контентом

Структура статьи

Если совсем коротко: OpenCart запустится почти на любом хостинге, где есть PHP и MySQL, – и в этом главная ловушка. Минимальные требования выглядят скромно, магазин на пустой базе летает даже на самом дешёвом тарифе, а через полгода тот же сайт начинает задумываться на каждой странице каталога. Причём упирается он не в дисковое место, как многие ждут, а в процессор и базу данных. Это и есть то, о чём в требованиях не пишут.

Поэтому честный ответ на вопрос «какой хостинг нужен под OpenCart» звучит не «вот столько гигабайт», а «смотря какой магазин». Витрина на полсотни товаров без фильтров спокойно живёт на обычном виртуальном хостинге и переживёт вас. Каталог на десятки тысяч позиций с фильтром по характеристикам – это уже другая история, и там дешёвый общий хостинг начинает упираться в лимиты задолго до того, как кончится место на диске.

Дальше разберём, что движок на самом деле спрашивает у сервера, почему он тормозит по мере роста и где та граница, за которой пора уходить с общего хостинга. Заодно про версии – потому что выбор версии OpenCart тянет за собой версию PHP и всю обвязку из модулей, и ошибиться здесь дороже, чем с тарифом.

CMS OpenCart

Что это вообще за движок

OpenCart – бесплатная система для интернет-магазинов на PHP и MySQL. В отличие от WooCommerce, который живёт плагином внутри WordPress, это самостоятельный движок: скачали, поставили на хостинг, получили готовый магазин с каталогом, корзиной, оформлением заказа и админкой. Ничего сверху докручивать, чтобы просто начать продавать, не нужно.

Из этого растёт его репутация «лёгкого» решения. Ядро действительно компактное, ставится в пару кликов через автоустановщик у большинства хостеров, требования на бумаге минимальные. Начинающему это нравится: не надо, как с вордпрессом, разбираться, какой движок положить в основу и какой магазинный плагин к нему подобрать. Всё уже собрано в одну коробку.

Своя ниша у него понятная – малые и средние магазины, которым не нужна тяжёлая корпоративная платформа вроде Magento, но хочется чего-то посамостоятельнее плагина к блогу. Движок бесплатный, в отличие от Shopify с его ежемесячной подпиской, и это подкупает: платите только за хостинг и модули. Расплата за простоту вылезает позже и в неожиданном месте – не в возможностях, а в поведении под нагрузкой. Об этом дальше.

Зоопарк версий, в котором легко заблудиться

Вот где новичка ждёт первая яма. У OpenCart параллельно живут несколько несовместимых между собой линеек, и выбор версии определяет почти всё остальное.

Актуальная ветка – 4.x (на момент написания это 4.1.0.3). Рядом с ней продолжает жить и даже обновляться линейка 3.0.x, формально устаревшая, но на практике куда более обжитая: под неё написано подавляющее большинство модулей и шаблонов. Ещё крутятся магазины на 2.x, а кое-где встречается и древняя 1.5 – она давно не поддерживается, но работает.

Разница между тройкой и четвёркой – не косметическая. В четвёртой версии переписана внутренняя механика, и, что важнее для владельца магазина, из неё убрали OCMOD – систему, через которую модули меняли поведение движка, не трогая его исходные файлы. Теперь расширения работают через другой механизм (события), и старый модуль под тройку в четвёрку просто так не встанет. Автору расширения приходится держать отдельные сборки под разные версии, а это делает далеко не каждый. Сложился парадокс: новая версия современнее, а модулей и тем под неё меньше, и часть привычных решений под неё ещё не переехала. На удивление, именно поэтому многие магазины сознательно сидят на тройке и не спешат обновляться – там просто больше готового.

Практический смысл простой. Если магазин собирается с нуля и вы точно знаете, что нужные вам модули под четвёрку есть, – берите четвёрку и свежий PHP. Если список расширений ещё не ясен или вы переносите готовый магазин, линейка 3.0.x пока безопаснее по совместимости. И в любом случае версия движка жёстко привязывает вас к версии PHP: тройка комфортно живёт на PHP 7.4–8.1, четвёрка требует PHP 8.0 и новее. Это надо проверять до покупки хостинга, а не после – иначе можно купить тариф, где нужной версии PHP просто нет в переключателе.

Русские и украинские сборки – отдельная развилка

Тут стоит остановиться, потому что в рунете и уанете чистый OpenCart встречается реже, чем его локализованная сборка – ocStore. Это форк: то же ядро, но с переводом, доработками по SEO (человекопонятные адреса, метатеги), встроенным блогом и мелкими правками админки. Для магазина под наш рынок это удобнее, чем допиливать локализацию к оригиналу вручную.

Ловушка в том, что форк почти всегда отстаёт от оригинала по версиям. Пока OpenCart уехал на 4.1, у ocStore актуальной может быть ещё тройка. На старом движке рано или поздно упираешься в свежий PHP: хостер поднимает версию по умолчанию, а сборка на новой версии сыплет ошибками. Так что перед выбором сборки полезно смотреть не только на удобство локализации, но и на то, какой PHP она поддерживает и как давно выходили обновления. Заброшенная сборка – это отложенная головная боль, которая проявится в самый неудобный момент.

ТОП-5 хостинг-провайдеров Украины

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

HostLife Logo
Сводный рейтинг
4.74/5
Отзывы клиентов:4.84
Экспертная оценка:4.63
HyperHost Logo
Сводный рейтинг
4.69/5
Отзывы клиентов:4.65
Экспертная оценка:4.73
CityHost Logo
Сводный рейтинг
4.69/5
Отзывы клиентов:4.73
Экспертная оценка:4.64
HostPro Logo
Сводный рейтинг
4.5/5
Отзывы клиентов:4.70
Экспертная оценка:4.30
Hostiq Logo
Сводный рейтинг
4.5/5
Отзывы клиентов:4.69
Экспертная оценка:4.31

Что движок на самом деле просит у сервера

На бумаге список требований выглядит безобидно: PHP нужной версии, MySQL или MariaDB, несколько стандартных расширений PHP. По памяти в требованиях обычно фигурирует memory_limit в 128 МБ, и для витрины этого хватает. Но для живого магазина с модулями разумнее сразу закладывать 256 МБ и больше – про PHP memory_limit и то, как он считается на самом деле у нас есть отдельный разбор, здесь скажу только, что реальный расход почти всегда выше цифры в счётчике.

Есть один параметр, о который спотыкаются регулярно и который в общих требованиях почти не упоминают, – max_input_vars. Он ограничивает, сколько полей форма может передать за один раз. Пока вы просто торгуете, он незаметен. Но заведите товар с большим числом характеристик или категорию с сотнями позиций, попробуйте сохранить её из админки и часть данных молча пропадёт, потому что упёрлась в лимит. Диагностируется это отвратительно: ошибки нет, просто «почему-то не сохранилось». Стандартное значение 1000 для крупного каталога маловато, разумный ориентир – 5000.

Сюда же и массовый импорт товаров. Загрузка нескольких тысяч позиций из файла честно жрёт и оперативную память, и процессорное время, и легко упирается в max_execution_time: скрипт не успевает отработать за отведённые секунды и обрывается на середине. На дешёвом общем хостинге спокойного импорта большого прайса ждать не стоит – либо дробить файл на куски, либо делать это на более мощном сервере.

Отдельная тема – количество файлов. OpenCart вместе с модулями, кэшем и, главное, кэшем изображений (движок под каждый товар генерирует уменьшенные копии картинок) плодит десятки тысяч мелких файлов. На виртуальном хостинге это упирается не в гигабайты, а в лимит inode – счётчик числа файлов, про который хостеры предпочитают молчать. Магазин на пару тысяч товаров с несколькими картинками на каждый способен съесть этот лимит, когда на диске ещё вагон свободного места. Сообщение «No space left on device» при свободном диске – как раз про это.

Почему магазин со временем начинает тормозить

А теперь к самому частому обращению. Сценарий почти всегда один: на старте магазин работает бодро, владелец радуется, наполняет каталог, ставит модули, запускает фильтр по параметрам – и в какой-то момент замечает, что страницы грузятся заметно дольше. Первая мысль – «слабый хостинг, надо тариф пожирнее». Иногда это правда. Гораздо чаще – нет.

Дело в том, как OpenCart устроен внутри. Он очень много общается с базой данных: на генерацию одной страницы каталога уходит не один запрос, а десятки. Пока товаров мало, база отвечает мгновенно, и этого никто не замечает. Когда каталог разрастается до десятков тысяч позиций, а сверху навешан фильтр, который на каждое движение пересобирает выборку по нескольким условиям, – те же самые запросы начинают выполняться уже не миллисекунды, а секунды. Сервер при этом не «сломан», он честно перемалывает то, что ему подсунули.

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

Со стороны хостера картина видна ещё нагляднее. Провайдер не видит абстрактный «медленный сайт» – он видит, что конкретный аккаунт упёрся в лимит процессора: памяти вроде хватает, а сайт всё равно тормозит. На виртуальном хостинге ресурсы аккаунта ограничены, и делает это CloudLinux – та самая изоляция, из-за которой появляются лимиты на CPU, память и процессы. Когда OpenCart с тяжёлым фильтром съедает выделенную долю процессора, движок не падает целиком – он начинает тормозить, потому что упёрся в потолок. И вот тут покупка тарифа с бо́льшим диском не помогает вообще никак: диск не был проблемой.

Что помогает на самом деле – вещи, которые к объёму тарифа отношения не имеют. Включённое кэширование, чтобы не пересобирать одни и те же страницы заново. Сжатые картинки: фотография товара на пять мегабайт – это не про красоту, это про медленную загрузку и раздутый кэш. OPcache на стороне PHP, чтобы движок не перечитывал свой код при каждом запросе. Иногда – переезд с Apache на nginx, который на больших объёмах отвечает быстрее. Если после всего этого сайт всё равно медленный, стоит померить TTFB – время ответа сервера и понять, где именно теряются секунды: в базе, в коде или на канале.

Здесь путаются чаще всего. «Медленно» и «мало ресурсов» – это не одно и то же, и лечатся они по-разному.

Модули: где обычно и прячется тормоз

OpenCart без модулей – это голая витрина. Реальный магазин обвешан расширениями: оплата, доставка, выгрузки, SEO, конструктор страниц. И именно здесь чаще всего живёт то, что кладёт производительность.

Исторически модули меняли поведение движка двумя способами – через OCMOD (родная система) и через vQmod (сторонняя, старше). Держать в одной установке оба сразу – так себе идея: они не знают друг о друге и делают одну и ту же работу двумя несогласованными путями, а это источник трудноуловимых конфликтов. В четвёрке, напомню, OCMOD убрали совсем, что добавило неразберихи с совместимостью старых расширений и даже в первых релизах четвёрки местами работало нестабильно.

Наблюдение из практики: когда магазин начинает тормозить, владельцы почти никогда не подозревают модули. Копают в хостинг, в тариф, в «медленный PHP». А поставь на такой сайт инструмент вроде Query Monitor и посмотри, кто ест ресурсы, – и нередко окажется, что виноват не каталог и не оплата, а давно забытый конструктор страниц или счётчик, который включили пару лет назад и забыли. Тяжёлый модуль незаметнее слабого хостинга ровно потому, что на него никто не думает.

Немного про безопасность

Тема, которую в обзорах CMS обычно проговаривают вскользь, а зря. У OpenCart есть своя особенность: проект исторически прохладно относился к тем, кто сообщал о найденных уязвимостях, и достучаться до разработчиков с сообщением о проблеме бывало непросто. Это не значит, что движок дырявый, – это значит, что рассчитывать в вопросах безопасности разумнее на себя.

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

Как выбрать хостинг под OpenCart

Соберём в одну картину. Для небольшого магазина – витрина, каталог до нескольких сотен позиций, без тяжёлых фильтров – подойдёт обычный виртуальный хостинг, и переплачивать не за что. Смотреть тут стоит не на объём диска (его почти всегда с запасом), а на возможность выбрать нужную версию PHP, на адекватный лимит процессора и на то, есть ли OPcache и кэширование из коробки.

Граница, за которой пора задуматься о VPS, проходит не по числу товаров как таковому, а по нагрузке. Большой каталог с фильтром по характеристикам, регулярные массовые выгрузки, заметная посещаемость в пик – вот сигналы, что общий хостинг с его лимитами начнёт вас поджимать. На VPS вы получаете выделенный процессор и память и можете настроить сервер под себя; разницу между общим хостингом, облаком и VPS по сути, а не по витрине мы разбирали отдельно, как и разные типы размещения в целом.

И последнее – почему стоит быть осторожнее с красивыми цифрами в тарифах. «Безлимитный диск» и «100 000 посещений» на витрине хостинга ничего не говорят о том, как поведёт себя именно ваш магазин под нагрузкой, а для OpenCart решает как раз это. Мы поэтому оцениваем хостинги по реальным замерам, а не по обещаниям: скорость ответа, стабильность, поведение поддержки. Для магазина, где каждая лишняя секунда загрузки – это ушедший покупатель, честная цифра важнее заявленной.


Источники

F.A.Q. по OpenCart

Какой хостинг нужен для интернет-магазина на OpenCart?

Зависит от масштаба магазина, а не от объёма диска. Витрина на несколько сотен товаров без тяжёлых фильтров спокойно живёт на обычном виртуальном хостинге. Большой каталог с фильтром по характеристикам и заметной посещаемостью уже упирается в лимиты общего хостинга – тут пора смотреть в сторону VPS. Выбирать стоит по возможности задать нужную версию PHP, по лимиту процессора и наличию кэширования, а не по гигабайтам.

Почему OpenCart со временем начинает тормозить?

Движок много общается с базой: одна страница каталога – это десятки запросов. Пока товаров мало, база отвечает мгновенно, но с ростом каталога и включённым фильтром те же запросы выполняются уже секундами. Сервер при этом не сломан – он честно перемалывает то, что ему подсунули. Чаще всего дело не в хостинге, а в каталоге, фильтрах и модулях.

Если магазин тормозит, поможет ли тариф подороже?

Обычно нет, если проблема в нагрузке на процессор и базу. OpenCart упирается в лимит CPU, а не в дисковое место, поэтому тариф с бо́льшим диском тут ничего не решает. Помогает другое: кэширование, сжатие картинок, OPcache, чистка каталога и отключение лишних счётчиков. Диск почти всегда был с запасом – менять надо не его.

OpenCart или ocStore – что выбрать?

ocStore – это локализованный форк OpenCart: то же ядро плюс перевод, SEO-доработки и встроенный блог. Для магазина под наш рынок он удобнее, чем допиливать локализацию к оригиналу вручную. Ловушка в том, что форк почти всегда отстаёт по версиям, и на старом движке рано или поздно упираешься в свежий PHP. Перед выбором посмотрите, какой PHP поддерживает сборка и как давно выходили обновления.

Какую версию OpenCart выбрать – 3.x или 4.x?

Если магазин собирается с нуля и нужные модули под четвёрку есть – берите 4.x и свежий PHP. Если список расширений ещё не ясен или вы переносите готовый магазин, линейка 3.0.x пока безопаснее по совместимости: под неё написано больше модулей и тем. Парадокс в том, что новая версия современнее, а готовых решений под неё меньше. В четвёрке к тому же убрали OCMOD, из-за чего часть старых расширений под неё не переехала.

Какая версия PHP нужна для OpenCart?

Версия движка жёстко привязывает вас к версии PHP. Линейка 3.0.x комфортно живёт на PHP 7.4–8.1, а 4.x требует PHP 8.0 и новее. Проверять это надо до покупки хостинга: бывает, что на тарифе нужной версии PHP просто нет в переключателе. По памяти для магазина с модулями разумно закладывать memory_limit от 256 МБ, а не минимальные 128.

Почему из админки не сохраняется товар или категория целиком?

Скорее всего, дело в параметре max_input_vars – он ограничивает, сколько полей форма передаёт за раз. У товара с большим числом характеристик или у категории с сотнями позиций часть данных молча упирается в лимит и пропадает. Ошибки при этом нет, поэтому диагностируется это отвратительно. Стандартное значение 1000 для крупного каталога маловато, разумный ориентир – 5000.

Почему выходит «No space left on device», хотя на диске есть место?

Это про лимит inode – счётчик числа файлов, а не гигабайт. OpenCart вместе с модулями и кэшем изображений плодит десятки тысяч мелких файлов, и магазин на пару тысяч товаров способен упереться в этот лимит при свободном диске. Помогает чистка кэша и лишних файлов. Проверять при таком сообщении надо именно счётчик файлов, а не место.

Когда OpenCart-магазину пора переходить на VPS?

Граница проходит не по числу товаров, а по нагрузке. Большой каталог с фильтром по характеристикам, регулярные массовые выгрузки товаров и заметная посещаемость в пик – сигналы, что лимиты общего хостинга начнут поджимать. На VPS вы получаете выделенный процессор и память и можете настроить сервер под себя. Для небольшой витрины это лишняя трата – там хватает обычного виртуального хостинга.

Чем OpenCart отличается от WooCommerce?

OpenCart – самостоятельный движок: поставили на хостинг и получили готовый магазин с каталогом, корзиной и админкой. WooCommerce живёт плагином внутри WordPress, то есть сначала нужен сам блоговый движок, а магазин навешивается сверху. За счёт этого у OpenCart репутация «лёгкого» решения из коробки. Расплата за простоту вылезает позже – в поведении под нагрузкой, а не в возможностях.

Что такое OCMOD и vQmod и почему старые модули не встают в OpenCart 4?

Это системы, через которые модули меняют поведение движка, не трогая его исходные файлы: OCMOD – родная, vQmod – сторонняя и постарше. Держать оба сразу в одной установке – плохая идея, они не знают друг о друге и конфликтуют. В четвёртой версии OCMOD убрали совсем, расширения перевели на механизм событий, поэтому модуль под тройку в четвёрку просто так не встанет. Автору приходится держать отдельные сборки под разные версии, а это делает не каждый.

Как ускорить OpenCart без смены тарифа?

Включить кэширование, чтобы движок не пересобирал одни и те же страницы заново. Сжать картинки товаров – фото на пять мегабайт раздувает и загрузку, и кэш. На стороне PHP помогает OPcache, иногда – переезд с Apache на nginx. Отдельно стоит отключить подсчёт количества товаров в категории: на большом каталоге это лишний тяжёлый запрос на каждой странице.