Vendure: установка e-commerce фреймворка на Node.js и TypeScript

31.03.2026
12:21

Vendure — это не CMS с витриной и панелью администратора. Это headless commerce фреймворк на TypeScript и Node.js, который предоставляет GraphQL API для Shop и Admin операций, а фронтенд — Next.js, React, Vue, мобильное приложение, что угодно — строится отдельно поверх. Такой подход называют API-first или headless: бэкенд отвечает только за данные и бизнес-логику, фронтенд полностью независим.

Актуальная версия — Vendure 3.5.2. Построен на NestJS, использует Apollo Server для GraphQL, административный дашборд — на React и Tailwind. Поддерживаемые СУБД: PostgreSQL (рекомендуется), MySQL, MariaDB, SQLite. Лицензия: GPLv3 для open-source ядра.

В этом руководстве разберём кому нужен Vendure, как установить его на VPS THE.Hosting в любой из 50+ локаций — от Германии (Франкфурт) до Японии (Токио), от Нидерландов (Меппел) до США (Нью-Джерси) — и как запустить в продакшн с PostgreSQL, Redis и PM2.

Для кого Vendure

Vendure — инструмент для разработчиков. Если вы привыкли к WordPress или PrestaShop где можно всё настроить через интерфейс без единой строки кода — Vendure не для вас. Здесь нужно писать TypeScript, понимать NestJS, GraphQL и уметь деплоить Node.js приложения.

Vendure подходит если: вам нужен API-first бэкенд для e-commerce с полной свободой в выборе фронтенда; вы строите headless магазин под Next.js или React Native; нужна кастомизируемая платформа для B2B, маркетплейса или нестандартного commerce-проекта; вы хотите enterprise-quality архитектуру с TypeScript, NestJS паттернами и продуманной системой плагинов; важна независимость от SaaS-провайдеров с предопределёнными roadmap.

Vendure не подходит если нужен готовый магазин который можно запустить без разработки. Для этого смотрите на LiteCart, osCommerce, PrestaShop или WooCommerce.

Архитектура Vendure

Понять архитектуру важно до установки, чтобы не удивляться на каждом шагу.

Vendure Server — основной процесс. Обрабатывает HTTP запросы, отдаёт GraphQL API, управляет транзакциями. Слушает на порту 3000 по умолчанию.

Vendure Worker — отдельный процесс для фоновых задач. Обрабатывает очередь заданий через BullMQ: отправка email, индексация поиска, обработка изображений, импорт данных. Критично для продакшн — без воркера фоновые задачи не выполняются.

PostgreSQL — основная база данных. Хранит все данные магазина.

Redis — используется BullMQ как брокер очереди заданий между сервером и воркером. В продакшн обязателен.

GraphQL API — два эндпоинта: /shop-api для витрины (покупатели) и /admin-api для административных операций.

Dashboard — административный интерфейс на React, доступен по /dashboard. Работает поверх Admin GraphQL API.

Storefront — фронтенд для покупателей. Vendure его не предоставляет из коробки. Официально поддерживается Next.js Storefront Starter, который подключается к Shop API.

Системные требования

  • Node.js v20, v22 или v24 (официально тестируемые версии; v18+ работает но не поддерживается официально)
  • PostgreSQL 12+ (рекомендуется), MySQL 8+ или MariaDB 10.3+
  • Redis 6+ (для BullMQ очереди заданий в продакшн)
  • Минимум 4 GB RAM для VPS с Vendure + PostgreSQL + Redis
  • 10+ GB дискового пространства

TypeScript — обязательная часть экосистемы. Vendure создаёт TypeScript проект, конфигурация — TypeScript объект.

Подготовка VPS

Подключаетесь:

ssh root@ваш-IP-адрес

Обновляете систему:

apt update && apt upgrade -y
apt install -y curl wget git build-essential

Создаёте пользователя:

adduser vendure
usermod -aG sudo vendure
su - vendure

Файрвол (от root или через sudo):

ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 3000/tcp   # временно, для проверки
ufw enable

Временная зона:

timedatectl set-timezone Europe/Berlin

Установка Node.js

Устанавливаете Node.js 22 LTS через nvm — это позволяет управлять версиями без конфликтов:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
source ~/.bashrc
nvm install 22
nvm use 22
nvm alias default 22
node --version    # v22.x.x
npm --version

Установка PostgreSQL

sudo apt install postgresql postgresql-contrib -y
sudo systemctl start postgresql
sudo systemctl enable postgresql

Создаёте базу данных и пользователя:

sudo -u postgres psql
CREATE DATABASE vendure;
CREATE USER vendure_user WITH PASSWORD 'сильный_пароль';
GRANT ALL PRIVILEGES ON DATABASE vendure TO vendure_user;
\c vendure
GRANT ALL ON SCHEMA public TO vendure_user;
\q

Проверяете подключение:

psql -h localhost -U vendure_user -d vendure

Установка Redis

sudo apt install redis-server -y
sudo systemctl start redis-server
sudo systemctl enable redis-server

Проверяете:

redis-cli ping
# PONG

Создание Vendure проекта

Используете официальный инструмент @vendure/create:

cd ~
npx @vendure/create my-shop

Инструмент задаёт вопросы конфигурации. Выбираете:

  • How should we proceed? → Manual Configuration (для продакшн с PostgreSQL и Redis)
  • Which database are you using? → Postgres
  • Database host address → localhost
  • Port → 5432
  • Database name → vendure
  • Database username → vendure_user
  • Database password → ваш_пароль
  • Populate with some sample data? → Yes (для первоначального теста)
  • Include the Next.js storefront? → No (добавите позже, если нужно)

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

cd my-shop

Настройка продакшн конфигурации

Открываете файл конфигурации сервера — обычно apps/server/src/vendure-config.ts или src/vendure-config.ts в зависимости от версии:

nano apps/server/src/vendure-config.ts

Настраиваете подключение к Redis для BullMQ:

import { VendureConfig } from '@vendure/core';
import { DefaultJobQueuePlugin } from '@vendure/core';
import { BullMQJobQueuePlugin } from '@vendure/job-queue-plugin/package/bullmq';

export const config: VendureConfig = {
  apiOptions: {
    port: 3000,
    adminApiPath: 'admin-api',
    shopApiPath: 'shop-api',
  },
  dbConnectionOptions: {
    type: 'postgres',
    host: process.env.DB_HOST || 'localhost',
    port: 5432,
    username: process.env.DB_USERNAME || 'vendure_user',
    password: process.env.DB_PASSWORD || 'ваш_пароль',
    database: process.env.DB_NAME || 'vendure',
    synchronize: false,  // false в продакшн!
    migrations: ['src/migrations/*.ts'],
  },
  plugins: [
    BullMQJobQueuePlugin.init({
      connection: {
        host: process.env.REDIS_HOST || 'localhost',
        port: 6379,
      },
    }),
    // ... остальные плагины
  ],
};

Создаёте .env файл в корне проекта для хранения конфиденциальных данных:

nano .env
DB_HOST=localhost
DB_USERNAME=vendure_user
DB_PASSWORD=ваш_сильный_пароль
DB_NAME=vendure
REDIS_HOST=localhost
COOKIE_SECRET=случайная_длинная_строка_для_подписи_сессий
SUPERADMIN_USERNAME=superadmin
SUPERADMIN_PASSWORD=ваш_пароль_администратора

Сборка и первый запуск

Устанавливаете зависимости и собираете проект:

cd my-shop
npm ci
npx vite build   # сборка дашборда
npm run build    # компиляция TypeScript

Запускаете первый раз для проверки:

npm run start:server

Vendure применит миграции к базе данных, заполнит начальными данными и запустит сервер. В логах должны видеть:

Vendure server (pid: XXXXX) now listening on port 3000

Открываете в браузере http://ваш-IP:3000/dashboard — административный дашборд. Логин с учётными данными из .env (SUPERADMIN_USERNAME / SUPERADMIN_PASSWORD).

Останавливаете процесс (Ctrl+C) — теперь настроите продакшн запуск.

PM2 для продакшн запуска

PM2 — менеджер процессов Node.js. Запускает, перезапускает при падении и при перезагрузке сервера:

npm install -g pm2

Создаёте конфиг PM2 в корне проекта:

nano ecosystem.config.js
module.exports = {
  apps: [
    {
      name: 'vendure-server',
      script: 'apps/server/dist/index.js',
      instances: 1,
      env: {
        NODE_ENV: 'production',
        PORT: 3000,
      },
      env_file: '.env',
    },
    {
      name: 'vendure-worker',
      script: 'apps/server/dist/index-worker.js',
      instances: 1,
      env: {
        NODE_ENV: 'production',
      },
      env_file: '.env',
    },
  ],
};

Запускаете оба процесса:

pm2 start ecosystem.config.js
pm2 save
pm2 startup   # команда для автозапуска — скопируйте и выполните вывод

Проверяете статус:

pm2 status
pm2 logs vendure-server
pm2 logs vendure-worker

Оба процесса должны иметь статус online.

Nginx как обратный прокси

Vendure слушает на порту 3000, Nginx принимает HTTPS трафик на 443 и проксирует запросы:

sudo apt install nginx -y
sudo nano /etc/nginx/sites-available/vendure

Содержимое:

server {
    listen 80;
    server_name yourstore.com www.yourstore.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name yourstore.com www.yourstore.com;

    ssl_certificate /etc/letsencrypt/live/yourstore.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourstore.com/privkey.pem;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
    }
}
sudo ln -s /etc/nginx/sites-available/vendure /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

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

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d yourstore.com -d www.yourstore.com

После получения сертификата закрываете прямой доступ к порту 3000:

ufw delete allow 3000/tcp

Какой VPS выбрать на THE.Hosting

Vendure требует больше ресурсов чем типичные PHP платформы. Node.js + PostgreSQL + Redis + Vendure Worker — это несколько процессов в памяти одновременно.

Минимум для продакшн: Standard VPS с 4 vCPU / 4 GB RAM / 80 GB NVMe. Реальные тесты показывают что сервер с 4 GB RAM справляется примерно с 240 заказами в минуту при p95 времени ответа ≤ 500 мс.

Для роста: 4 vCPU / 8 GB RAM позволяет комфортно масштабироваться — увеличить instances в PM2, добавить pgBouncer для пулинга соединений PostgreSQL.

Выбор локации по аудитории:

Для европейского рынка: Германия (Франкфурт) — финансовый центр и соответствие GDPR; Нидерланды (Меппел) — лучшая связность для pan-European headless проектов; Великобритания (Лондон) — для UK-ориентированных витрин.

Для американской аудитории: США (Нью-Джерси, Secaucus) — восточное побережье с низкой задержкой для Next.js витрин; Канада (Торонто) — канадский рынок.

Для азиатского рынка: Япония (Токио) — минимальный пинг для Восточной Азии; Гонконг — доступ к Китаю и Юго-Восточной Азии.

СНГ и Восточная Европа: Молдова (Кишинёв) — доступны Dedicated серверы; Финляндия (Хельсинки) — минимальная задержка для России.

Vendure особенно выигрывает от NVMe дисков на VPS THE.Hosting — PostgreSQL интенсивно работает с дисковой подсистемой при сложных запросах к каталогу.

Типичные проблемы

Ошибка при подключении к PostgreSQL. Убедитесь что пользователь имеет права на схему public — это требование PostgreSQL 15+. Выполните в psql: \c vendureGRANT ALL ON SCHEMA public TO vendure_user;.

Vendure Worker не подключается к Redis. Проверьте что Redis запущен (redis-cli ping → PONG) и в конфиге BullMQJobQueuePlugin указан правильный хост. Посмотрите логи: pm2 logs vendure-worker.

Dashboard не открывается после деплоя. Убедитесь что выполнили npx vite build для сборки дашборда. Без этого шага интерфейс не будет работать в продакшн.

TypeScript ошибки при сборке. Vendure привязан к конкретной версии TypeScript — не обновляйте TypeScript самостоятельно без проверки совместимости в changelog текущей версии Vendure.

PM2 не находит entry point. Убедитесь что указали правильный путь к собранным файлам в ecosystem.config.js — зависит от того монорепо или одиночный проект создал @vendure/create. Проверьте структуру папок командой ls -la dist/ или ls -la apps/server/dist/.

Готовы запустить headless магазин на Vendure?

VPS THE.Hosting с NVMe дисками, root доступом и 50+ локациями — то что нужно для Node.js платформы. Настраивайте PostgreSQL, Redis и PM2 именно под свои требования.

Заказать VPS для Vendure

FAQ:

Нужен ли фронтенд отдельно? Да, обязательно. Vendure — headless фреймворк: он предоставляет GraphQL API, но не содержит готовой витрины для покупателей. Официально поддерживается Next.js Storefront Starter, который подключается к Shop API. Его можно включить при создании проекта через @vendure/create или добавить позже.

Vendure бесплатный? Open-source ядро (Vendure Core) под лицензией GPLv3 — бесплатно. Vendure Ltd также предлагает коммерческую облачную платформу с дополнительными enterprise-функциями и поддержкой. Self-hosted вариант на VPS — полностью бесплатный.

Зачем нужен отдельный Worker процесс? Vendure Server синхронно обрабатывает API-запросы. Тяжёлые задачи — отправка email, индексация поиска, обработка изображений, импорт больших каталогов — помещаются в очередь и выполняются асинхронно в Worker. Без запущенного Worker задачи будут накапливаться в Redis без обработки.

Какую СУБД лучше выбрать? PostgreSQL — официально рекомендуемая и наиболее тестируемая база данных для Vendure. MySQL и MariaDB поддерживаются, SQLite подходит только для локальной разработки. В продакшн используйте PostgreSQL.

Можно ли использовать Vendure без TypeScript? Технически Node.js запускает скомпилированный jаvascript, но разрабатывать плагины и кастомизации без TypeScript — значит отказаться от главного преимущества платформы. Vendure спроектирован для TypeScript-разработчиков.

Полезные ссылки THE.Hosting:

Ресурсы Vendure:

Другие статьи

31.03.2026
3
База знаний / Все о доменах
Доменная зона .MOBI
31.03.2026
3
База знаний / Все о доменах
Доменная зона .HOSTING