Estoy creando una aplicación SaaS en Flask Python, ¿alguien conoce la mejor manera de permitir que los clientes agreguen un dominio personalizado?

Esto es bastante simple de hacer.

Si desea crear un subdominio personalizado para cada usuario (por ejemplo: http://someuser.example.com donde el ejemplo es su URL), simplemente use planos (integrados en el matraz) establezca el argumento del subdominio en la construcción del plano a `subdominio =” ”ahora esto pasará un argumento llamado nombre de usuario que contiene el subdominio a sus funciones que usan este plano. También debe definir el nombre del servidor en la configuración de su aplicación.

Si desea un dominio completamente personalizado para cada usuario (por ejemplo, someuser.com), realmente me gustaría disuadirlo de hacerlo. Esto es mucho más difícil y necesita configurar SSL para cada cliente. (Sugiero encarecidamente que cada sitio web tenga un certificado SSL, y si tiene un inicio de sesión o transfiere datos a su servidor, absolutamente necesita SSL). Esto es costoso porque necesita convertirse en una Autoridad de certificación (CA), que tiene un montón de restricciones y es costoso, o convertirse en un revendedor para una CA que es costosa y podría llegar a ser realmente costosa para sus clientes. Para el método de subdominio anterior, solo puede obtener un certificado comodín. Además de esto, debe escribir el código para obtener su cliente de la URL antes de cada solicitud que podría ser desordenada. Pero si aún desea configurar esto, el camino es el siguiente. Todo lo que realmente necesita hacer es configurar su infraestructura y asignarle un nombre de dominio. Luego, debe configurar un CNAME en sus clientes para que apunte a su infraestructura. Después de que esto se active (a veces, esto puede tomar hasta 48 horas), si van a su nombre de dominio, verán su aplicación. La parte más importante es escribir código que se ejecuta antes de cada solicitud (use @ app.before_request) y obtiene el nombre de host y carga los datos en función de la URL.

Recomiendo el método de subdominio. Es más fácil y seguro que el segundo método.