Skip to main content

Platform Overview

Vecton is a multi-tenant SaaS platform that connects webshops, physical stores, and warehouses in real time from a single data source. The platform follows a microservices architecture where each tenant gets isolated service instances with their own databases, message queues, and storage.

Architecture

                        ┌─────────────────────────────────────┐
│ Cloudflare DNS │
│ *.vecton.hu → Cluster Ingress │
└──────────────┬──────────────────────┘

┌──────────────▼──────────────────────┐
│ Traefik Ingress Controller │
│ TLS termination (Let's Encrypt) │
└──────────────┬──────────────────────┘

┌────────────────────────┼────────────────────────┐
│ │ │
┌─────────▼─────────┐ ┌──────────▼──────────┐ ┌─────────▼─────────┐
│ Identity Layer │ │ Admin Layer │ │ Tenant Layer │
│ identity.vecton │ │ admin.vecton │ │ {tenant}.vecton │
│ │ │ │ │ │
│ ┌───────────────┐ │ │ ┌──────────────────┐ │ │ ┌───────────────┐ │
│ │ Frontend │ │ │ │ Frontend │ │ │ │ Frontend │ │
│ │ (Vue 3) │ │ │ │ (Vue 3) │ │ │ │ (Vue 3) │ │
│ └───────┬───────┘ │ │ └────────┬─────────┘ │ │ └───────┬───────┘ │
│ ┌───────▼───────┐ │ │ ┌────────▼─────────┐ │ │ ┌───────▼───────┐ │
│ │ Backend │ │ │ │ Backend │ │ │ │ Microservices│ │
│ │ (Laravel 12) │ │ │ │ (Laravel 12) │ │ │ │ (7 services)│ │
│ └───────────────┘ │ │ └──────────────────┘ │ │ └───────────────┘ │
└───────────────────┘ └──────────────────────┘ └───────────────────┘
│ │ │
┌─────────▼────────────────────────▼────────────────────────▼─────────┐
│ Shared Infrastructure │
│ ┌────────────┐ ┌──────────┐ ┌──────────┐ ┌───────────────────┐ │
│ │ PostgreSQL │ │ RabbitMQ │ │ Redis │ │ Rook-Ceph S3 │ │
│ │ (CNPG HA) │ │ (3-node) │ │ (per-ns) │ │ (Object Store) │ │
│ └────────────┘ └──────────┘ └──────────┘ └───────────────────┘ │
└────────────────────────────────────────────────────────────────────┘

Main Services

Core platform services that manage the system:

ServiceDescriptionTech Stack
Identity ServiceCentralized authentication, 2FA, device management, OAuth2Laravel 12, Sanctum, Vue 3
AdminTenant lifecycle management, platform administrationLaravel 12, FrankenPHP, Vue 3

Tenant Services

Each tenant gets isolated instances of these microservices:

ServiceDescriptionPort (dev)
WebshopProduct catalog, orders, payments, inventory8010
WarehouseStock management, transfers, receiving8011
CRMCustomer management, email campaigns8012
WebhookExternal integrations, event delivery8013
AnalyticsBusiness intelligence, reports, dashboards8014
WebSocket ProxyReal-time updates, live notifications8015
Tenant FrontendUnified Vue 3 SPA for all tenant services5175

Infrastructure

The platform runs on a bare-metal Kubernetes cluster:

ComponentTechnologyConfiguration
Kuberneteskubeadm4 nodes (1 master + 3 workers)
DatabaseCloudNativePG (PostgreSQL 16)3-node HA cluster
Message QueueRabbitMQ3-node cluster with operator
Object StorageRook-CephS3-compatible, per-tenant buckets
CacheRedis 7Per-namespace instance
IngressTraefikWith Let's Encrypt (Cloudflare DNS-01)
Load BalancerMetalLBL2 mode for bare-metal
AutoscalingKEDAScale-to-zero for idle tenants
Container RegistryHarborSelf-hosted at harbor.mng.vecton.hu
GitOpsArgoCDApp-of-Apps pattern with sync waves
SecretsSOPS + ageEncrypted secrets in git
TLS Certificatescert-managerAutomatic via Cloudflare DNS-01

Deployment Model

All deployments follow a GitOps workflow:

  1. Developer pushes code to GitHub
  2. GitHub Actions builds Docker image and pushes to Harbor
  3. CI/CD calls DevOps API to create a GitOps pull request
  4. PR auto-merges, updating image tags in the devops repo
  5. ArgoCD detects the change and syncs the cluster

Each tenant namespace is fully isolated with its own:

  • PostgreSQL database and user
  • RabbitMQ vhost and user
  • Redis instance with authentication
  • S3 buckets (private + public)
  • Kubernetes secrets (auto-generated by credential-generator)

Tenant Lifecycle

Tenants are managed through the Admin service:

  1. Creation — Admin creates tenant via UI/API
  2. Provisioning — DevOps API generates Kubernetes manifests from template
  3. Deployment — ArgoCD syncs the new namespace with all services
  4. Scaling — KEDA scales idle services to zero, scales up on traffic
  5. Deletion — Admin marks tenant for deletion, resources are cleaned up