¿Qué vamos a aprender en esta guía?
En esta guía aprenderemos cómo instalar un servidor web en Ubuntu Server 18.04 con Apache. Esta guía quizás os recuerde a otra que ya publiqué. Sin embargo, mientras que en la anterior sólo configuramos la máquina con LAMPP para probar programas PHP, en esta ocasión instalaremos Apache y profundizaremos sobre varios detalles técnicos.
Además, mediante esta guía prepararemos y obtendremos una base sobre la que podremos instalar otro tipo de programas, como los famosos gestores de contenido o CMS. De hecho, trabajaremos con esta base en múltiples guías posteriores a ésta, así que resulta fundamental seguirla y comprenderla correctamente.
Como comenté en la guía anteriormente mencionada, esto resulta un recurso fantástico para aquellas personas que decidan montar su propio portal, por ejemplo, para promocionar su proyecto, con un equipo doméstico o alguno en la red, pues prepara la base para ello.
Requisitos
Nos conectamos a la consola de Ubuntu Server. Para ello, usamos ifconfig para comprobar qué IP nos ha asignado el sistema. Nos iremos al equipo anfitrión y nos conectaremos por SSH. Para ello, abrimos la terminal en el equipo anfitrión y escribimos:
Paso 2: Instalación de Apache
A continuación, vamos a actualizar los repositorios de Ubuntu. Si no sabes cómo hacerlo, debemos utilizar la siguiente linea de código en la terminal:
Paso 3: Instalación segura de MySQL 5.7
A continuación, necesitamos instalar MySQL 5.7. Para ello, nos ayudaremos de una guía externa. No obstante, siguiendo los pasos que se citan a continuación, la instalación se realizará sin problemas.
En primer lugar actualizamos los repositorios de Ubuntu y después instalamos mysql-server:
Después nos pedirá la contraseña del usuario root. Si queremos hacer un servidor de prueba, basta con poner "root". Sin embargo, se recomienda poner una contraseña más extendida por motivos de seguridad.
En la siguiente opción nos preguntará si queremos eliminar a los usuarios anónimos. Si esto se trata de un servidor de prueba, le damos a intro, en caso negativo, escribimos "Y" y pulsamos intro.
Ahora nos llegará una opción que nos pregunta si queremos impedir conexión de superusuario en remoto. La elección queda a gusto del consumidor, en este caso le diremos que no, así que pulsamos intro.
Luego nos preguntará si queremos eliminar el acceso remoto a la base de datos. Si pretendemos hacer un servidor con altas medidas de seguridad, debemos escribir "Y" y pulsar intro. Si por el contrario no lo estimamos necesario, entonces pulsamos intro.
Finalmente, el asistente nos preguntará si queremos recargar las tablas de privilegio, pulsamos "Y" e intro.
Después de seguir estos pasos, MySQL 5.7. estará listo para utilizar. Recuerda, para ver la consola de MySQL ponemos:
Ahora vamos a instalar PHP, unas librerías de PHP para Apache y otras para MySQL. Para ello escribimos:
Una vez que hemos instalado PHP, ahora es aconsejable crear un programa sencillo que nos permita mostrar información detallada acerca del servidor y de la versión instalada de PHP. Además, este programa nos permitirá comprobar el correcto funcionamiento de los módulos de PHP. Por ello, vamos a crear un archivo llamado "info.php", escribimos:
Ahora vamos a instalar un gestor de base de datos llamado PHPMyAdmin. En la terminal escribimos lo siguiente:
Este asistente nos preguntará sobre qué servidor web estamos instalando. En este caso, elegimos apache2 (pulsamos en barra espaciadora y luego en tabulador). Una vez vaya instalando, aparecerá otra pantalla que nos hará otra pregunta, elegimos "No".
Paso 7: Cómo cambiar la contraseña del root de MySQL
Una vez instalado todo lo necesario, hay un detalle adicional que debemos resolver. Vamos a comprobar los detalles de la cuenta root, para ello ponemos lo siguiente:
Por defecto, debido a temas de seguridad, la instalación de MySQL vincula el inicio de sesión del usuario root con la terminal de Ubuntu de la máquina servidor. En principio, esta medida de seguridad es recomendable, especialmente si realizamos la gestión mediante terminal y usamos otros usuarios para el entorno gráfico. Sin embargo, esto nos impide conectarnos desde la red, en cualquier equipo y puede resultar molesto para el usuario medio, sobre todo si tratamos de conectarnos al panel de PHPMyAdmin o a la base de datos de MySQL.
Por ese motivo, vamos a habilitar el inicio de sesión por contraseña para el usuario root. Para ello utilizaremos dos sentencias de MySQL:
Paso 8: Conexión al panel de PHPMyAdmin
Finalmente, nos iremos al navegador web y escribiremos la dirección IP del servidor seguida de phpmyadmin, el resultado debe ser similar a este (cambiando las X por los números de la IP):
Anexo A: Consideraciones técnicas
Apagado de la máquina virtual del servidor
Nunca debemos apagar la máquina virtual del servidor con la cruceta, ni con la opción de apagar, porque entonces se cerrarán los servicios de forma desordenada y es posible que no todos estén disponibles la próxima vez que iniciemos la máquina. Para apagar la máquina virtual del servidor tenemos que irnos a Virtualbox, hacemos click derecho en la máquina virtual y le damos a "Cerrar > Apagado ACPI". Con esta opción le mandaremos una señal a la máquina virtual para que se cierren los servicios de forma correcta y que después se apague.
Tiempos de espera
Las máquinas virtuales demoran un tiempo durante los procesos de instalación, se recomienda mantener un periodo de espera hasta que se completen los procesos de configuración e instalación.
Vigencia de repositorios
Antes de llevar a cabo un proceso de instalación se debe actualizar los repositorios previamente.
Anexo B: Comprobación de puertos
Este paso es opcional, aunque aconsejable para los usuarios de Ubuntu 18.04. En esta nueva versión, el cortafuegos puede generar conflictos con Apache y otros programas, puesto que ocupa los puertos que necesita tanto ese como otros procesos. Por ello, tenemos que comprobar si el cortafuegos no nos causa problemas. Por lo general, existen dos protocolos, httpd (puerto 80) y el https (puerto 443), así que es recomendable comprobar ambos puertos.
Hay una lista extensa de servicios que pueden utilizar los puertos, para ver la lista completa utilizaremos la siguiente línea en la terminal:
En Apache hay dos directorios fundamentales, un directorio en el cual vamos a encontrar nuestra página web y otro donde están los ficheros de configuración de la página. Para acceder al directorio donde se ubica la web y ver sus archivos, incluido el index, escribimos esto en la terminal:
Anexo D: Gestión de módulos de Apache
Los módulos disponibles de Apache se localizan en la carpeta "mods-available", en la raíz del directorio de Apache. Cada archivo con extensión .conf se corresponderá con un módulo de Apache. Para acceder a ellos, utilizamos los siguientes códigos:
Anexo E: Información sobre módulos de PHP
Para ver una lista de los módulos de PHP escribimos:
Para aplicar los cambios es necesario reiniciar el server. Si queremos reiniciar Apache, ponemos:
Para habilitar un módulo usamos a2enmod. Por ejemplo, si en este caso queremos volver a habilitar el módulo de PHP, ponemos:
En esta guía aprenderemos cómo instalar un servidor web en Ubuntu Server 18.04 con Apache. Esta guía quizás os recuerde a otra que ya publiqué. Sin embargo, mientras que en la anterior sólo configuramos la máquina con LAMPP para probar programas PHP, en esta ocasión instalaremos Apache y profundizaremos sobre varios detalles técnicos.
Además, mediante esta guía prepararemos y obtendremos una base sobre la que podremos instalar otro tipo de programas, como los famosos gestores de contenido o CMS. De hecho, trabajaremos con esta base en múltiples guías posteriores a ésta, así que resulta fundamental seguirla y comprenderla correctamente.
Como comenté en la guía anteriormente mencionada, esto resulta un recurso fantástico para aquellas personas que decidan montar su propio portal, por ejemplo, para promocionar su proyecto, con un equipo doméstico o alguno en la red, pues prepara la base para ello.
Requisitos
- En esta guía, originalmente usamos una Máquina cliente con Ubuntu Desktop 18.04, pero debería funcionar también para las versiones más recientes.
- Igualmente, en esta guía usamos una máquina servidor con Ubuntu Server 18.04 como versión de referencia, pero también debería funcionar con versiones posteriores.
- Haber instalado el paquete openSSH en ambas máquinas.
- Si trabajamos con máquinas virtuales, VirtualBox o algún otro software de virtualización. Para esta guía se ha utilizado una máquina virtual con Ubuntu Server, instalada en VirtualBox y con la red configurada en "Adaptador puente", y una máquina anfitrión con Ubuntu Desktop 18.04. No obstante, si queremos practicar, también podemos utilizar dos máquinas virtuales para cada una. Eso sí, en una de ellas usaremos conexión "NAT".
- Se recomienda un conocimiento básico del uso de la terminal de Linux, así como de los editores de texto de la terminal.
Nos conectamos a la consola de Ubuntu Server. Para ello, usamos ifconfig para comprobar qué IP nos ha asignado el sistema. Nos iremos al equipo anfitrión y nos conectaremos por SSH. Para ello, abrimos la terminal en el equipo anfitrión y escribimos:
Aceptamos el fingerprint, introducimos la contraseña del usuario y ya nos habremos conectado por consola al servidor.ssh usuario@[la_ip_bajo_inet]
Paso 2: Instalación de Apache
A continuación, vamos a actualizar los repositorios de Ubuntu. Si no sabes cómo hacerlo, debemos utilizar la siguiente linea de código en la terminal:
Después instalamos Apache por consola:sudo apt-get update
Ahora comprobaremos si el servicio se ha instalado correctamente y está funcionando, para ello ponemos este código en la terminal:sudo apt-get install apache2
Si sale en "running" entonces significa que está bien instalado. Finalmente, nos conectaremos desde el navegador. Para ello, colocaremos la IP de la máquina servidor. Si todo va bien, nos aparecerá una página de bienvenida de Apache.sudo service apache2 status
Paso 3: Instalación segura de MySQL 5.7
A continuación, necesitamos instalar MySQL 5.7. Para ello, nos ayudaremos de una guía externa. No obstante, siguiendo los pasos que se citan a continuación, la instalación se realizará sin problemas.
En primer lugar actualizamos los repositorios de Ubuntu y después instalamos mysql-server:
Normalmente la instalación tarda un rato, pero no te asustes. Una vez listo, vamos a instalar MySQL de forma segura, para ello, escribimos esta línea en la terminal:sudo apt-get update
sudo apt-get install mysql-server
A continuación, aparecerá un asistente en la terminal que nos hará una serie de preguntas. Para empezar, nos preguntará si tenemos que poner una contraseña de plugin. Si queremos hacer un servidor de prueba, pulsamos intro, pero si no, escribimos "Y" y pulsamos intro.sudo mysql_secure_installation
Después nos pedirá la contraseña del usuario root. Si queremos hacer un servidor de prueba, basta con poner "root". Sin embargo, se recomienda poner una contraseña más extendida por motivos de seguridad.
En la siguiente opción nos preguntará si queremos eliminar a los usuarios anónimos. Si esto se trata de un servidor de prueba, le damos a intro, en caso negativo, escribimos "Y" y pulsamos intro.
Ahora nos llegará una opción que nos pregunta si queremos impedir conexión de superusuario en remoto. La elección queda a gusto del consumidor, en este caso le diremos que no, así que pulsamos intro.
Luego nos preguntará si queremos eliminar el acceso remoto a la base de datos. Si pretendemos hacer un servidor con altas medidas de seguridad, debemos escribir "Y" y pulsar intro. Si por el contrario no lo estimamos necesario, entonces pulsamos intro.
Finalmente, el asistente nos preguntará si queremos recargar las tablas de privilegio, pulsamos "Y" e intro.
Después de seguir estos pasos, MySQL 5.7. estará listo para utilizar. Recuerda, para ver la consola de MySQL ponemos:
Paso 4: Instalación de PHPsudo mysql
Ahora vamos a instalar PHP, unas librerías de PHP para Apache y otras para MySQL. Para ello escribimos:
Paso 5: Creación de un archivo infosudo apt-get install php libapache2-mod-php php-mysql
Una vez que hemos instalado PHP, ahora es aconsejable crear un programa sencillo que nos permita mostrar información detallada acerca del servidor y de la versión instalada de PHP. Además, este programa nos permitirá comprobar el correcto funcionamiento de los módulos de PHP. Por ello, vamos a crear un archivo llamado "info.php", escribimos:
Dentro del archivo ponemos esto:sudo nano /var/www/html/info.php
Lo guardamos y lo probamos en el navegador. Recordemos, para probarlo, debemos poner la dirección IP del servidor en un navegador web, seguido del nombre del archivo y la extensión .php:<?php
phpinfo ();
?>
Paso 6: Instalación de PHPMyAdmin
Ahora vamos a instalar un gestor de base de datos llamado PHPMyAdmin. En la terminal escribimos lo siguiente:
Tras eso y confirmar, empezarán a aparecer letras en la terminal hasta que lleguemos a esta pantalla:sudo apt-get install phpmyadmin
Este asistente nos preguntará sobre qué servidor web estamos instalando. En este caso, elegimos apache2 (pulsamos en barra espaciadora y luego en tabulador). Una vez vaya instalando, aparecerá otra pantalla que nos hará otra pregunta, elegimos "No".
Paso 7: Cómo cambiar la contraseña del root de MySQL
Una vez instalado todo lo necesario, hay un detalle adicional que debemos resolver. Vamos a comprobar los detalles de la cuenta root, para ello ponemos lo siguiente:
Una vez conectados, escribiremos la siguiente sentencia SQL:sudo mysql
Nos aparecerá que el método de inicio de sesión del usuario root es "auth_socket", lo que quiere decir que el usuario root requiere que nos conectemos desde la terminal de Ubuntu para iniciar sesión, así que no podremos hacerlo con el login normal por contraseña de MySQL.SELECT user,authentication_string,plugin,host FROM mysql.user;
Por defecto, debido a temas de seguridad, la instalación de MySQL vincula el inicio de sesión del usuario root con la terminal de Ubuntu de la máquina servidor. En principio, esta medida de seguridad es recomendable, especialmente si realizamos la gestión mediante terminal y usamos otros usuarios para el entorno gráfico. Sin embargo, esto nos impide conectarnos desde la red, en cualquier equipo y puede resultar molesto para el usuario medio, sobre todo si tratamos de conectarnos al panel de PHPMyAdmin o a la base de datos de MySQL.
Por ese motivo, vamos a habilitar el inicio de sesión por contraseña para el usuario root. Para ello utilizaremos dos sentencias de MySQL:
Y luego:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
Si ahora volvemos a comprobar, entonces veremos que ya está habilitado el acceso con contraseña.FLUSH PRIVILEGES;
Paso 8: Conexión al panel de PHPMyAdmin
Finalmente, nos iremos al navegador web y escribiremos la dirección IP del servidor seguida de phpmyadmin, el resultado debe ser similar a este (cambiando las X por los números de la IP):
Se nos abrirá una pantalla de inicio de sesión, simplemente introduciremos el nombre del usuario (root) y su contraseña. Una vez hecho eso, estaremos conectados al panel de PHPMyAdmin.
Anexo A: Consideraciones técnicas
Apagado de la máquina virtual del servidor
Nunca debemos apagar la máquina virtual del servidor con la cruceta, ni con la opción de apagar, porque entonces se cerrarán los servicios de forma desordenada y es posible que no todos estén disponibles la próxima vez que iniciemos la máquina. Para apagar la máquina virtual del servidor tenemos que irnos a Virtualbox, hacemos click derecho en la máquina virtual y le damos a "Cerrar > Apagado ACPI". Con esta opción le mandaremos una señal a la máquina virtual para que se cierren los servicios de forma correcta y que después se apague.
Tiempos de espera
Las máquinas virtuales demoran un tiempo durante los procesos de instalación, se recomienda mantener un periodo de espera hasta que se completen los procesos de configuración e instalación.
Vigencia de repositorios
Antes de llevar a cabo un proceso de instalación se debe actualizar los repositorios previamente.
Anexo B: Comprobación de puertos
Este paso es opcional, aunque aconsejable para los usuarios de Ubuntu 18.04. En esta nueva versión, el cortafuegos puede generar conflictos con Apache y otros programas, puesto que ocupa los puertos que necesita tanto ese como otros procesos. Por ello, tenemos que comprobar si el cortafuegos no nos causa problemas. Por lo general, existen dos protocolos, httpd (puerto 80) y el https (puerto 443), así que es recomendable comprobar ambos puertos.
Hay una lista extensa de servicios que pueden utilizar los puertos, para ver la lista completa utilizaremos la siguiente línea en la terminal:
En nuestro caso, nos interesa saber el perfil y los puertos ocupados por Apache, así que escribimos esto:sudo ufw app list
Anexo C: Acerca de Apache y sus directoriossudo ufw app info "Apache Full"
En Apache hay dos directorios fundamentales, un directorio en el cual vamos a encontrar nuestra página web y otro donde están los ficheros de configuración de la página. Para acceder al directorio donde se ubica la web y ver sus archivos, incluido el index, escribimos esto en la terminal:
Para acceder a la carpeta de configuración de Apache, utilizaremos la siguiente línea de código:cd /var/www/html/
ls
Dentro de esta carpeta hay un archivo importante, es el que contiene el script para la escucha o no de los puertos:cd /etc/apache2
Aprenderemos a gestionar la carpeta de configuración de Apache en otro artículo, así que no veremos más detalles por el momento.nano ports.conf
Anexo D: Gestión de módulos de Apache
Los módulos disponibles de Apache se localizan en la carpeta "mods-available", en la raíz del directorio de Apache. Cada archivo con extensión .conf se corresponderá con un módulo de Apache. Para acceder a ellos, utilizamos los siguientes códigos:
Para ver los módulos activos, escribimos:cd /etc/apache2/mods-available
ls
Dentro de esta carpeta, Apache contiene un archivo muy especial llamado "dir.conf". Este archivo contiene un listado de archivos que Apache cargará en caso de que no tengamos nada en el index. Si queremos verlo más de cerca, escribimos:cd mods-enabled
ls
Para habilitar módulos a nivel de Apache:nano dir.conf
Retiramos las comillas de los módulos que nos interesen y guardamos.sudo nano /etc/php/7.2/apache2/php.ini
Anexo E: Información sobre módulos de PHP
Para ver una lista de los módulos de PHP escribimos:
Para ver una explicación de lo que hace un módulo, por ejemplo php-cli, usamos:apt-cache search php- | less
Anexo F: Mantenimiento de Apacheapt-cache show php-cli
Para aplicar los cambios es necesario reiniciar el server. Si queremos reiniciar Apache, ponemos:
Para parar el servicio de Apache escribimos:sudo service apache2 restart
Para iniciar el servicio de Apache ponemos:sudo service apache2 stop
Para ver el estado del servicio escribimos:sudo service apache2 start
Desde Apache podemos habilitar y deshabilitar módulos. Para ello, nos dirigimos a la siguiente ruta:sudo service apache2 status
El comando para deshabilitar módulos se llama "a2dismod". Por ejemplo, si queremos deshabilitar el módulo de PHP, escribimos:cd /etc/apache2/mods-enabled
Después de esto, será necesario reiniciar el servicio de Apache. Una vez lo reiniciemos, si intentamos abrir un programa PHP alojado en el servidor, veremos que ya no nos carga (esto se debe a que hemos deshabilitado el módulo de PHP, si estuviera activado, dicho módulo le pasaría a Apache datos en HTML, y este último transferiría dichos datos en HTML al navegador, pero como el módulo PHP no funciona, entonces sólo devuelve el código en forma de texto plano).sudo a2dismod php7.2
Para habilitar un módulo usamos a2enmod. Por ejemplo, si en este caso queremos volver a habilitar el módulo de PHP, ponemos:
Tras eso, reiniciamos nuevamente y volverá a estar operativo.sudo a2enmod php7.2