← Blogue Guides pour agences • 10 min de lecture Comment les agences font tourner 40+ applications clientes en préproduction et production isolées sur 60 $/mois de serveurs Hetzner (avec prévisualisations de PR automatiques et transfert client propre)
Chaque agence qui héberge du travail client finit par frapper le même mur : la facture d’hébergement grossit avec la liste de clients, mais le prix propre de l’agence au client ne grossit pas. Une plateforme qui facture par siège, par projet ou par gigaoctet transforme chaque nouveau client en une marge plus petite que la précédente, jusqu’au moment où l’hébergement devient la ligne que le client remet en question sur la facture. Ce calcul est la vraie raison pour laquelle les agences finissent par chercher une alternative, pas une aversion pour Vercel ou Render comme produits.
La solution n’est pas une plateforme par siège moins chère. Ce n’est pas facturer par client du tout. Voici un exemple chiffré : 20 clients, chacun avec une copie de préproduction et de production de leur application (40 environnements en marche), isolés les uns des autres, sur de vrais prix de serveur Hetzner et un prix d’équipe Railyard fixe, comparés à ce que ces mêmes 40 environnements coûtent sur les propres plans publiés de Vercel ou de Render.
En bref
| Vercel | Render | Railyard + Hetzner | |
|---|---|---|---|
| Modèle de tarification | Pro : 20 $/mois par membre, inclut 20 $ d’usage, puis facturé à l’usage | Espace de travail Pro : 25 $/mois fixe + calcul à partir d’environ 7 $/mois par service | 99 $/mois Team, fixe, serveurs et applications illimités |
| 40 environnements clients en marche | Pas de prix par application : le coût est l’usage (bande passante, invocations de fonctions) sur les 40, c’est exactement là où les agences dépassent le plan de base | 40 services × environ 7 $/mois minimum = 280 $/mois de calcul + 25 $ d’espace de travail = plancher de 305 $/mois, avant qu’un seul service ait besoin de plus que l’instance la moins chère | Inclus dans le prix fixe; le seul coût ajouté est les serveurs eux-mêmes |
| Un client exigeant le SSO | Le SSO SAML est un module à 300 $/mois en plus de Pro | Le plan Scale (499 $/mois fixe) ajoute le SSO et le SCIM | Inclus à 99 $/mois Team |
| Coût de serveur pour 40 environnements | N/A (pas de serveur, c’est l’infrastructure de Vercel) | N/A (pas de serveur, c’est l’infrastructure de Render) | 10 serveurs Hetzner CX23 (2 vCPU, 4 Go, 5,99 €/mois chacun) = 59,90 €/mois, facturés directement par Hetzner |
| Isolation par client | Niveau projet, plateforme partagée | Niveau service, plateforme partagée | Un serveur dédié (ou environnement) par client, réseau privé, base de données séparée |
La seule ligne Render franchit les 500 $/mois avant même qu’une seule application cliente ait besoin de plus de RAM que l’instance de départ de Render n’en donne. La ligne Vercel n’a pas de chiffre propre par application parce que sa facturation n’est pas par application, ce qui est exactement le problème : une agence ne peut pas citer à un client un coût d’hébergement depuis la page de tarifs de Vercel, seulement depuis la facture du mois dernier.
Pourquoi la facturation par siège et par application échoue spécifiquement pour une agence
Une équipe à un seul produit sur Vercel ou Render paie pour son propre usage. Une agence paie pour l’usage de vingt clients différents sur un seul compte, et chaque pic de trafic, build échoué et déploiement de prévisualisation de ces clients atterrit sur la propre facture de l’agence, pas celle du client. Le chiffre de 7 $/mois de Render est un prix de départ pour la plus petite taille d’instance; la vraie application de production d’un client, celle qui sert vraiment ses propres clients, a besoin de plus que ça dès qu’elle n’est plus un jouet. Multipliez n’importe quel chiffre réaliste par service par 40 environnements en marche et l’agence gère une facture qui bouge chaque mois pour des raisons qui n’ont rien à voir avec son propre travail.
Le plan Team à 99 $/mois de Railyard est fixe : serveurs et applications illimités, approbations de déploiement, authentification unique et SCIM, et un journal d’audit, pour un seul prix peu importe le nombre de clients sur le compte. Le seul chiffre qui bouge, c’est ce que Hetzner, DigitalOcean ou n’importe quel fournisseur que l’agence utilise déjà facture pour les serveurs eux-mêmes, et cette facture vient directement du fournisseur, sans rien ajouté par-dessus.
Le modèle d’isolation : un client, un serveur (ou un environnement)
Il y a deux façons honnêtes d’isoler le travail client sur Railyard, et celle qui convient dépend du client.
Un serveur dédié par client. L’agence connecte un compte Hetzner (ou DigitalOcean, Vultr, AWS), et chaque client obtient son propre serveur. Leurs applications de préproduction et de production, leur base de données, leurs journaux, tout vit sur cette seule machine, sans rien du compte d’un autre client à proximité. C’est le modèle le plus simple à expliquer à un client qui demande « où vivent mes données », et c’est celui que le tableau chiffré ci-dessous utilise.
Un serveur partagé, un environnement par client. Pour les plus petits clients où un serveur dédié est excessif, plusieurs projets clients peuvent partager un serveur. L’isolation tient toujours : chaque application obtient sa propre base de données, provisionnée par application avec son propre utilisateur et ses propres identifiants, et le nom privé de chaque application (<nom>.railyard.internal) ne résout que vers le conteneur propre de cette application : une référence entre les applications de deux clients différents n’existe simplement pas, il n’y a aucun chemin réseau partagé à mal configurer. Networking couvre comment cette résolution privée fonctionne vraiment à travers les serveurs une fois le réseau privé activé pour l’équipe.
Dans les deux cas, les environnements sont des copies complètes d’un projet : activer un environnement donne à un client une vraie copie de préproduction avec sa propre base de données, pas un bac à sable partagé qui a juste le même code.
Le tableau de coûts chiffré : 40 environnements, 60 $/mois de Hetzner
Dix serveurs Hetzner CX23 (2 vCPU, 4 Go de RAM, 40 Go de disque, 5,99 €/mois chacun, le plan vCPU partagé le moins cher de Hetzner au moment d’écrire ces lignes) donnent 59,90 €/mois, facturés directement par Hetzner. Mettez un client par serveur, faisant tourner un processus web et un worker, chacun avec une copie de préproduction et de production :
| Par client | × 10 clients | |
|---|---|---|
| Services | Web + worker | 20 processus |
| Environnements | Préproduction + production | 40 applications en marche |
| Serveur | 1 Hetzner CX23 dédié (5,99 €/mois) | 59,90 €/mois au total |
Quatre conteneurs par client, ça semble serré sur 4 Go de RAM, et ça le serait si les quatre tournaient à pleine charge simultanément. Ce n’est pas le cas : les environnements de préproduction s’endorment après 30 minutes sans trafic par défaut, libérant la RAM pour la production, donc la machine d’un client n’a besoin de porter sa charge de production que la majorité du temps plus du trafic de préproduction occasionnel quand l’agence ou le client la regarde vraiment. C’est assez de marge pour le genre de travail client que la plupart des agences gèrent (sites marketing, petits outils internes, produits en démarrage), pas pour un client dont l’application de production est déjà sous forte charge, ce qui est exactement le client auquel vous donneriez une machine plus grosse ou un serveur à part.
Faites grimper ça au-delà de 10 clients et le seul chiffre qui change, c’est combien de serveurs Hetzner l’agence loue, au prix de Hetzner, sans marge. 20 clients, c’est 20 serveurs à environ 120 €/mois; le côté Railyard de la facture reste fixe à 99 $/mois que ce soit 10 clients ou 200.
Des prévisualisations de PR que les clients comprennent vraiment
Avec GitHub connecté et les prévisualisations activées pour une application, chaque pull request obtient sa propre copie en direct, retirée automatiquement quand la PR se ferme. C’est une URL que l’agence peut déposer directement dans un fil Slack client ou un courriel, quelque chose comme « voici la refonte de la page d’accueil, cliquez partout », sans démarrer un déploiement de préproduction séparé à la main à chaque tour de rétroaction. C’est inclus sur Pro et Team, pas une ligne qui apparaît une fois que le compte de l’agence franchit un certain seuil d’usage.
Un transfert propre à la fin du projet
Deux choses différentes peuvent arriver à la fin d’un mandat, et ce ne sont pas la même fonctionnalité.
Si le travail de chaque client a vécu à l’intérieur de la propre équipe de l’agence, rien dans le transfert n’est automatique : l’agence garde les serveurs, ou transfère la propriété des registres de serveur et d’application spécifiques vers le propre compte du client à la main.
Si l’agence a utilisé des espaces de travail client à la place (une fonctionnalité du plan Agency, 199 $/mois, qui ajoute des espaces de travail client sous une seule facture d’agence en plus de tout ce qu’inclut Team : SSO, SCIM, approbations de déploiement, journal d’audit, répliqués dans chaque espace de travail), chaque client vit déjà dans sa propre équipe depuis le premier jour, avec ses propres serveurs facturés à son propre compte cloud. Terminer le mandat est un transfert client : l’agence invite le propre courriel du client comme nouveau propriétaire de cet espace de travail, et l’espace de travail client se détache de la facturation et de l’accès admin de l’agence proprement. Le client finit par posséder exactement l’infrastructure sur laquelle il tournait déjà, rien de plus.
Team à 99 $/mois est le bon choix pour une agence qui veut un seul endroit pour gérer les applications de chaque client sous son propre compte, avec l’avantage de marge d’un prix fixe. Agency à 199 $/mois est le bon choix dès que « donner au client sa propre facture et une sortie propre » fait vraiment partie de la façon dont l’agence vend ses mandats.
Équipes, SSO et journal d’audit
Dès que la propre revue de sécurité d’un client demande l’authentification unique, Vercel répond avec un module à 300 $/mois et Render répond en poussant l’agence vers son plan Scale à 499 $/mois. Sur le plan Team de Railyard, le SSO par OpenID Connect ou SAML, le provisionnement SCIM, et le journal d’audit qui enregistre chaque déploiement, changement de variable et approbation sont déjà inclus à 99 $/mois. Consultez Teams, SSO et accès pour voir comment OpenID Connect, SAML et SCIM sont vraiment câblés, et comment les clés SSH d’équipe sont ajoutées à chaque serveur dans leur propre bloc géré sans toucher aux clés que l’agence a ajoutées elle-même.
À qui ça s’adresse vraiment
Ce n’est pas un argumentaire pour chaque agence. Une agence qui fait tourner deux ou trois clients sur un seul serveur, sans que personne ne demande le SSO, n’a probablement besoin de rien de tout ça; le plan gratuit ou une seule équipe Pro couvre bien ça. C’est pour l’agence qui paie déjà 500 $ ou plus par mois à travers ses projets clients sur une plateforme par siège, qui gère une facture qui bouge pour des raisons hors de son contrôle, et qui veut un coût d’hébergement qu’elle peut vraiment citer à un client depuis une liste de prix plutôt que depuis la facture du mois dernier. Consultez les tarifs pour le détail complet des plans, ou agences pour le reste de ce qu’inclut le plan Agency.
FAQ
Ai-je besoin du plan Agency, ou Team couvre-t-il ça?
Team (99 $/mois) couvre les serveurs et applications illimités, le SSO, les approbations de déploiement et un journal d’audit sous un seul compte, assez pour une agence qui gère elle-même les applications de chaque client. Agency (199 $/mois) ajoute des espaces de travail client : des espaces séparés par client, chacun avec les propres fonctionnalités de Team, transférés proprement au client quand le mandat se termine.
Chaque client a-t-il besoin de son propre serveur?
Non. Un serveur dédié par client est le modèle le plus simple et celui que le tableau chiffré de cet article utilise, mais les plus petits clients peuvent partager un serveur, chacun avec son propre environnement, sa propre base de données et son propre nom privé, isolés les uns des autres sans avoir besoin chacun d’une machine dédiée.
Qu’arrive-t-il à l’application d’un client si le compte Railyard de l’agence est annulé?
L’application est un conteneur sur un serveur facturé par le propre fournisseur cloud de l’agence; annuler l’abonnement Railyard ne l’arrête pas. Un espace de travail client déjà transféré au client n’est absolument pas affecté par quoi que ce soit qui arrive sur le propre compte de l’agence, puisque c’est une équipe séparée à ce moment-là.
Comment est-ce moins cher que Render une fois qu’on additionne les coûts de serveur?
Ce n’est pas automatiquement moins cher pour un seul client; c’est moins cher à l’échelle, parce que les frais de Railyard ne grossissent pas par client de la façon que le fait le calcul par service de Render. Dix clients coûtent 99 $/mois plus environ 60 €/mois de serveurs Hetzner; vingt clients coûtent le même 99 $/mois plus environ 120 €/mois de serveurs. La ligne de calcul de Render grossit à chaque service ajouté, en plus de frais d’espace de travail de 25 $ ou 499 $.
Puis-je migrer des clients existants hors de Vercel ou de Render?
Oui, pour Heroku, Render, Railway et Fly.io spécifiquement. L’importation depuis une autre plateforme transfère la configuration, les types de processus et les bases de données gérées directement depuis un jeton API. Les projets Vercel migrent comme un déploiement neuf depuis le dépôt du client plutôt qu’une importation automatisée, puisque la propre API de Vercel n’expose pas le même niveau de configuration de processus que les autres.