Estoy escribiendo un script para poder crear subdominios de forma automática así como un pequeño espacio web.
No tengo muy claro si va a Avanzado...
La idea es la siguiente: un usuario del sitio, con solo rellenar un formulario con el nombre del subdominio deseado y su e-mail tenga listo en un momento su subdomino.
De Perl se lo justo y de momento tengo esto:
Using perl Syntax Highlighting
- #!/usr/bin/perl
- use strict;
- use File::Copy;
- #perl genera_dominio.pl NOMBRE_SUBDOMINIO E-MAIL
- my $nom_dom = $ARGV[0]; #p.e. nom que el usuario quiere para subdominio
- my $sites_apache = "/etc/apache2/sites-available"; la
- my $ruta = "$sites_apache/$nom_dom";
- my $mail = $ARGV[1]; #recogemos el e-mail del usuario
- my $dominio = "www.$nom_dom.dominio.com";
- my $ubicacion = "/var/www/$nom_dom";
- my $log_error = "/var/log/apache2/error_$nom_dom.log";
- my $log_custom = "/var/log/apache2/access_$nom_dom.log";
- #Creamos el nuevo fichero de configuración
- #Comprobamos que no exista ya
- if (-e "$sites_apache/$nom_dom") {
- print "El nombre de subdominio $nom_dom ja existe ! \n";
- }
- else {
- #Tenemos una plantilla con los valores clave a cambiar
- copy("$sites_apache/plantilla", "$sites_apache/$nom_dom") or die "No se pudo copiar el fichero: $!";
- #Colocar valor de escape delante de '@' para que funcione bien
- #valor a sustituir =~ s/patrón de búsqueda/patrón de sustitución/opciones
- my $mail_arroba = "$mail";
- $mail_arroba =~ s/@/\\@/;
- #Buscamos los valores a sustituir en el fichero /etc/apache2/sites-available/$nom_dom
- system("perl -p -i -e 's/EMAIL/$mail_arroba/g;' $ruta");
- system("perl -p -i -e 's/DOMINIO/$dominio/g;' $ruta");
- system("perl -p -i -e 's {UBICACION} {$ubicacion}g;' $ruta");
- system("perl -p -i -e 's {LOG_ERROR} {$log_error}g;' $ruta");
- system("perl -p -i -e 's {LOG_CUSTOM} {$log_custom}g;' $ruta");
- #Añadimos el subdominio en /etc/hosts para simular DNS a nivel local
- system("perl -p -i -e 's/#AÑADIR_DOM_AQUI/$dominio #AÑADIR_DOM_AQUI/;' /etc/hosts");
- #Activamos (enable) el nuevo Vhost
- system("cd $sites_apache");
- system("sudo a2ensite $nom_dom");
- #Creamos el directorio para el nuevo site
- mkdir "/var/www/$nom_dom", 0755 or warn"No se pudo crear el directorio: $!";
- #Creamos un index.html para que se muestre algo hasta que el usuario ponga su contenido
- open(fd,">/var/www/$nom_dom/index.html") or die "No se pudo crear el fichero index.html\n";
- print fd "<title>$dominio</title> <html>Espacio web $nom_dom</html>";
- close(fd);
- #Reiniciamos apache para que los cambios tengan efecto
- system("sudo /etc/init.d/apache2 reload");
- #Para las pruebas
- print "\n-------------------\nSe creó el dominio $dominio con exito! \n";
- print "Correo electronico: $mail \n";
- print "El log de errores : $log_error \n";
- print "El log de accesos : $log_custom \n-------------------\n";
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
Como podéis ver utilizo la técnica de buscar patrones en una plantilla prediseñada para poner los datos adecuados para cada usuario. No sé si hay alguna forma más elegante o eficaz pero no se me ha ocurrido...
¿Es una buena opción hacerlo en Perl?
Me gustaría que me dierais vuestra opinión y cosas a mejorar/cambiar, etc... o directamente si es una barbaridad XD