Tengo una máquina virtual de ubunto que ejecuta una pila de lámparas y, por ahora, un nombre de dominio que redirige a la dirección IP de la máquina virtual. En cuanto al concepto, el principio principal es que quiero que los usuarios registren una cuenta y obtengan un "sitio web" en un subdominio de mi propio dominio. Esa parte es fácil con subdominios comodín en apache vhosts, etc. y con certbot logré tener automáticamente todos los subdominios protegidos bajo ssl.
Ahora, si un cliente quiere comprar su propio nombre de dominio, conmigo o con algún otro registrador, debe apuntar un registro A a mi dirección IP y un CNAME de www al nombre de dominio. Y, al final, necesito agregar un archivo vhost en la carpeta de sitios disponibles configurando el archivo de host virtual para ese nuevo nombre de dominio y reiniciando apache "con gracia".
Aquí radica el problema. ¿Cómo puedo manipular los archivos apache vhosts, etc. para poder lograr esto con solo presionar un botón en mi sitio web principal? Estoy usando PHP en mi backend y hacerlo en php (shell exec, etc.) parece un riesgo de seguridad.
Estoy ejecutando GCP, por lo que cualquiera de los servicios de GCP está disponible.
Gracias por adelantado.
Si le preocupa un script de shell en su servidor, puede ejecutar una aplicación usando SSH desde una máquina diferente; Puede ser una pequeña instancia en la que una aplicación puede ser algo así como una masilla que está disponible solo en Windows. Debería encontrar algo relevante para Linux ya que hay muchas alternativas disponibles. Utilice la aplicación de cliente SSH y el lenguaje Python para automatizarlo.
Como el proceso manual implica ejecutar el mismo comando varias veces, puede crear archivos de host virtual y ver si los archivos se crean en el directorio de sitios disponibles, etc.
Una vez que los nuevos usuarios se registran en su servicio, debe crear archivos de host virtual y ejecutar comandos chown y ver si los archivos se crean en los sitios desde el directorio y reiniciar su apache. Puede consultar los pasos en Automatización de la configuración del host virtual en su servidor .
Respondiendo a mi propia pregunta:
Habilitado mod_macros en apache;
sudo a2enmod macroSe agregó una macro para crear un host virtual http :80 y otra para crear un host virtual https :443 con las variables necesarias;
<Macro ProtectedVHost $domain> <VirtualHost *:80> ServerAdmin admin@email.com ServerName $domain ServerAlias www.$domain DocumentRoot /var/www/customer_sites/$domain/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined RewriteEngine on RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] </VirtualHost> <IfModule mod_ssl.c> <VirtualHost *:443> ServerName $domain ServerAlias www.$domain ServerAdmin admin@email.com DocumentRoot /var/www/customer_sites/$domain/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/letsencrypt/live/$domain/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/$domain/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> </IfModule> </Macro>Creé un archivo conf de mi carpeta public_html en mis principales sitios web editable en php donde agrego registros usando mi propia macro a medida que el usuario agrega en su dominio:
Use {Macro Name} {Domain Name}Importa ese archivo a apache.conf
Finalmente, creé un CRON que se inicia muy a menudo y lee ese archivo y lo compara con una versión guardada. Si los archivos han cambiado, reiniciará correctamente Apache, que leerá y volverá a crear los hosts virtuales necesarios.
Espero que esto ayude a cualquiera que busque hacer lo mismo.