La idea es poder montar 2 sitios web estáticos en el mismo servidor web, y luego agregarle otro sitio más correspondiente a un sitio web dinámico como lo es la herramienta PHPMyAdmin (para gestionar nuestras bases de datos MySQL, de paso probando nuestra instalación de PHP). Utilizaremos para esta guía, la última versión de Ubuntu Server LTS que es la 18.04.
Primero que nada debemos definir que es un servidor LAMP, estamos ante un servidor Linux, que presta servicios web con Apache, que a su vez funciona como servidor de base de datos con el motor MySQL, y que para finalizar, maneja PHP. De ahí es que viene el acrónimo LAMP:
- Linux
- Apache
- MySQL
- PHP
Este grupo de software libre nos permite montar sobre el servidor un sitio web dinámico o una aplicación web, si eres estudiante de infraestructura esta guía te puede sacar de un apuro, y si eres programador te puede servir para montar tu entorno de pruebas, para tu proyecto PHP/MySQL.
Pasos a seguir
- Requisitos previos
- Instalar Ubuntu Server 18.04
- Instalar un servicio web Apache
- Instalar MySQL y PHP
- Instalar PHPMyAdmin
- Glosario de rutas y ficheros manejados
Requisitos Previos
Como requisitos previos para poder seguir esta guía sin problemas debemos comprender los siguientes puntos:
- Manejo de permisos en directorios y ficheros en Linux (aquí el POST)
- Como implementar un servidor DNS local en Linux (aquí el POST)
De todas formas, se los voy a recordar a lo largo de la guía cuando sea necesario.
Instalar Ubuntu Server 18.04
El primer paso es instalar en nuestro servidor una distribución de Linux (orientada a servidores), en mi caso escogí un Ubuntu Server 18.04 que es la última versión LTS disponible.
Aclaro que si ya has instalado sistemas operativos para servidores, puedes saltarte este primer paso, que es más que nada para quienes arrancan de 0.
Al bootear nuestro server con la iso de Ubuntu, comenzará el proceso de instalación solicitándonos el lenguaje a utilizar:

Luego debemos escoger la distribución de nuestro teclado, el propio instalador tiene una utilidad para detectarla si no sabemos con exactitud cuál es:

Simplemente se nos pide ingresar una serie de teclas para ir descartando cual es nuestra distribución del teclado:

En la siguiente opción simplemente escogemos Instalar Ubuntu (las otras opciones son para instalaciones más complejas).

Ahora llega el momento de configurar nuestra interfaz de red, en la cual de preferencia sería conveniente poner una ip estática, en este artículo explico que es DHCP con claridad.

Vamos al adaptador, y seleccionamos Edit IpV4:

Luego en IPV4 Method escogemos Manual…

Luego se nos presentará una ventana para rellenar los parámetros de red de nuestro adaptador de red:

Subnet = IP de Red, seguida de nuestra máscara de subred
Address = IP que tendrá el servidor, preferentemente debería estar fuera del rango DHCP para evitar que se solapen las IP.
Gateway = Puerta de enlace, que normalmente es la IP de nuestro Router.
Name Servers = Estos serán los DNS de nuestro servidor, por defecto puse el Gateway y como secundario el de Google.
Con esto estamos listos para continuar:

Si se utiliza un servidor proxy en tu red, a continuación debes ingresarlo, sino puedes dejarlo vacío:

A continuación se nos solicita la url que utilizará el sistema para ir a buscar actualizaciones, dejaremos la que está por defecto.

Utilizaremos el disco completo para esta instalación, aunque tenemos la posibilidad de particionarlo:

Damos “Hecho” una vez más y nos aparecerá una pantalla de configuración de nuestro usuario:

Luego de esto nos aparece una pantalla en la cual con “espacio” podemos seleccionar ciertos paquetes de software que son interesantes, pero que en esta oportunidad no vamos a tratar, así que para continuar con esta instalación, lo obviamos:

Para finalizar reiniciamos el equipo:

Cuando se nos solicite, removemos el medio de instalación y presionamos ENTER.
Instalar un servicio web Apache
Para poder ofrecer un servicio web, necesitamos instalar Apache, el paquete a instalar con nuestro gestor de paquetes es apache2.
Generalmente en una instalación recién hecha no tenemos inconvenientes con el firewall, pero por las dudas aquí te dejo un post sobre iptables para gestionarlo en caso de problemas de conectividad.
Al instalar apache, en la IP local de nuestro servidor podremos acceder a la página de prueba:

Por defecto nuestro apache está habilitado para que inicie al arrancar el sistema, con los siguientes comandos se puede habilitar/deshabilitar:
systemctl enable apache2
systemctl disable apache2
Al hacer uno de estos dos últimos cambios, estos se ven reflejados en el próximo reinicio de nuestro servidor.
Para iniciar o frenar el servicio usamos los siguientes comandos:
systemctl start apache2
systemctl stop apache2
systemctl restart apache2
Como gestionar nuestros sitios en apache (sitios virtuales)
Al instalar inicialmente nuestro servidor apache, tenemos configurado únicamente un sitio, con sus archivos en la ruta (como raíz) /var/www/html , si vamos ahí veremos el index.html del sitio de prueba de apache.
Si queremos montar únicamente un sitio web, borramos el /var/www/html, e incluimos todos los archivos de nuestra web (además debemos configurar el virtualhost, que más adelante vemos como).
En caso contrario, nosotros podemos crear varias carpetas dentro de www, que funcionen como sitios independientes, de esta forma:
mkdir -p /var/www/filenotfound/html
mkdir -p /var/www/bentancorinstalaciones/html
Agregamos el escape –p, que nos permite crear todos los directorios hasta llegar al final (es decir, creamos filenotfound y html dentro de el en un solo comando).
Luego corresponde darle los permisos, y setearle el propietario correspondiente a esos ficheros (en este post podemos ver resumidamente cómo manejar permisos en Linux).
Una vez terminada la creación de directorios, procedemos a incluir dentro todos nuestros archivos, en mi caso colocaré 2 index.html en cada sitio, que serán suficientes para esta parte de la guía.
En la ruta /etc/apache2/sites-available tenemos la configuración respectiva a cada virtual host (sitio web), que tengamos prestando servicio.
Debe haber un archivo de virtual host por sitio web dentro de ese directorio, la sintaxis básica para implementar uno debe corresponderse con la siguiente:
<VirtualHost *:80>
ServerAdmin admin@filenotfound.edu.uy
ServerName filenotfound.edu.uy
ServerAlias www.filenotfound.edu.uy
DocumentRoot /var/www/filenotfound/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Importante es destacar, que sería conveniente configurar un servicio DNS, como pueden ver en este POST, en esa guía pueden ver como configurar un dominio, en este caso precisarían configurar 2 dominios en el named.conf.local (y luego sus respectivos archivos db, en los cuales colocaremos 2 dominios apuntando a la misma IP local), los dominios a configurar según esta guía serían filenotfound.edu.uy y bentancorinstalaciones.com, cada uno de estos identificará a cada sitio web.
ServerAdmin: Es la dirección de correo electrónico del admin, accesible por el dominio configurado
ServerName: Define el nombre de dominio de nuestro sitio (que debe estar configurado con el servicio DNS).
ServerAlias: Define direcciones adicionales por las cuales la web pueda ser accedida.
DocumentRoot: Es el directorio en el cual se almacenan todos los ficheros del sitio.
ErrorLog y CustomLog: Son las rutas donde se almacenan los logs que registran la actividad del servicio web, el que principalmente puede interesarnos es ErrorLog que registra los errores.
Ahora debemos crear los virtualhosts en la ruta que nombré anteriormente (/etc/apache2/sites-available), con los nombres filenotfound.edu.uy.conf y bentancorinstalaciones.com.conf.
La configuración del otro sitio quedaría bajo estos parámetros:
<VirtualHost *:80>
ServerAdmin admin@bentancorinstalaciones.com
ServerName bentancorinstalaciones.com
ServerAlias www.bentancorinstalaciones.com
DocumentRoot /var/www/bentancorinstalaciones/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Una vez creados los sitios, procederemos a habilitarlos, y a deshabilitar el virtualhost por default que es 000-default.conf.
Para esto debemos ejecutar los siguientes comandos:
a2dissite 000-default.conf
a2ensite bentancorinstalaciones.com.conf
a2ensite filenotfound.edu.uy
Una vez hecho esto procederemos a reiniciar los servicios apache2 y bind
systemctl restart apache2
systemctl restart bind9
Una vez listo el servidor con todas sus configuraciones, podemos dirigirnos a otro pc (que funcionará de cliente) en la misma red local, le configuramos como DNS primario la ip del server Ubuntu (192.168.0.201), y ya podemos probar el servicio Web.
A continuación dejo unas capturas de los sitios de prueba:


Con esto finalizamos el capítulo correspondiente a configuración de servicio web apache.
Instalar MySQL y PHP
Para MySQL debemos instalar los paquetes mysql-server y mysql-client con nuestro gestor de paquetes.
Con solo hacer esto ya tenemos el servicio funcionando, podemos loguearnos como root y gestionar bases de datos.

Luego para tener PHP, instalaremos los paquetes (son algunos de los módulos, podemos necesitar otros dependiendo de la aplicación que queramos instalar).
php7.2 php7.2-mysql libapache2-mod-php7.2
En caso de que nuestro Ubuntu Server no tenga los repositorios de php, deberemos agregarlos de esta manera:
add-apt-repository ppa:ondrej/php
add-apt-repository universe
Instalar PHPMyAdmin
Para instalar PHPMyAdmin, primero crearemos un tercer directorio en /var/www , de la misma forma que con nuestros otros dos sitios, quedando esta estructura ahora:
/var/www/bentancorinstalaciones/html /var/www/filenotfound/html /var/www/phpmyadmin/html
Ahora descargaremos la herramienta (desde la página de la misma podemos buscar el link de descarga de la última versión y usarlo con el wget de nuestro server).
Página de PHPMyAdmin: https://www.phpmyadmin.net/downloads/
Entonces, estando posicionados en /var/www/phpmyadmin/html procedemos con el siguiente comando:
wget https://files.phpmyadmin.net/phpMyAdmin/4.9.5/phpMyAdmin-4.9.5-all-languages.zip
Ahora debemos descomprimir el fichero en el mismo lugar donde se descargó, como es un .zip, debemos instalar el paquete unzip para poder descomprimir, entonces luego:
unzip phpMyAdmin-4.9.5-all-languages.zip
TIP: Si necesitas escribir un nombre extenso como el de este archivo y quieres ahorrarte el trabajo, escribí una parte y presiona TAB, se autocompleta solo.
Si llegaste hasta acá tenes que saber que, hay que configurar un virtualhost extra apuntando al DocumentRoot /var/www/phpmyadmin/html/phpmyadmin, habilitar el sitio con a2ensite, configurar otro dominio local, que en mi caso fue phpmyadmin.com.uy y por ultimo reiniciar los servicios apache2 y bind9. Dado que ya se vio anteriormente en esta guía como se hacen esos puntos, dejé acotado esto de manera resumida.
Una vez hecho lo del párrafo anterior nos encontramos con que nuestro phpmyadmin está en funcionamiento:

Pero seguramente no nos deje loguearnos a nuestro servidor, porque no dimos permisos desde mysql, para eso debemos loguearnos como root en nuestra consola mysql (en el servidor):
mysql -u root -p
Ahora lo que vamos a hacer es, crear un usuario con todos los privilegios, como al phpmyadmin solo se puede acceder de forma local, nos es indiferente el tema permisos sobre mysql.
create user ‘admin’@’localhost’ identified by ‘1456’;
grant all privileges on *.* to ‘admin’@’localhost’;
flush privileges;
Hasta aquí llego esta guía, pudiendo tener online 2 sitios web estáticos + uno dinámico, que es la herramienta phpmyadmin, a continuación dejo un glosario de todas las rutas y ficheros manejados en esta guía.
Glosario de rutas y ficheros manejados
/var/www/html: Ruta por defecto para el sitio de prueba de apache
/var/www/filenotfound/html: Ruta que utilicé para el sitio de prueba File Not Found
/www/bentancorinstalaciones/html: Ruta que utilicé para el sitio de prueba Bentancor Instalaciones
/etc/apache2/sites-available: Directorio donde se configuran los virtualhost de apache, los mismos no se habilitarán a menos que utilices el comando a2ensite o los copies al directorio sites-enabled.
/etc/bind/named.conf.local: Fichero donde se configuran los archivos de zona de nuestro servidor DNS
/var/www/phpmyadmin/html: Ruta que utilicé para el sitio dinámico de prueba PHPMyAdmin