Choisir qui peut s’inscrire comme partenaire
Les partenaires s’inscrivent à/partner/signup sur le domaine de votre tableau de bord. La page crée d’abord le compte de la personne si elle n’est pas connectée, puis le partenaire. Les partenaires se connectent à /partner/login. PARTNER_SIGNUP détermine qui peut s’inscrire :
open, la valeur par défaut sur un déploiement auto-hébergé, laisse s’inscrire tout le mondeinviteexige un lien d’inscription que vous créez pour chaque partenaire
DATABASE_URL et APP_BASE_URL qui pointent vers votre déploiement :
.partner-invites/, nommé d’après l’invitation, que seul votre utilisateur peut lire. Le lien fonctionne une seule fois, pour cette adresse courriel une fois que son titulaire l’a vérifiée, pendant 7 jours. Envoyez-le au partenaire, puis supprimez le fichier.
Donner des sous-domaines aux partenaires
PARTNER_BASE_DOMAIN est le domaine dont vos partenaires reçoivent des sous-domaines, comme partners.example.com. Choisissez un domaine neutre, parce que les clients de vos partenaires le voient dans leur barre d’adresse et dans leurs courriels :
1
Faire pointer un enregistrement générique vers votre serveur
Chez votre fournisseur DNS, ajoutez pour
*.partners.example.com un enregistrement qui pointe vers le serveur qui exécute l’admin.2
Définir le domaine de base
Définissez
PARTNER_BASE_DOMAIN=partners.example.com et redémarrez l’admin et le worker. Chaque nouveau partenaire réserve alors un sous-domaine à l’inscription, et les partenaires inscrits plus tôt en reçoivent un au démarrage de l’admin.3
Autoriser votre fournisseur de courriel à envoyer depuis ce domaine
Les courriels des partenaires partent de
no-reply@partners.example.com, sous le nom de chaque partenaire. Vérifiez cet expéditeur auprès de votre fournisseur de courriel, sinon les courriels échouent.4
Servir le HTTPS pour les sous-domaines
Avec le TLS à la demande de Caddy, Caddy obtient un certificat pour le sous-domaine de chaque partenaire à sa première visite. Avec un autre proxy, donnez-lui un certificat générique pour
*.partners.example.com.PARTNER_BASE_DOMAIN, les partenaires ne reçoivent aucun sous-domaine, et leurs courriels partent de EMAIL_FROM. Un partenaire a alors besoin de son propre domaine vérifié avant de pouvoir créer une entreprise ou une démo.
Servir les domaines propres des partenaires
Un partenaire sur un palier payant peut connecter un sous-domaine de son propre site Web, commeapp.acmeagency.com, et tout partenaire le peut si vous ne vendez aucun palier. Le partenaire ajoute deux enregistrements que la console affiche : un CNAME qui pointe vers PARTNER_DOMAIN_CNAME_TARGET, et un enregistrement TXT qui prouve qu’il contrôle le domaine. Le worker les vérifie, et le domaine devient actif dès que les deux sont valides. Choisissez une façon d’émettre les certificats.
Caddy sur Docker Compose
Le Caddy de Compose émet le certificat de chaque domaine à la première visite, après que l’admin a approuvé le nom d’hôte à/api/tls/ask. Définissez ces valeurs dans .env, ouvrez les ports TCP 80 et 443 et le port UDP 443, puis redémarrez la pile :
APP_BASE_URL, sauf si vous définissez PARTNER_DOMAIN_CNAME_TARGET. Servir le HTTPS depuis Caddy explique quels noms d’hôte Caddy approuve.
Cloudflare for SaaS
Quand le DNS dePARTNER_BASE_DOMAIN est chez Cloudflare, Cloudflare peut plutôt émettre les certificats des partenaires. Dans la zone, activez Cloudflare for SaaS sous SSL/TLS > Custom Hostnames. Ajoutez un enregistrement proxifié comme host.partners.example.com comme origine de repli, et réglez le mode de chiffrement de la zone sur Full. Définissez ensuite CLOUDFLARE_SAAS_API_TOKEN avec un jeton qui a l’autorisation Zone > SSL and Certificates > Edit, et CLOUDFLARE_SAAS_ZONE_ID avec l’ID de la zone.
Les partenaires font pointer leur CNAME vers l’origine de repli. Si Cloudflare for SaaS et CADDY_ON_DEMAND_TLS sont tous deux définis, le déploiement utilise Cloudflare for SaaS. Les étapes de Cloudflare for SaaS du guide Docker Compose couvrent chaque réglage.
Traefik
Traefik n’achemine que les noms d’hôte pour lesquels il a un routeur : les noms d’hôte des partenaires ont donc besoin d’un routeur de plus, qui attrape tous les autres noms d’hôte. Traefik n’émet pas de certificats pour les noms d’hôte qu’il n’a pas vus : associez-le donc à Cloudflare for SaaS, qui sert les certificats des partenaires devant lui. C’est ainsi que la version hébergée de LobbyStack fonctionne sur Dokploy. Ajoutez un fichier de configuration dynamique, commepartner-hosts.yml, dans le dossier que Traefik surveille :
partner-hosts.yml
1 place ces routeurs sous toutes les autres routes : votre tableau de bord garde donc la sienne. Le second routeur redirige les requêtes HTTP simples vers HTTPS. Remplacez your_admin_service par le nom du service de l’admin sur le réseau de Traefik. L’admin répond au nom d’hôte de chaque partenaire avec la marque de ce partenaire, et à tout autre nom d’hôte avec une erreur 404.
Traefik répond aux noms d’hôte des partenaires avec son certificat par défaut, qui ne les nomme pas. Gardez le mode de chiffrement de la zone Cloudflare sur Full, et non Full (strict), pour que Cloudflare l’accepte. Pour les sous-domaines des partenaires, faites aussi passer l’enregistrement générique par le proxy de Cloudflare.
Permettre aux partenaires de facturer leurs entreprises avec Stripe Connect
Stripe Connect permet à chaque partenaire de connecter son propre compte Stripe et d’y vendre des formules. Configurez-le une fois dans votre compte plateforme Stripe :1
Activer Connect
Dans votre compte Stripe, activez Connect.
2
Créer la clé
Créez une clé secrète ou une clé restreinte avec l’accès en écriture que liste
STRIPE_CONNECT_SECRET_KEY, et définissez-la dans STRIPE_CONNECT_SECRET_KEY.3
Créer le point de terminaison webhook
Créez un point de terminaison à votre
APP_BASE_URL suivie de /api/webhooks/stripe, pour les événements des comptes connectés, avec les événements que liste STRIPE_CONNECT_WEBHOOK_SECRET. Définissez son secret de signature dans STRIPE_CONNECT_WEBHOOK_SECRET.4
Redémarrer
Redémarrez l’admin et le worker. Le propriétaire de chaque partenaire peut alors connecter un compte Stripe sur la page Paiements de la console.
Vendre des paliers aux partenaires avec Polar
Les partenaires achètent des paliers depuis la page Facturation de la console et vous paient par Polar. Créez un produit récurrent pour chaque palier payant et chaque période, avec les prix de ce tableau :
La page Facturation affiche ces prix à partir du code : donnez donc les mêmes à vos produits. Configurez ensuite la facturation :
- Définissez les six ID de produit :
POLAR_PARTNER_STARTER_MONTHLY_PRODUCT_ID,POLAR_PARTNER_STARTER_ANNUAL_PRODUCT_ID, et la même paire pourGROWTHetSCALE. Chacun doit être un produit distinct. - Gardez
POLAR_ACCESS_TOKEN,POLAR_ORGANIZATION_IDetPOLAR_WEBHOOK_SECRETdéfinis, car vos propres forfaits les utilisent. - Ajoutez les compteurs et les prix à l’usage qui facturent le dépassement de la réserve et les numéros de téléphone supplémentaires, comme l’explique le guide de facturation Polar.
- Redémarrez l’admin et le worker. Au démarrage, le worker enregistre si vous vendez des paliers.
Exploiter des partenaires sans paliers
Laissez les produitsPOLAR_PARTNER_* vides, et les partenaires ne vous paient rien par LobbyStack. Leurs consoles n’affichent pas de page Facturation, et rien ne limite les minutes, les clavardages ni les numéros de téléphone de leurs entreprises.
Pour limiter ce que les entreprises d’un partenaire partagent chaque mois, fixez sa réserve depuis une copie du dépôt, avec DATABASE_URL qui pointe vers votre base de données :
pnpm partner-pool:set figurent sous les variables des partenaires.
Lister les noms d’hôte des partenaires dans Turnstile
Si vous utilisez Cloudflare Turnstile à l’inscription, avecNEXT_PUBLIC_TURNSTILE_SITE_KEY et TURNSTILE_SECRET_KEY, son widget ne s’affiche que sur les noms d’hôte que vous lui listez. L’admin n’accepte aussi un jeton que s’il vient du nom d’hôte sur lequel le visiteur l’a résolu. Ajoutez ces noms d’hôte au widget dans Cloudflare :
PARTNER_BASE_DOMAIN, commepartners.example.com, qui couvre le sous-domaine de chaque partenaire- le propre domaine de chaque partenaire, une fois actif, si les gens doivent aussi pouvoir s’y inscrire
PARTNER_BASE_DOMAIN, les invitations s’ouvrent sur le propre domaine de chaque partenaire : listez donc chacun d’eux. Avec le forfait Free de Cloudflare, un widget accepte jusqu’à 10 noms d’hôte.
Vérifier la configuration
Faites un test avec votre propre partenaire avant d’en inviter d’autres :- Inscrivez-vous comme partenaire à
/partner/signup, et ouvrez votre sous-domaine depuis Image de marque et domaine. Vous devriez voir la page de connexion sous la marque du partenaire. - Créez une entreprise, et vérifiez que l’invitation du propriétaire arrive au nom du partenaire.
- Connectez un sous-domaine d’un domaine que vous contrôlez, ajoutez ses deux enregistrements DNS et attendez Actif.
- Avec Stripe Connect, connectez un compte Stripe de test, créez une formule et payez-la depuis l’invitation d’une entreprise.
- Avec les paliers, achetez-en un sur la page Facturation et vérifiez que la réserve et les numéros de téléphone suivent ce palier.