Preparing Vendure for production: installation, setup, and deployment
We are a team with 8 years of experience in Node.js and over 20 launched e-commerce projects. One client came with an MVP on Express: under a load of 200 RPS, the GraphQL query fails with 501. Tables are not indexed, N+1 queries cascade. You need a production primer: proper Vendure installation from scratch that handles 10,000 orders per day without lag. Our approach ensures stability and zero downtime during deployment. By ordering our setup, you get a NestJS store ready for high loads.
Key problems we solve
The first typical problem is hydration mismatch during SSR on Next.js due to incorrect caching. Vendure uses Apollo Client, but without Redis, the cache resets on the first render. The second is N+1 queries in GraphQL: if you don't configure DataLoader and indexes in TypeORM, each product collection fetch generates 50+ database queries. The third is manual migrations: without TypeORM CLI and CI/CD, teams forget to apply migrations, and production fails after deployment. We solve these problems during the design phase.
How we set up Vendure turnkey?
Detailed case: an online cosmetics store (20,000 SKU). Requirements: integration with four payment gateways, delivery via Boxberry, and a custom cart with custom fields. We chose a manual installation in a monorepo. Stack: Node.js 20 LTS, PostgreSQL 14, Redis 7, Docker Compose + Nginx.
TypeORM configuration:
// src/vendure-config.ts export const config: VendureConfig = { apiConfig: { hostname: '0.0.0.0', port: 3000, adminApiPath: 'admin-api', shopApiPath: 'shop-api', }, dbConnectionOptions: { type: 'postgres', synchronize: false, logging: process.env.APP_ENV === 'development', entities: [ Customer, Order, Product, ProductVariant, // ... custom entities ], }, paymentOptions: { paymentMethods: [ StripePaymentMethod.init(), MolliePaymentMethod.init(), ], }, }; Instead of the standard CLI generator, we had to create a custom plugin for product synchronization from 1C via CommerceML. Result: catalog loading speed increased by 60% compared to the previous WooCommerce solution. With such customization, you save on infrastructure and get a NestJS store fully tailored to your tasks. Order a similar solution for your business.
Work process
- Analysis — audit the current API and database, identify bottlenecks (N+1, missing indexes).
- Design — GraphQL schema, payment and delivery plugins, architecture decision records.
- Implementation — writing configs and custom modules (NestJS + TypeORM).
- Testing — load testing with k6 up to 5000 RPS, Core Web Vitals check (LCP < 2.5 s).
- Deployment — CI/CD via Docker Compose, backups, monitoring.
| Stage | Duration | What's included |
|---|---|---|
| Analysis | 1–2 days | Code audit, profiling, load tests |
| Design | 1–2 days | Plugin selection, data schema, ADR |
| Development | 3–5 days | Configs, migrations, custom resolvers, plugins |
| Testing | 1–2 days | E2E with Cypress, unit tests, integration testing |
| Deployment | 1 day | Docker + CI/CD (GitHub Actions), monitoring |
What's included in the work?
- Setting up Vendure from scratch or migrating from another e-commerce platform.
- Complete documentation on architecture and endpoints.
- Access to the admin UI and logs.
- Team training (2 sessions of 2 hours each).
- Stable operation guarantee and support for 2 weeks after deployment.
Why manual installation is better than CLI?
The CLI generator @vendure/create is suitable for prototypes, but for production it imposes unnecessary plugins and structure. Manual installation gives full control over versions and configuration. Our clients save up to 15% on infrastructure costs through customization. Get a consultation for your project.
How is stability guaranteed after deployment?
We configure monitoring (Prometheus + Grafana), regular backups, and health checks. In case of a failure, automatic restart via Docker Compose. All changes pass CI/CD with tests and manual code review. The guarantee applies for 2 weeks after deployment.
Checklist after installation (we check each item)
| Criterion | Description |
|---|---|
| Database and migrations | Database created, migrations applied, synchronize = false |
| Admin UI | Available at /admin, CRUD for products works |
| Shop API | Response at /shop-api exists as a GraphQL schema |
| Assets | Directory exists and is writable |
| SMTP | Email sending tested on order creation |
| Worker | Job queue works, Redis connected |
| SSL | Nginx configured for HTTPS, HSTS enabled |
Installation takes from 1 to 3 days depending on integration complexity. Pricing is individual — contact us for a project estimate within 24 hours.







