Услуги Создание магазина Доработка Интеграция 1С О компании FAQ Блог Кейсы Отзывы Контакты
А
Автор статьи

Установка OpenCart на сервер: пошаговая инструкция 2026 (Ubuntu, Nginx, PHP 8.2+)

Установка OpenCart на сервер: инструкция 2026

Первый раз я ставил OpenCart на сервер в 2019-м — третью версию, на дешёвый VPS, с Apache. Переустановил три раза: забыл config-dist.php, не настроил права на storage, и только на третий завелось. Сейчас ставлю OC4 за 20–30 минут — набил порядок на разных проектах раз пятьдесят. В этой статье расписал то, что работает безотказно.

Всё проверено на Ubuntu 22.04 и 24.04, Nginx, PHP 8.2–8.3, MySQL 8.0. Если у вас Apache — конфиги другие, но логика та же. Если ставите OpenCart 3.x — папка upload будет корнем, а не подпапкой, в остальном порядок аналогичен.

Требования к серверу: на чём я обычно ставлю

OpenCart 4 официально тестируют на PHP 8.2–8.3. На 8.0 и 8.1 тоже работает, но я уже не рисковал бы — на одном проекте вылезла несовместимость с библиотекой Twig на 8.0, пришлось экстренно обновлять PHP. Ставьте сразу 8.2 или 8.3.

По железу: OC4 вхолостую жрёт 200–300 МБ RAM. С Redis, MySQL и PHP-FPM получается 600–800 МБ, а с Elasticsearch — за гигабайт. Беру VPS от 2 ГБ. На 1 ГБ тоже можно, но без Redis и при минимальном трафике. У меня был клиент на 1 ГБ — после установки модуля экспорта сервер лёг через час, пришлось апгрейдить.

КомпонентМинимумРекомендую
ОСUbuntu 22.04 LTSUbuntu 24.04 LTS
Веб-серверNginx 1.24 / Apache 2.4Nginx 1.26+
PHP8.08.2 или 8.3
Расширения PHPcurl, gd, mbstring, zip, xml, mysqli, openssl+ redis, intl, bcmath
База данныхMySQL 8.0 / MariaDB 10.6MySQL 8.4 / MariaDB 11.4
КэшRedis 7+
RAM1 ГБ2 ГБ
Composerобязательнообязательно

Проверить установленные расширения PHP можно командой php -m | grep -i curl. Если чего-то нет — доставите на шаге 1.

Шаг 1. Обновление системы и установка пакетов

Подключаюсь к свежему серверу и всегда первым делом обновляю пакеты. На одном проекте пропустил этот шаг — apt вытянул старую версию Nginx, которая не поддерживала http2, пришлось переставлять.

sudo apt update && sudo apt upgrade -y
sudo apt install nginx mysql-server redis-server -y
sudo apt install php8.2-fpm php8.2-mysql php8.2-curl php8.2-gd 
  php8.2-mbstring php8.2-xml php8.2-zip php8.2-redis -y

Если apt не находит php8.2 — добавьте PPA: sudo add-apt-repository ppa:ondrej/php && sudo apt update. Пользуюсь им с 2019 года, ни разу не подводил.

После установки проверьте, что PHP-FPM запущен: sudo systemctl status php8.2-fpm. Если не запущен — sudo systemctl enable --now php8.2-fpm.

Шаг 2. Настройка MySQL: создаём базу и пользователя

Захожу в MySQL под root:

sudo mysql -u root -p

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

CREATE DATABASE opencart_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'opencart_user'@'localhost' IDENTIFIED BY 'Ваш_надёжный_пароль';
GRANT ALL PRIVILEGES ON opencart_db.* TO 'opencart_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

На MySQL 8.0 плагин caching_sha2_password по умолчанию — OC4 работает с ним без проблем. Для OC3 на старом PHP меняйте: ALTER USER 'opencart_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'пароль';.

Пароль рекомендую генерировать через openssl rand -base64 24 и хранить в менеджере паролей. Не пишите пароли в Git и не храните в открытом виде в конфигах.

Шаг 3. Redis: почему я ставлю его всегда

Без Redis страницы категорий грузятся в 2–3 раза дольше. Проверял на проекте с 3 000 товаров: без Redis — 1.2 с, с Redis — 0.4 с. Для Core Web Vitals это критично.

Redis уже установлен на шаге 1. Проверьте статус и включите автозапуск:

sudo systemctl enable redis-server
sudo systemctl status redis-server

По умолчанию Redis слушает 127.0.0.1:6379 без пароля — для одного сервера достаточно. При внешнем доступе задайте requirepass в /etc/redis/redis.conf и пропишите пароль в админке (Система → Настройки → ваш магазин → Redis).

Шаг 4. Скачивание OpenCart: не попадитесь на GitHub rate limit

Скачиваю актуальный релиз с GitHub. Peer-релиз OC4 на момент написания — 4.1.0.3, но всегда проверяйте последнюю версию на странице релизов.

cd /tmp
wget https://github.com/opencart/opencart/releases/download/4.1.0.3/opencart-4.1.0.3-upload.zip
unzip opencart-4.1.0.3-upload.zip

Если wget не качает из-за редиректа или rate limiting — используйте curl -L -o opencart.zip URL или scp opencart.zip root@ваш-сервер:/tmp/.

В архиве OC4 лежит папка upload — это корень сайта, не путайте с родительской директорией. В OC3 корнем был сам распакованный архив, а в OC4 — именно upload. Частая ошибка у новичков.

Шаг 5. Размещение файлов: самое критичное место

Копирую содержимое upload в веб-корень. Называю папку по домену — так проще ориентироваться, когда на сервере несколько проектов.

sudo mkdir -p /var/www/myshop.ru
sudo cp -r /tmp/upload/* /var/www/myshop.ru/
sudo chown -R www-data:www-data /var/www/myshop.ru
sudo chmod -R 755 /var/www/myshop.ru

Обязательно переименуйте конфиги. Без этого шага OpenCart просто не запустится — он проверяет наличие config.php при старте. Про эту мелочь я споткнулся в самый первый раз и потратил час на поиск проблемы.

sudo mv /var/www/myshop.ru/config-dist.php /var/www/myshop.ru/config.php
sudo mv /var/www/myshop.ru/admin/config-dist.php /var/www/myshop.ru/admin/config.php

Проверьте права на запись для system/storage и image/cache — веб-сервер должен иметь возможность туда писать во время установки и работы. После установки права можно ужесточить: sudo find /var/www/myshop.ru -type f -exec chmod 644 {} ; и sudo find /var/www/myshop.ru -type d -exec chmod 755 {} ;, а папки system/storage/cache, system/storage/logs и image/cache оставить 777.

Шаг 6. Настройка Nginx: конфиг, который я копирую из проекта в проект

Создаю конфиг в /etc/nginx/sites-available/myshop.ru с редиректом HTTP → HTTPS и проксированием PHP. Это базовая версия, которую я донастраиваю под конкретный проект (кеширование статики, gzip, ограничение доступа к системным папкам).

server {
    listen 80;
    server_name myshop.ru www.myshop.ru;
    return 301 https://myshop.ru$request_uri;
}

server {
    listen 443 ssl http2;
    server_name myshop.ru www.myshop.ru;

    root /var/www/myshop.ru;
    index index.php index.html;

    ssl_certificate /etc/letsencrypt/live/myshop.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/myshop.ru/privkey.pem;

    location ~* .(css|js|jpg|jpeg|png|gif|ico|svg|woff|woff2|ttf|eot)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }

    location / {
        try_files $uri $uri/ /index.php?_route_=$request_uri;
    }

    location ~ ^/(system|storage/config|admin/config) {
        deny all;
    }

    location ~ .php$ {
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Ключевая строка — try_files $uri $uri/ /index.php?_route_=$request_uri. Без неё все страницы кроме главной отдают 404. Однажды забыл её — потратил полтора часа на поиск проблемы, пока не понял, что дело в Nginx, а не SEO-модуле.

Для SSL использую Let’s Encrypt через certbot: sudo certbot --nginx -d myshop.ru -d www.myshop.ru. Certbot сам подправит конфиг, но я предпочитаю сначала создать свой, потом запускать certbot — меньше шансов, что он сломает форматирование. После любого изменения конфига проверяйте синтаксис: sudo nginx -t && sudo systemctl reload nginx.

Для переходящих с Apache: в Nginx нет .htaccess, все правила в server-блоке. OpenCart 4 не требует .htaccess для Nginx — ЧПУ уже в конфиге выше.

Шаг 7. Установка через браузер: что вас ждёт

Открываю https://myshop.ru — если всё верно, вижу мастер установки:

  1. Лицензия — ставьте галочку и жмите Continue. Тут без вариантов, лицензия GPL, всё легально.
  2. Pre-Installation — мастер проверяет PHP-расширения, права на папки, версию MySQL. Все строки должны быть зелёными. Если горят красные — не нажимайте Continue, сначала исправляйте. Самое частое: неправильные права на system/storage. Я пару раз пытался проскочить — установка валилась на следующем шаге, и приходилось возвращаться.
  3. Configuration — вводите данные БД (localhost, opencart_db, opencart_user, пароль), email и пароль админа. Тут же переименуйте папку admin во что-то вроде backend — сделать это потом гораздо сложнее.
  4. Finished — установка завершена. Запишите данные администратора.

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

Шаг 8. Удаление папки install: не пропускайте

Обязательно. Как только увидели админку — удалите папку install из корня сайта. Это не рекомендация, это правило безопасности. Если оставить install, любой человек может зайти на myshop.ru/install и переустановить ваш магазин, обнулив все данные.

sudo rm -rf /var/www/myshop.ru/install

У клиента, пропустившего этот шаг, через неделю сайт открывался с чистой установкой — злоумышленники переустановили OpenCart и получили админку. Хорошо, магазин только тестировался.

Типичные проблемы: что идёт не так (и как я это чинил)

Белый экран или 500. Проверяю права на system/storage, PHP-FPM, и смотрю логи: sudo tail -f /var/log/nginx/error.log и php8.2-fpm.log. В 80% случаев проблема находится в логах за 30 секунд.

«Could not connect to database server». Три причины: неправильный хост (надо localhost, не 127.0.0.1), неверный пароль, или пользователь MySQL не создан. Проверьте командой mysql -u opencart_user -p -h localhost opencart_db.

ЧПУ не работают. Если вы на Nginx — забудьте про .htaccess. Проверьте, что в конфиге есть try_files $uri $uri/ /index.php?_route_=$request_uri. Если на Apache — проверьте, что включён mod_rewrite и в корне лежит .htaccess из дистрибутива OC4. Я однажды потратил вечер на то, что Apache не читал .htaccess из-за AllowOverride None в основном конфиге.

Выкидывает из админки. Если используете Redis для сессий — проверьте, что он запущен. В админке (Система → Настройки → ваш магазин → Хранилище сессий) должно стоять redis или file по умолчанию. На одном проекте Redis упал из-за нехватки памяти — я полдня не мог понять, почему разлогинивает каждые 5 минут.

После установки: что я делаю всегда

  • SSL — проверьте редирект HTTP → HTTPS и сертификат.
  • SEO URL — админка → Система → Настройки → ваш магазин → вкладка Настройки → SEO → включить.
  • Бэкапы — cron на ежедневный дамп БД: mysqldump -u opencart_user -p opencart_db > /backup/db_$(date +%Y%m%d).sql. Копируйте на другой сервер, не храните на том же.
  • Папка install — должна отсутствовать. Если есть предупреждение в админке — удалите.
  • Redis — включите в админке. Замена файлового кэша на Redis даёт прирост в разы.

Вся установка занимает 20–40 минут с настроенным сервером. Первый раз может растянуться на пару часов — у меня так и было.

FAQ

Какую версию OpenCart выбрать для нового магазина?
OpenCart 4.x. OC3 ещё поддерживают, но модули пишут под четвёртую. Ставлю третью только если клиенту нужен старый модуль.

Нужна ли VPS или подойдёт shared-хостинг?
OC4 требует VPS с root — Composer, cron и Redis не работают на shared. OC3 ещё можно, но будет медленно.

Можно ли установить OpenCart без Composer?
Нет. OC4 тянет зависимости через Composer — Twig, Symfony, библиотеки работы с БД. Без него установка не завершится.

Где хранить конфиг БД в OC4?
В config.php в корне и admin/config.php. OC4 не использует .env — только PHP-константы.

Почему после установки белый экран?
Чаще всего права на system/storage. Дайте 777 на storage/cache и storage/logs, проверьте PHP-FPM. Если нет — смотрите логи.

Источники

Версии OpenCart — GitHub. Расширения — Marketplace. Опыт — 17 лет, 150+ проектов.

← Предыдущая Кастомные фильтры и умный поиск в OpenCart: как сделать каталог удобным Следующая → Товарная карточка, которая продаёт: 20 элементов для конверсии в OpenCart

Комментарии (0)

Пока нет комментариев. Будьте первым!

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

Ваш комментарий появится после проверки модератором.