ENbext.dev
DocumentationMigration

Traduction automatique depuis l’anglais. Consulter l’original.

Sur cette page

Migrer depuis Vercel

Chaque fonctionnalité Vercel possède un équivalent bext, soit intégré, soit via le système de plugins. Ce guide décrit le processus de mappage des fonctionnalités, de traduction de la configuration et de basculement DNS.

Cartographie des fonctionnalités#

Caractéristique Vercel Équivalent bext Niveau de licence
Fonctions de bord Plugins bext (QuickJS / WASM) Communauté
ISR Cache ISR bext ( [cache.isr] ) Communauté
Optimisation des images Image bext ( [image] ) Communauté
Intergiciel ( middleware.ts ) Plugins bext ou middleware natif Communauté
Fonctions sans serveur bext Routes SSR / Routes API Communauté
Analytique Métriques Prometheus + Grafana Communauté
Informations sur la vitesse Intégration OpenTelemetry Pro
Variables d'environnement Section bext.config.toml [env] Communauté
Aperçu des déploiements bext deploy avec routage basé sur les branches Communauté
Emplois Cron Planificateur de tâches bext ( [[tasks]] ) Communauté
Règles de pare-feu bext WAF ( [waf] ) Pro
Protection contre les attaques DDoS Limitation de débit bext + WAF Communauté/Pro
Domaines personnalisés bext Auto-TLS ( [tls] ) Communauté
Prise en charge des monorepo Mode multi-applications bext Communauté

vercel.json à bext.config.toml#

Réécritures#

vercel.json :

json
{
  "rewrites": [
    { "source": "/blog/:slug", "destination": "/posts/:slug" },
    { "source": "/api/:path*", "destination": "https://api.backend.com/:path*" }
  ]
}

bext.config.toml :

toml
[[route_rules]]
pattern = "/blog/:slug"
rewrite = "/posts/:slug"

[[route_rules]]
pattern = "/api/**"
upstream = "https://api.backend.com"
strip_prefix = "/api"

Redirections#

vercel.json :

json
{
  "redirects": [
    { "source": "/old", "destination": "/new", "permanent": true }
  ]
}

bext.config.toml :

toml
[[route_rules]]
pattern = "/old"
action = "redirect"
redirect = "/new"
redirect_status = 301

En-têtes#

vercel.json :

json
{
  "headers": [
    {
      "source": "/api/(.*)",
      "headers": [
        { "key": "Access-Control-Allow-Origin", "value": "*" }
      ]
    }
  ]
}

bext.config.toml :

toml
[[route_rules]]
pattern = "/api/**"
headers = { "access-control-allow-origin" = "*" }

Variables d'environnement#

Vercel Tableau de bord :

code
DATABASE_URL = postgres://...
NEXT_PUBLIC_API_URL = https://api.example.com

bext.config.toml :

toml
[env]
DATABASE_URL = "postgres://..."
NEXT_PUBLIC_API_URL = "https://api.example.com"

Ou utilisez un fichier .env (chargé automatiquement) ou des variables d'environnement du système d'exploitation. Priorité : environnement du système d'exploitation > bext.config.toml [env] > fichier .env.

Emplois Cron#

vercel.json :

json
{
  "crons": [
    { "path": "/api/cleanup", "schedule": "0 3 * * *" }
  ]
}

bext.config.toml :

toml
[[tasks]]
name = "cleanup"
schedule = "0 3 * * *"
handler = "http::GET /api/cleanup"
enabled = true

Fonctions Edge vers les plugins bext#

Les fonctions Edge Vercel s’exécutent au niveau de la périphérie CDN. Dans bext, l'équivalent est un plugin QuickJS ou WASM qui s'exécute en ligne avec la requête :

Fonction Edge Vercel (app/api/geo/route.ts) :

ts
export const runtime = 'edge';
export function GET(request: Request) {
  const country = request.headers.get('x-vercel-ip-country');
  return new Response(JSON.stringify({ country }));
}

bext Plugin QuickJS (plugins/geo.js) :

js
export default {
  name: "geo",
  hooks: {
    onRequest(ctx) {
      if (ctx.path === "/api/geo") {
        const country = ctx.headers["x-real-country"] || "unknown";
        return { status: 200, body: JSON.stringify({ country }) };
      }
    }
  }
};

Enregistrez le plugin :

toml
[plugins]
directory = "plugins"

Aperçu des déploiements#

Vercel crée une URL unique pour chaque push git. Avec bext, utilisez le routage multi-applications basé sur les branches :

bash
# Deploy a preview for a feature branch
bext-server deploy ./my-app --app preview-feature-xyz

Configurez l'aperçu pour qu'il soit accessible sur un sous-domaine :

toml
# platform.toml
[[apps]]
name = "preview-feature-xyz"
hostname = "preview-feature-xyz.app.example.com"
source = "/var/bext/apps/preview-feature-xyz"

Combinez avec le DNS générique ( *.app.example.com ) et Auto-TLS pour les URL de prévisualisation automatique.

Liste de contrôle du basculement DNS#

Lorsque vous êtes prêt à faire passer le trafic de production de Vercel à bext :

1. Préparez le serveur bext#

bash
# Verify config is valid
bext-server check

# Build and start
bext-server build
bext-server run

2. Testez avec un remplacement de fichier hosts#

bash
# /etc/hosts (your machine only)
<bext-server-ip>  app.example.com

Visitez https://app.example.com et vérifiez que toutes les pages, routes API et actifs se chargent correctement.

3. Réduire la durée de vie du DNS#

24 heures avant le basculement, réduisez le DNS TTL à 60 secondes pour que le commutateur se propage rapidement :

code
app.example.com.  60  IN  A  <bext-server-ip>

4. Mettre à jour les enregistrements DNS#

Supprimez le CNAME Vercel et ajoutez un enregistrement A pointant vers votre serveur bext :

code
# Before (Vercel)
app.example.com.  CNAME  cname.vercel-dns.com.

# After (bext)
app.example.com.  60  IN  A  203.0.113.10

Si vous utilisez Auto-TLS de bext, le certificat est émis automatiquement à la première demande après la propagation du DNS.

5. Vérifiez#

bash
# Confirm DNS points to bext
dig +short app.example.com

# Confirm TLS is working
curl -I https://app.example.com

# Check health
curl https://app.example.com/__bext/health

6. Restaurer le DNS TTL#

Après 24 heures de fonctionnement stable, remontez le TTL à une valeur normale (3 600 ou plus).

7. Supprimer le projet Vercel#

Une fois que vous avez confirmé que tout fonctionne, supprimez le projet Vercel pour arrêter la facturation.

Ce que vous gagnez#

Passer de Vercel à bext vous offre :

  • Pas de tarification par demande - coût d'infrastructure fixe quel que soit le trafic
  • Aucun démarrage à froid -- bext garde les ouvriers de rendu au chaud, SSR est toujours rapide
  • Contrôle total : les journaux, les métriques, le comportement de mise en cache et la configuration réseau vous appartiennent
  • Pas de dépendance vis-à-vis d'un fournisseur -- bext est open source ; votre déploiement est portable
  • Redis Cache L2 : le cache survit aux déploiements et est partagé entre les instances
  • Système de plugin -- étendez le serveur avec du code en bac à sable WASM, QuickJS ou nsjail
Conseil

Réduisez votre DNS TTL à 60 secondes au moins 24 heures avant le basculement afin que le commutateur se propage rapidement. Après 24 heures de fonctionnement stable, remontez-le à une valeur normale (3 600 ou plus) pour réduire la charge du résolveur DNS.

Remarque

Les fonctions Edge Vercel exécutent JavaScript au niveau Edge CDN. Les plugins bext QuickJS s'exécutent en ligne avec chaque requête sur votre serveur : ils ont accès au RequestContext complet (y compris les en-têtes géographiques injectés par votre CDN), mais ne sont pas distribués globalement, sauf si vous déployez bext dans plusieurs régions.

En rapport#

Modifier cette page ↗Besoin d’aide ? ↗
Rechercher dans la documentation

Saisissez un sujet, une commande ou une question.