Instalar Apache

Cómo instalar Apache, MySQL y PHP (LAMP) en un Ubuntu 18.04

“LAMP” es el término con el que se denomina a un grupo de software de código libre que se instala normalmente en conjunto para alojar sitios web y aplicaciones web dinámicas en un servidor. Este término es un acrónimo que representa un sistema operativo Linux con un servidor Apache. Los datos del sitio web son almacenados en una base de datos MySQL y el contenido dinámico es procesado con PHP.

Antes de empezar

Antes de empezar con este tutorial, debes tener una cuenta de usuario que no sea la del usuario root, con privilegios de sudo ya configurados. Te recomiendo que le eches un ojo a este otro tutorial, donde aprenderás paso a paso cómo realizar la configuración inicial de un servidor Ubuntu 18.04.

Paso 1 - Instalar Apache y actualizar el firewall

Puedes instalar Apache fácilmente desde el gestor de paquetes de Ubuntu, apt:

sudo apt update
sudo apt install apache2

Añadir un ServerName para suprimir los errores de sintaxis

A continuación, hay que agregar una línea al archivo /etc/apache2/apache2.conf para suprimir un mensaje de advertencia. Si no se define ServerName globalmente, recibirás la siguiente advertencia cuando compruebes la configuración de Apache:

sudo apache2ctl configtest
Output
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message 
Syntax OK

Abre el archivo de configuración de Apache:

sudo nano /etc/apache2/apache2.conf

Dentro, en la parte inferior del archivo, agrega una directiva ServerName, apuntando al dominio principal del servidor. Si no tienes ningún nombre de domino asociado al servidor, puedes utilizar la dirección IP pública:

· · ·
ServerName <server-domain>

Guarda y cierra el archivo (ctrl-x, Y, ENTER).

Después, vuelve a revisar los errores de sintaxis:

sudo apache2ctl configtest
Output
Syntax OK

Reinicia Apache para implementar los cambios:

sudo systemctl restart apache2

Actualizar el firewall

Ahora debes asegurarte de que el firewall permite el tráfico HTTP y HTTPS.

Antes, tienes que ver si tienes un perfil de aplicación para Apache:

sudo ufw app list
Output
Available applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH

Si observas en detalle el perfil Apache Full, debería mostrar que habilita el tráfico a los puertos 80 y 443:

sudo ufw app info "Apache Full"
Output
Profile: Apache Full
Title: Web Server (HTTP,HTTPS)
Description: Apache v2 is the next generation of the omnipresent Apache web
server.

Ports:
  80,443/tcp

Ahora tienes que permitir el tráfico entrante para ese perfil:

sudo ufw allow in "Apache Full"

Para comprobar que todo ha salido según lo esperado, visita la dirección IP pública de tu servidor en un navegador web: http://<server-ip>.

Verás la página web predeterminada de Apache y Ubuntu 18.04, que está disponible para fines informativos y de prueba.

Si has podido ver esta página, entonces tu servidor web ya está correctamente instalado y accesible a través del firewall.

Paso 2 - Instalar MySQL

Ahora que ya tienes tu servidor web configurado y corriendo, es el momento de instalar MySQL, el sistema de gestión de bases de datos.

Una vez más, utiliza apt para instalar el software:

sudo apt install mysql-server

TIP

En este caso no es necesario que hagas sudo apt update porque ya lo hiciste recientemente al instalar Apache y los paquetes ya están al día.

Durante la instalación, el servidor te pedirá que selecciones una contraseña para el usuario root de MySQL.

Cuando la instalación se haya completado, ejecuta un script de seguridad que permite eliminar algunas configuraciones peligrosas y bloquear un poco el acceso al sistema de base de datos:

sudo mysql_secure_installation

Te pedirá que introduzcas la contraseña que estableciste para la cuenta root de MySQL, y si deseas configurar el VALIDATE PASSWORD PLUGIN (plugin de validación de contraseñas).

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

Acepta y selecciona un nivel 2 de validación de contraseña, para validar que las contraseñas utilizadas en MySQL contengan números, letras mayúsculas, minúsculas y caracteres especiales, y que no se basa en palabras del diccionario comunes.

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:

Ahora te preguntará si deseas cambiar la contraseña del usuario root. Si no quieres cambiarla, introduce una "n" para decir que no.

Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

Para el resto de preguntas, acepta introduciendo una "Y" y después pulsa “ENTER”. Esto eliminará algunos usuarios que vienen de ejemplo y la base de datos de prueba, desactivará las conexiones root remotas, y cargará estas nuevas reglas para que MySQL respete inmediatamente los cambios que has realizado.

En este punto, el sistema de base de datos ya está configurado y puedes seguir adelante.

Paso 3 - Instalar PHP

PHP es el componente de nuestra configuración que procesará código para poder mostrar contenido dinámico. Puede ejecutar secuencias de comandos, conectarse a tus bases de datos MySQL para obtener información, y entregar el contenido procesado a tu servidor web para mostrarlo.

Una vez más puedes aprovechar el sistema apt para instalar los componentes. Vamos a incluir algunos paquetes auxiliares para que el código PHP se pueda ejecutar en el servidor Apache y pueda hablar con la base de datos MySQL:

sudo apt install php libapache2-mod-php php-mysql

Con esto ya habrás instalado PHP.

Ahora, tienes que modificar la forma en que Apache sirve archivos cuando se solicita un directorio. Actualmente, si un usuario solicita un directorio del servidor, Apache buscará primero un archivo llamado index.html. Si vas a estar ejecutando código PHP, tienes que decirle a tu servidor web que elija los archivos PHP preferentemente, por lo que vas a hacer que Apache busque un archivo index.php primero:

sudo nano /etc/apache2/mods-enabled/dir.conf

Cambia el orden por el siguiente:

# /etc/apache2/mods-enabled/dir.conf

<IfModule mod_dir.c>
    DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

Guarda y cierra el archivo (ctrl-x, Y, ENTER).

Después de esto, reinicia el servidor web Apache para aplicar los cambios:

sudo systemctl restart apache2

También puedes comprobar el estado del servicio apache2 a través de systemctl:

sudo systemctl status apache2
Sample Output
● apache2.service - LSB: Apache2 web server
   Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: active (running) since Wed 2016-04-13 14:28:43 EDT; 45s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 13581 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
  Process: 13605 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS)
    Tasks: 6 (limit: 512)
   CGroup: /system.slice/apache2.service
           ├─13623 /usr/sbin/apache2 -k start
           ├─13626 /usr/sbin/apache2 -k start
           ├─13627 /usr/sbin/apache2 -k start
           ├─13628 /usr/sbin/apache2 -k start
           ├─13629 /usr/sbin/apache2 -k start
           └─13630 /usr/sbin/apache2 -k start

Apr 13 14:28:42 ubuntu-16-lamp systemd[1]: Stopped LSB: Apache2 web server.
Apr 13 14:28:42 ubuntu-16-lamp systemd[1]: Starting LSB: Apache2 web server...
Apr 13 14:28:42 ubuntu-16-lamp apache2[13605]:  * Starting Apache httpd web server apache2
Apr 13 14:28:42 ubuntu-16-lamp apache2[13605]: AH00558: apache2: Could not reliably determine the servers fully qualified domain name, using 127.0.1.1. Set the ServerName...
Apr 13 14:28:43 ubuntu-16-lamp apache2[13605]:  *
Apr 13 14:28:43 ubuntu-16-lamp systemd[1]: Started LSB: Apache2 web server.

Paso 4 - Probar el procesador PHP en el servidor web

Para probar que tu sistema se ha configurado correctamente para poder procesar código PHP, puedes crear un script PHP muy básico.

Crea un archivo llamado info.php en la raíz de Apache. En Ubuntu 18.04 este directorio se encuentra en /var/www/html/.

sudo nano /var/www/html/info.php
# /var/www/html/info.php

<?php
phpinfo();
?>

Guarda y cierra el archivo (ctrl-x, Y, ENTER).

Para probar esto, sólo tienes que visitar esta página en un navegador web: http://<server-ip>/info.php. Deberás ver algo como esto:

Por último, elimina este archivo ejecutando:

sudo rm /var/www/html/info.php

Siempre podrás volver a crear esta página si necesitas acceder a la información nuevamente.

Bibliografía


Cómo configurar virtual hosts de Apache en un Ubuntu 18.04

Apache estructura los sitios web en unidades separadas que pueden ser personalizadas y configuradas de manera independiente, conocidas como virtual hosts (ó alojamiento virtual en español).

Esto permite alojar múltiples dominios en una única IP, donde cada dominio configurado enviará al visitante a un directorio específico, en el que se encuentra la información del mismo.

Todo este proceso es totalmente transparente para el visitante, que a simple vista nunca sabrá que el servidor es también responsable de otros sitios.

En este tutorial vamos a ver cómo configurar los virtual host de Apache en un servidor con Ubuntu 18.04. Los pasos a seguir con versiones anteriores de Ubuntu son prácticamente idénticos.

Antes de empezar

Antes de empezar con este tutorial, te recomiendo que le eches un ojo a estos otros tutoriales, donde aprenderás paso a paso cómo realizar la configuración inicial de un servidor Ubuntu 18.04, y cómo instalar Apache en tu servidor.

Una vez completados dichos pasos, ya puedes empezar.

En este tutorial te voy a enseñar cómo crear un virtual host para el dominio example.com. Tú puedes utilizar tu propio dominio si lo tienes, y más tarde configurar el DNS. Si aún no tienes un dominio disponible para utilizar, puedes usar cualquier valor, ya que también te enseñaré cómo editar el archivo local /etc/hosts de tu ordenador para poder probar la configuración del servidor desde el mismo.

Paso 1 - Crear la estructura de directorios

El primer paso es crear una estructura de directorios que aloje los datos de cada uno de los dominios que quieras configurar.

El DocumentRoot (ó documento raíz) es el directorio más alto en el que Apache busca contenido para mostrar, y se encuentra en /var/www. Aquí es donde tienes que crear el directorio:

mkdir -p /var/www/example.com/html

Paso 2 - Dar permisos

Ahora ya tienes la estructura de directorios para tus archivos, pero son propiedad de tu usuario.

Lo más recomendable es que tu usuario regular sea el propietario, pero que el grupo esté a nombre del usuario www-data, que es el utilizado por el servidor web. Para ello haz lo siguiente:

chown -R $USER:www-data /var/www/example.com/html

La variable $USER tomará el valor del usuario con el cual estás autenticado actualmente.

Ahora, tu usuario será el propietario del directorio html y de sus respectivos sub-directorios (porque has utilizado la opción -R).

TIP

Cuando subas por primera vez el código al servidor, deberás modificar los permisos de los archivos y directorios de la siguiente manera:

find /var/www/<domain>/html -type f -exec chmod 664 {} \;
find /var/www/<domain>/html -type d -exec chmod 775 {} \;

Por último, hay que darle al servidor acceso de lectura y escritura a cualquier carpeta que el servidor vaya a necesitar modificar.

cd /var/www/<domain>/html
chgrp -R www-data <dir1> <dir2>
chmod -R ug+rwx <dir1> <dir2>

Por ejemplo, en Laravel, estas carpetas serían storage y bootstrap/cache.

Paso 3 - Crear una página de prueba para el virtual host

Crea un nuevo archivo index.html:

nano /var/www/example.com/html/index.html

En este archivo, añade el siguiente mensaje:

Hakuna Matata!

Guarda y cierra el archivo cuando termines.

Ya tienes la página que te ayudará a probar la configuración del virtual host.

Paso 4 - Crear un nuevo archivo para el virtual host

Los archivos virtual host son archivos que guardan la configuración de un virtual host y le indican al servidor cómo responder a las solicitudes de dominio.

Apache viene con un archivo virtual host por defecto llamado 000-default.conf. Cópialo para tener un archivo virtual host de tu nuevo dominio:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf

Edita el nuevo archivo con lo siguiente:

sudo nano /etc/apache2/sites-available/example.com.conf
# /etc/apache2/sites-available/example.com.conf

<VirtualHost *:80>
    ServerAdmin [email protected]

    ServerName example.com
	  ServerAlias www.example.com

    DocumentRoot /var/www/example.com/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Esta sección del virtual host va a atender cualquier solicitud que venga por el puerto 80, el puerto por defecto de HTTP.

La directiva ServerAdmin indica el correo electrónico del administrador del sito web.

La directiva ServerName establece el dominio base que debe coincidir para la definición de este virtual host, y ServerAlias define nombres alternativos por los cuales podrá ser encontrado como alternativa al dominio base. Esto es útil para definir dominios alternativos, como www.

La directiva DocumentRoot indica la ubicación del directorio raíz.

Paso 5 - Habilitar el nuevo archivo virtual host

Ahora que ya has creado el archivo virtual host, tienes que habilitarlo. Para ello, Apache incluye algunas herramientas que permiten hacer esto de manera sencilla.

sudo a2ensite example.com.conf

Deshabilita a su vez el archivo por defecto:

sudo a2dissite 000-default.conf

Por último, deberás reiniciar Apache para que los cambios sean efectivos:

sudo systemctl restart apache2

Paso 6 - Configurar un archivo hosts local (opcional)

Si aún no estás utilizando un dominio real para probar estas configuraciones y has utilizado un dominio cualquiera, entonces puedes modificar temporalmente el archivo hosts de tu ordenador para probar la funcionalidad.

Esto interceptará todas las solicitudes que vayan al dominio que deseas probar y las apuntará a tu servidor, como lo hace el sistema DNS con los dominios registrados. Esto funcionará solamente desde tú ordenador, y sólo es útil para probar la configuración.

sudo nano /etc/hosts

Lo que tienes que agregar es la dirección IP pública del servidor seguido del dominio que queremos utilizar para localizar el servidor.

xxx.xxx.xxx.xxx    example.com

Esto detectará cualquier solicitud a example.com y test.com en tu ordenador y lo enviará al servidor xxx.xxx.xxx.xxx.

Paso 7 - Probar los resultados

Ahora que ya tienes todo listo, puedes probar la configuración accediendo desde el navegador al dominio http://example.com.

Deberás ver el mensaje "Hakuna Matata!".

Si esto funciona bien, entonces ya tienes configurado correctamente tu virtual host.

WARNING

Si has realizado algún ajuste en el archivo hosts de tu ordenador, ¡no te olvides de borrar las líneas que agregaste!

Bibliografía