MAATRIX / Блог / Bagisto на Ubuntu 24.04: пошаговая установка

Bagisto на Ubuntu 24.04: пошаговая установка

MAATRIX

Если вы искали Magento, но упёрлись в требования по железу и порог входа, Bagisto — рабочая альтернатива: та же логика мультимагазинности и каталога, но на Laravel, без платных лицензий и без Java-стека Elasticsearch-инфраструктуры уровня Magento Enterprise. Ниже — полная установка на чистый VPS с Ubuntu 24.04: от системных пакетов до очередей и SSL, без пропущенных шагов, на которых обычно спотыкаются.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое Bagisto и для кого он подходит

Bagisto — open-source платформа электронной коммерции на Laravel и Vue.js, впервые выпущенная в 2018 году командой Webkul. По архитектуре это классическое MVC-приложение: каталог товаров, мультисклады, мультивалютность, мультиязычность, встроенный конструктор атрибутов и вариаций товара — всё то, что в Magento называют "гибкостью", только с более пологой кривой обучения.

Кому подходит:

  • Небольшим и средним интернет-магазинам, которым нужна гибкость каталога (вариации, атрибуты, категории), но не нужна тяжёлая инфраструктура Magento с обязательным Elasticsearch и Varnish.
  • Разработчикам на Laravel — модули Bagisto пишутся как обычные Laravel-пакеты, и весь стек (Eloquent, Blade, очереди, кэш) знаком любому, кто работал с фреймворком.
  • Тем, кто хочет мультивендорную площадку — есть официальный модуль marketplace.

Честно о минусах: экосистема расширений заметно меньше, чем у Magento или WooCommerce, документация местами отстаёт от кода, а часть модулей (одностраничный checkout, продвинутый SEO) в бесплатной версии реализованы скромнее, чем в платных аналогах. Для сложных B2B-кейсов с индивидуальным прайсингом придётся дорабатывать самостоятельно или смотреть в сторону Odoo с его модулем продаж.

Требования к серверу и подготовка окружения

Официальный минимум — 2 ГБ RAM, но это только для установки и теста без реальной нагрузки. Composer при разрешении зависимостей и сборка фронтенда через Vite съедают память рывками, поэтому для стабильной работы закладывайте следующее.

РесурсМинимум (тест)Рекомендуется (прод)
CPU1 vCPU2 vCPU
RAM2 ГБ4 ГБ
Диск20 ГБ SSD40+ ГБ SSD
PHP8.1+8.3
MySQL5.7+ / MariaDB 10.3+MySQL 8 / MariaDB 10.6+
Node.js18+20 LTS

Если берёте VPS на 2 ГБ RAM, обязательно добавьте своп — иначе composer install на этапе сборки автозагрузчика может упасть с OOM. Как это настроить — в статье про swap и производительность Ubuntu 24.04.

Сразу после получения сервера обновите систему и создайте отдельного пользователя без root:

apt update && apt upgrade -y
adduser bagisto
usermod -aG sudo bagisto

Дальше работаем от этого пользователя (su - bagisto). Про SSH-ключи вместо пароля — отдельная тема, см. настройку SSH-ключей на Ubuntu 24.04.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

PHP, Composer и Node.js — база для Laravel-приложения

Ubuntu 24.04 несёт в стандартном репозитории PHP 8.3 — это выше минимума Bagisto (8.1), так что сторонние PPA не нужны. Ставим PHP-FPM и весь набор расширений, который требует Laravel и сам Bagisto:

sudo apt install -y php8.3-fpm php8.3-cli php8.3-mysql php8.3-mbstring \
  php8.3-xml php8.3-curl php8.3-zip php8.3-gd php8.3-bcmath \
  php8.3-intl php8.3-soap unzip curl git

Проверьте версию и список модулей:

php -v
php -m | grep -Ei 'mbstring|gd|zip|bcmath|intl'

Composer ставим официальным установщиком, а не из apt — версия в репозиториях Ubuntu почти всегда старше нужной:

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
composer --version

Node.js нужен только для сборки фронтенда (Vite собирает Vue-компоненты витрины и админки). Через NodeSource ставим LTS-ветку 20:

curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
node -v && npm -v

MySQL и Redis: база данных и кэш

Ставим сервер MySQL и запускаем защитную настройку:

sudo apt install -y mysql-server
sudo mysql_secure_installation

Создаём базу и пользователя под Bagisto — не работайте от root в проде:

CREATE DATABASE bagisto CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'bagisto_user'@'localhost' IDENTIFIED BY 'СЛОЖНЫЙ_ПАРОЛЬ';
GRANT ALL PRIVILEGES ON bagisto.* TO 'bagisto_user'@'localhost';
FLUSH PRIVILEGES;

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

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

sudo apt install -y redis-server
sudo systemctl enable --now redis-server
redis-cli ping

Должно вернуть PONG. Если планируете нагруженный магазин с высоким RPS, посмотрите на настройку Redis-кластера — для одного VPS это избыточно, но полезно понимать, куда расти.

Установка и настройка Bagisto

Разворачиваем проект через Composer прямо в домашнюю директорию (замените путь на нужный):

cd ~
composer create-project bagisto/bagisto bagisto "2.*"
cd bagisto

Установка через composer create-project займёт несколько минут — тянутся зависимости Laravel, Vue-пакеты и модули каталога. Дальше копируем .env и генерируем ключ приложения:

cp .env.example .env
php artisan key:generate

Открываем .env и прописываем реальные данные подключения к БД, домен и, если ставили, Redis:

APP_NAME=Bagisto
APP_ENV=production
APP_DEBUG=false
APP_URL=https://shop.example.com

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=bagisto
DB_USERNAME=bagisto_user
DB_PASSWORD=СЛОЖНЫЙ_ПАРОЛЬ

CACHE_STORE=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis
REDIS_HOST=127.0.0.1
REDIS_PORT=6379

APP_DEBUG=false на проде обязателен — с включённым дебагом Laravel выводит трейс с путями и переменными окружения прямо в браузер при любой ошибке.

Ставим фронтенд-зависимости и собираем ассеты:

npm install
npm run build

Запускаем интерактивный установщик Bagisto — он сам прогонит миграции, сидеры и спросит данные администратора:

php artisan bagisto:install

Мастер задаст вопросы: язык магазина по умолчанию, валюту, страну, email и пароль администратора. После завершения проверьте права на директории, которые Laravel должен писать сам (кэш, логи, загруженные изображения товаров):

sudo chown -R www-data:www-data storage bootstrap/cache public/storage 2>/dev/null
sudo chmod -R 775 storage bootstrap/cache
php artisan storage:link

nginx, SSL и очереди для продакшена

Ставим nginx, если ещё не установлен, и создаём конфиг под Bagisto:

sudo apt install -y nginx
sudo nano /etc/nginx/sites-available/bagisto
server {
    listen 80;
    server_name shop.example.com;
    root /home/bagisto/bagisto/public;
    index index.php index.html;

    client_max_body_size 64M;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

Активируем сайт и перезапускаем nginx:

sudo ln -s /etc/nginx/sites-available/bagisto /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

Если раньше не настраивали веб-сервер на этой машине — есть общая инструкция по nginx как обратному прокси с разбором таймаутов и буферов. SSL выпускаем через certbot:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d shop.example.com

Дальше — то, что часто забывают на установке Laravel-магазинов: очереди и планировщик. Bagisto ставит в очередь письма (подтверждение заказа, сброс пароля), обработку изображений и часть событий каталога. Без запущенного воркера они просто копятся в Redis и никогда не отправляются. Настраиваем через systemd:

sudo nano /etc/systemd/system/bagisto-worker.service
[Unit]
Description=Bagisto Queue Worker
After=network.target redis-server.service mysql.service

[Service]
User=bagisto
WorkingDirectory=/home/bagisto/bagisto
ExecStart=/usr/bin/php artisan queue:work redis --sleep=3 --tries=3 --max-time=3600
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
sudo systemctl enable --now bagisto-worker
sudo systemctl status bagisto-worker

--max-time=3600 заставляет воркер перезапускаться раз в час — это защищает от постепенных утечек памяти в долгоживущем PHP-процессе, характерных для Laravel Queue Worker на больших каталогах.

И планировщик заданий Laravel — он отвечает за отложенные задачи вроде очистки старых сессий и запланированных акций:

crontab -e
* * * * * cd /home/bagisto/bagisto && php artisan schedule:run >> /dev/null 2>&1

Перед сдачей магазина в эксплуатацию закэшируйте конфиги — это заметно ускоряет отклик Laravel на каждом запросе:

php artisan config:cache
php artisan route:cache
php artisan view:cache

Учтите: после config:cache изменения в .env не подхватятся автоматически — при правке переменных окружения нужно снова выполнить php artisan config:cache (или config:clear на время отладки).

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Bagisto работает без Redis?

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

Можно поставить Bagisto в Docker вместо голого VPS?

Да, в репозитории есть официальный docker-compose.yml, но для продакшена он требует доработки — там нет вынесенного volume под загруженные изображения и нет готового supervisor-конфига для очередей.

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

Почти всегда две причины: не настроен SMTP в .env (блок MAIL_*) либо не запущен queue:work — письма Bagisto отправляет асинхронно через очередь.

Сколько памяти реально нужно под каталог в 5000+ товаров?

Точных цифр без вашей структуры атрибутов и модулей не дам — это сильно зависит от количества вариаций и подключённых расширений. Отталкивайтесь от 4 ГБ RAM как безопасного старта и смотрите на реальную нагрузку через htop в первую неделю.

Как обновить Bagisto до новой версии?

Через composer update bagisto/* с последующим php artisan migrate — перед этим обязательно сделайте бэкап базы и директории storage, у мажорных обновлений случаются breaking changes в модулях.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →