¿Cómo instalar LAMP en Ubuntu 16.04?

Actualizado el 1 de septiembre, 2016. Por BlueHosting.

El sistema de infraestructura LAMP es un grupo de software de código abierto que utiliza las tecnologías Linux, Apache, MySQL y PHP, éstas forman el acrónimo LAMP. La combinación de estas tecnologías se utiliza para levantar y mantener en ejecución un servidor Web. Esta guía explica cómo instalar y probar LAMP en un equipo con Ubuntu 16.04

Nota:
Esta guía está escrita para un usuario no root. Los comando que requieren privilegios elevados están precedidos por sudo. También tenga en cuenta que debe remplazar las ocurrencias de www.ejemplo.com y de ejemplo.com con su nombre de dominio real.

Antes de comenzar

  1. Asegúrese de seguir nuestra guía de seguridad Además será necesario que tenga establecido un hostname.
    Para verificar su hostname puede ejecutar:

    hostname  
    hostname -f
    

    El primer comando debería mostrar el hostname corto, y el segundo debería mostrar el nombre de dominio completamente calificado (o FQDN, por sus siglas en inglés).

  2. Actualice su sistema:

    sudo apt-get update && sudo apt-get upgrade
    

Apache

Instalación y configuración

  1. Instale Apache 2.4 desde el repositorio de Ubuntu:

    sudo apt-get install apache2
    
  2. Edite el archivo de configuración de Apache: apache2.conf para cambiar el parámetro de configuración KeepAlive:

    KeepAlive Off
    
  3. El módulo de multiprocesamiento (MPM) predeterminado de Apache es el módulo de eventos, pero por defecto PHP usa el módulo prefork. Abra el archivo mpm_prefork.conf, ubicado en la ruta /etc/apache2/mods- y edite la configuración. A continuación están los valores sugeridos para un servidor con 2GB de memoria RAM:
    Archivo: /etc/apache2/mods-available/mpm_prefork.conf

    <IfModule mpm_prefork_module>
            StartServers            4
            MinSpareServers         20
            MaxSpareServers         40
            MaxRequestWorkers       200
            MaxConnectionsPerChild  4500
    </IfModule>
    
  4. Habilite el módulo de evento y habilite el módulo prefork:

    sudo a2dismod mpm_event
    sudo a2enmod mpm_prefork
    
  5. Reinicie Apache:

    sudo systemctl restart apache2
    

Configurar los hosts virtuales basados en nombre

Puede configurar hosts virtuales de distintas formas; sin embargo, el siguiente método es el más recomendado. Por defecto, Apache escucha en todas las direcciones IP disponibles. Para todos los pasos siguientes, remplace ejemplo.com con su nombre de dominio real.

  1. Cree una copia del archivo de configuración predeterminado de Apache para su sitio:

    sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/ejemplo.com.conf
    
  2. Edite el nuevo archivo de configuración ejemplo.com.conf quitando el comentario de ServerName y remplazando ejemplo.com con la dirección IP o nombre de dominio completamente calificado (FQDN). Ingrese la ruta del documento raíz y los directorios de logs como se muestra a continuación y agregue un bloque Directory antes de la etiqueta <VirtualHost>:
    Archivo: /etc/apache2/sites-available/ejemplo.com.conf

    <Directory /var/www/html/ejemplo.com/public_html>
        Require all granted
    </Directory>
    <VirtualHost *:80>
            ServerName ejemplo.com
            ServerAlias www.ejemplo.com
            ServerAdmin webmaster@localhost
            DocumentRoot /var/www/html/ejemplo.com/public_html
    
            ErrorLog /var/www/html/ejemplo.com/logs/error.log
            CustomLog /var/www/html/ejemplo.com/logs/access.log combined
    
    </VirtualHost>
    

    Nota: Por motivos de brevedad, el archivo de ejemplo de arriba omite todas las secciones comentadas; puede mantener o eliminar las secciones comentadas según su consideración.
    La directiva ServerAlias le permite incluir varios nombres de dominio o subdominios para un único host. El ejemplo arriba les permite a los visitantes usar ejemplo.com o www.ejemplo.com para navegar a este host virtual.

  3. Ahora cree los directorios a los cuales se hace referencia arriba:

    sudo mkdir -p /var/www/html/ejemplo.com/{public_html,logs}
    
  4. Enlace el archivo del host virtual desde el directorio sites-available hacia el directorio sites-enabled:

    sudo a2ensite ejemplo.com.conf
    

    Nota:
    Si necesita desactivar su sitio web, ejecute:

    a2dissite ejemplo.com.conf
    
  5. Deshabilite el host virtual predeterminado para minimizar los riesgos de seguridad:

    sudo a2dissite 000-default.conf
    
  6. Vuelva a cargar Apache:

    sudo systemctl reload apache2
    

El hosting virtual debería estar activado. Para permitir que el host virtual use su nombre de dominio, asegúrese de que tiene configurados los servicios DNS para que su dominio apunte a la dirección IP de su BlueHosting.

Si hay sitios web adicionales que le gustaría alojar en su BlueHosting, repita los pasos anteriores para agregar una carpeta y un archivo de configuración para cada uno de estos sitios.

MySQL

Instalar MySQL

Instale el paquete mysql-server y selecciona una contraseña segura cuando se le pida:

    sudo apt-get install mysql-server

Cree una base de datos MySQL

  1. Inicie sesión en su MySQL

    mysql -u root -p
    

    Ingrese la contraseña root de MySQL que creó al momento de la instalación, luego ingresará a la línea de comandos MySQL.

  2. Si no se coloca ninguna contraseña en la sección anterior, o si usted quiere cambiar la contraseña para el usuario root, ejecute el siguiente comando. Remplace contraseña con una nueva contraseña root:

    ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'contraseña';
    
  3. Cree una base de datos y un usuario con los permisos correspondientes. En este ejemplo, la base de datos se llama datosweb, el usuario usuarioweb y la contraseña está indicada como SuContraseña:

    CREATE DATABASE datosweb;
    GRANT ALL ON datosweb.* TO 'usuarioweb' IDENTIFIED BY 'SuContraseña';
    
  4. Salga de MySQL:

    quit
    

PHP 7.0

  1. Instale PHP, la extensión de PHP y el repositorio de aplicación, el soporte para Apache y el soporte para MySQL:

    sudo apt-get install php7.0 php-pear libapache2-mod-php7.0 php7.0-mysql
    

    De forma opcional, instale el soporte adicional para cURL, JSON y CGI:

    sudo apt-get install php7.0-curl php7.0-json php7.0-cgi
    
  2. Una vez que PHP 7.0 esté instalado, edite el archivo de configuración ubicado en /etc/php/7.0/apache2/php.ini para habilitar errores más descriptivos, mejorar los registros de errores y el desempeño. Las siguientes modificaciones proveen un buen punto de partido:
    Extracto del archivo: /etc/php/7.0/apache2/php.ini

    max_input_time = 30
    error_reporting = E_COMPILE_ERROR | E_RECOVERABLE_ERROR | E_ERROR | E_CORE_ERROR
    error_log = /var/log/php/error.log
    

    Nota:
    El inicio del archivo php.ini contiene ejemplos comentados (incluyen un punto y coma al inicio ;), los cuales desactivan estas directivas. Asegúrese de que las líneas que modifique en este paso estén después de la sección de ejemplos. También recuerde no comentar estas líneas.

  3. Cree el directorio de registro de errores para PHP y otorgue la propiedad correspondiente al usuario Apache en el sistema:

    sudo mkdir /var/log/php
    sudo chown www-data /var/log/php
    
  4. Reinicie Apache:

    sudo systemctl restart apache2
    

Opcional: probar y solucionar problemas de Apache

En esta sección, crearemos una página de prueba que sirve para demostrar si Apache puede interpretar los comandos PHP y conectarse a una base de datos MySQL. Esto puede ser útil para ubicar la fuente de errores si alguno de los elementos de su infraestructura LAMP no se está comunicando con los otros.

  1. Pegue el siguiente código en un archivo nuevo llamado phptest.php en el directorio public_html. Modifique los valores de usuarioweb y SuContraseña para que coincidan con la información real ingresada en la sección de creación de la base de datos MySQL (vista anteriormente):
    Extracto del archivo: /var/www/html/ejemplo.com/public_html/phptest.php:

    <html>
    <head>
        <title>PHP Test</title>
    </head>
        <body>
        <?php echo '<p>Hello World</p>';
    
        // En la sección de variables a continuación, remplace el usuario y contraseña con los valores reales de las credenciales MySQL en su servidor
        $servername = "localhost";
        $username = "usuarioweb";
        $password = "SuContraseña";
    
        // Se crea una conexión MySQL 
        $conn = mysqli_connect($servername, $username, $password);
    
        // Se comprueba la conexión - si falla, la salida incluirá un mensaje de eror
        if (!$conn) {
            die('<p>La conexión fue incorrecta: <p>' . mysqli_connect_error());
        }
        echo '<p>¡Se ha conectado con éxito!</p>';
        ?>
    </body>
    </html>
    
  2. Navegue a la ubicación ejemplo.com/phptest.php de su máquina local. Si los componentes de su infraestructura LAMP están funcionando correctamente, el navegador mostrará un mensaje que indica: "¡Se ha conectado con éxito!". Si no, la salida será un mensaje de error ("La conexión fue incorrecta").

Solución de problemas

  • Si el sitio no carga en lo absoluto, verifique si Apache está en ejecución y reinícielo si es necesario:

    systemctl status apache2
    sudo systemctl restart apache2
    
  • Si el sitio carga, pero muestra la página predeterminada de Apache, vuelva a la sección de configuración de hosts virtuales de arriba y verifique que el DocumentRoot coincida con su carpeta ejemplo.com/public_html.

  • Si la página devuelve una página con un mensaje Index of / y una lista de los archivos y carpetas en el directorio, cree un archivo index.html o un archivo de prueba como se muestra arriba.

¡Felicidades! Ha creado y configurado una infraestructura LAMP en Ubuntu 16.04 (LTS).

Recursos adicionales

Para complementar la información aquí presentada puede consultar los siguientes recursos. Aunque este material es provisto esperando que sea útil, tome en cuenta que no podemos certificar su actualidad o precisión.

¿QUÉ DESEAS SABER?

Intentaremos leer tu mente...