Tutorial: Instalación de un servidor web LAMP en Amazon Linux 2 - Amazon Elastic Compute Cloud

Tutorial: Instalación de un servidor web LAMP en Amazon Linux 2

Los siguientes procedimientos le ayudan a instalar un servidor web Apache con soporte para PHP y MariaDB (una adaptación de MySQL desarrollada por la comunidad) en la instancia de Amazon Linux 2 (que, en ocasiones, se denomina servidor web LAMP o pila LAMP). Puede utilizar este servidor para alojar un sitio web estático o implementar una aplicación PHP dinámica que lea y escriba información en una base de datos.

importante

Para instalar un servidor web LAMP en Amazon Linux AMI, consulte Tutorial: Instalación de un servidor web LAMP con Amazon Linux AMI.

Si desea configurar un servidor web LAMP en una instancia de Ubuntu o Red Hat Enterprise Linux, este tutorial no es el adecuado. Para obtener más información acerca de otras distribuciones, consulte la documentación específica. Para obtener más información acerca de los servidores web LAMP en Ubuntu, consulte la documentación de la comunidad de Ubuntu (tema ApacheMySQLPHP).

Opción: completar este tutorial con la automatización

Para completar este tutorial con AWS Administrador de sistemas Automation en lugar de las siguientes tareas, ejecute el documento AWSDocs-InstallALAMPServer-AL2 Automation.

Paso 1: Preparar el servidor LAMP

Requisitos previos

  • En este tutorial se da por sentado que ya ha lanzado una instancia nueva mediante Amazon Linux 2 con un nombre de DNS público al que se puede tener acceso desde Internet. Para obtener más información, consulte Paso 1: Lanzamiento de una instancia. También debe haber configurado el grupo de seguridad para que permita las conexiones SSH (puerto 22), HTTP (puerto 80) y HTTPS (puerto 443). Para obtener más información acerca de estos requisitos previos, consulte Autorización del tráfico de entrada para sus instancias de Linux.

  • El siguiente procedimiento instala la última versión de PHP disponible en Amazon Linux 2, que en la actualidad es PHP 7.2. Si tiene previsto usar otras aplicaciones de PHP diferentes a las que se indican en este tutorial, debe comprobar su compatibilidad con PHP 7.2.

Para preparar el servidor LAMP

  1. Conéctese a la instancia.

  2. Para asegurarse de que todos los paquetes de software están actualizados, realice una actualización rápida del software en la instancia. Este proceso puede durar unos minutos, pero es importante realizarlo para asegurarse de que tiene las actualizaciones de seguridad y las correcciones de errores más recientes.

    La opción -y instala las actualizaciones sin necesidad de confirmación. Si le gustaría examinar las actualizaciones antes de la instalación, puede omitir esta opción.

    [ec2-user ~]$ sudo yum update -y
  3. Instale los repositorios lamp-mariadb10.2-php7.2 y php7.2 Amazon Linux Extras para obtener las versiones más recientes de los paquetes LAMP MariaDB y PHP de Amazon Linux 2.

    [ec2-user ~]$ sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2

    Si recibe el error que indica sudo: amazon-linux-extras: command not found, entonces la instancia no se lanzó con una AMI; de Amazon Linux 2 (quizás está utilizando la Amazon Linux AMI en su lugar). Puede ver la versión de Amazon Linux usando el comando siguiente:

    cat /etc/system-release

    Para instalar un servidor web LAMP en Amazon Linux AMI, consulte Tutorial: Instalación de un servidor web LAMP con Amazon Linux AMI.

  4. Ahora que la instancia está actualizada, puede instalar los paquetes de software PHP, MariaDB y el servidor web Apache.

    Utilice el comando yum install para instalar varios paquetes de software y todas las dependencias relacionadas al mismo tiempo.

    [ec2-user ~]$ sudo yum install -y httpd mariadb-server

    Puede ver las versiones actuales de estos paquetes mediante el comando siguiente:

    yum info package_name
  5. Inicie el servidor web Apache.

    [ec2-user ~]$ sudo systemctl start httpd
  6. Utilice el comando systemctl para configurar el servidor web Apache de forma que se inicie cada vez que arranque el sistema.

    [ec2-user ~]$ sudo systemctl enable httpd

    Puede verificar que httpd está activo ejecutando el siguiente comando:

    [ec2-user ~]$ sudo systemctl is-enabled httpd
  7. Si aún no lo ha hecho, añada una regla de seguridad para permitir las conexiones HTTP entrantes (puerto 80) con la instancia. De manera predeterminada, se configura el grupo de seguridad launch-wizard-N para la instancia durante la inicialización. Este grupo contiene una sola regla para permitir las conexiones SSH.

    1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

    2. Elija Instances (Instancias) y seleccione la instancia.

    3. En la pestaña Security (Seguridad), consulte las reglas de entrada. Debería ver la siguiente regla:

      Port range Protocol Source 22 tcp 0.0.0.0/0
    4. Elija el vínculo para el grupo de seguridad. Siga los procedimientos de Agregar reglas a un grupo de seguridad para añadir una nueva regla de seguridad de entrada con los valores siguientes:

      • Type (Tipo): HTTP

      • Protocol (Protocolo): TCP

      • Port Range (Rango de puertos): 80

      • Source (Fuente): Custom

  8. Pruebe el servidor web. En un navegador web, escriba la dirección DNS pública (o la dirección IP pública) de la instancia. Si no hay ningún contenido en /var/www/html, debería aparecer la página de prueba de Apache. Puede obtener el DNS público de la instancia con la consola de Amazon EC2 (compruebe la columna Public DNS (DNS pública); si está oculta, elija el icono con forma de engranaje, Show/Hide Columns (Mostrar/ocultar columnas) y elija Public DNS (DNS pública)).

    Si no puede ver la página de prueba de Apache, compruebe que el grupo de seguridad que usa contiene una regla que permite el tráfico HTTP (puerto 80). Para obtener más información acerca de cómo añadir una regla HTTP al grupo de seguridad, consulte Agregar reglas a un grupo de seguridad.

    importante

    Si no utiliza Amazon Linux, es posible que también tenga que configurar el firewall en su instancia para permitir estas conexiones. Para obtener más información acerca de cómo configurar el firewall, consulte la documentación de su distribución específica.

    
                        Página de prueba de Apache

Apache httpd sirve archivos que se guardan en un directorio denominado raíz de documentos de Apache. La raíz de documentos de Apache de Amazon Linux es /var/www/html, que es propiedad del directorio raíz de manera predeterminada.

Para permitir que la cuenta ec2-user manipule archivos de este directorio, debe modificar la propiedad y los permisos del directorio. Existen muchas formas de realizar esta tarea. En este tutorial se añade el usuario ec2-user al grupo apache, se otorga al grupo apache la propiedad del directorio /var/www y se asignan permisos de escritura al grupo.

Para establecer permisos de archivo

  1. Añada el usuario (en este caso, el usuario ec2-user) al grupo apache.

    [ec2-user ~]$ sudo usermod -a -G apache ec2-user
  2. Cierre sesión, luego vuelva a iniciarla para elegir el nuevo grupo y, a continuación, verifique si pertenece a este.

    1. Cierre sesión (utilice el comando exit o cierre la ventana del terminal):

      [ec2-user ~]$ exit
    2. Para verificar si pertenece al grupo apache, vuelva a conectarse a la instancia y, entonces, ejecute el siguiente comando:

      [ec2-user ~]$ groups ec2-user adm wheel apache systemd-journal
  3. Cambie la propiedad de grupo de /var/www y su contenido al grupo apache.

    [ec2-user ~]$ sudo chown -R ec2-user:apache /var/www
  4. Para agregar permisos de escritura de grupo y establecer el ID de grupo en futuros subdirectorios, cambie los permisos del directorio /var/www y sus subdirectorios.

    [ec2-user ~]$ sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
  5. Para agregar permisos de escritura de grupo, cambie recursivamente los permisos de archivo de /var/www y sus subdirectorios:

    [ec2-user ~]$ find /var/www -type f -exec sudo chmod 0664 {} \;

Ahora el usuario ec2-user (y cualquier futuro miembro del grupo apache) puede añadir, eliminar y editar archivos en la raíz de documentos de Apache, por lo que podrá añadir contenido, como un sitio web estático o una aplicación PHP.

Para proteger el servidor web (opcional)

Un servidor web que ejecuta el protocolo HTTP no proporciona seguridad de transporte de los datos que envía o recibe. Cuando se conecta a un servidor HTTP utilizando un navegador web, las URL que visita, el contenido de las páginas web que recibe y el contenido (incluidas las contraseñas) de cualquier formulario HTML que envía son visibles a cualquier acceso no autorizado en la ruta de la red. La práctica recomendada para proteger el servidor web es instalar soporte para HTTPS (HTTP seguro), que protege los datos con cifrado SSL/TLS.

Para obtener información sobre la habilitación de HTTPS en su servidor, consulte Tutorial: configure SSl/TLS en Amazon Linux 2.

Paso 2: Probar el servidor LAMP

Si el servidor está instalado y en funcionamiento, y tiene establecidos correctamente los permisos de archivos, la cuenta ec2-user debería poder crear un archivo PHP en el directorio /var/www/html, que está disponible en Internet.

Para probar el servidor LAMP

  1. Cree un archivo PHP en la raíz de documentos de Apache.

    [ec2-user ~]$ echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php

    Si recibe el error "Permiso denegado" al intentar ejecutar este comando, intente cerrar sesión e iniciarla de nuevo para actualizar los permisos de grupo correctos que ha configurado en Para establecer permisos de archivo.

  2. En un navegador web, escriba la URL del archivo que acaba de crear. Esta URL es la dirección DNS pública de la instancia seguida de una barra diagonal y el nombre del archivo. Por ejemplo:

    http://my.public.dns.amazonaws.com/phpinfo.php

    Debería ver la página de información PHP.:

    Si no ve esta página, compruebe que el archivo /var/www/html/phpinfo.php se ha creado correctamente en el paso anterior. También puede comprobar que todos los paquetes necesarios se han instalado con el comando siguiente:

    [ec2-user ~]$ sudo yum list installed httpd mariadb-server php-mysqlnd

    Si alguno de los paquetes requeridos no aparece en la salida, instálelo con el comando sudo yum install package. Además, verifique que los extras php7.2 y lamp-mariadb10.2-php7.2 estén habilitados en la salida del comando amazon-linux-extras.

  3. Elimine el archivo phpinfo.php. Aunque esta información puede resultar útil, no se debe difundir por Internet por motivos de seguridad.

    [ec2-user ~]$ rm /var/www/html/phpinfo.php

Ahora ya tiene un servidor web LAMP totalmente funcional. Si añade contenido a la raíz del documento de Apache en /var/www/html, debería poder ver ese contenido en la dirección DNS pública de su instancia.

Paso 3: Proteger el servidor de base de datos

La instalación predeterminada del servidor MariaDB posee varias características que son perfectas para las pruebas y el desarrollo, pero que se deben deshabilitar o eliminar para los servidores de producción. El comando mysql_secure_installation le guía a través del proceso de configuración de una contraseña raíz y de eliminación de las características que no son seguras de la instalación. Aunque no tenga pensado utilizar el servidor MariaDB, recomendamos realizar este procedimiento.

Para proteger el servidor MariaDB

  1. Inicie el servidor MariaDB.

    [ec2-user ~]$ sudo systemctl start mariadb
  2. Ejecute mysql_secure_installation.

    [ec2-user ~]$ sudo mysql_secure_installation
    1. Cuando se le solicite, escriba una contraseña para la cuenta raíz.

      1. Escriba la contraseña raíz actual. De manera predeterminada, la cuenta raíz no tiene configurada ninguna contraseña. Pulse Intro.

      2. Escriba Y para configurar una contraseña y escriba una contraseña segura dos veces. Para obtener más información acerca de la creación de contraseñas seguras, consulte https://identitysafe.norton.com/password-generator/. Procure guardar esta contraseña en un lugar seguro.

        La configuración de una contraseña raíz para MariaDB es solo la medida más básica para proteger la base de datos. Cuando se crea o se instala una aplicación basada en base de datos, normalmente se crea un usuario del servicio de la base de datos para esa aplicación y se evita usar la cuenta raíz para cualquier cosa que no sea la administración de la base de datos.

    2. Escriba Y para eliminar las cuentas de usuarios anónimos.

    3. Escriba Y para deshabilitar el inicio de sesión raíz remoto.

    4. Escriba Y para eliminar la base de datos de prueba.

    5. Escriba Y para volver a cargar las tablas de privilegios y guardar los cambios.

  3. (Opcional) Si no tiene pensado utilizar el servidor MariaDB de inmediato, deténgalo. Puede reiniciarlo cuando lo necesite.

    [ec2-user ~]$ sudo systemctl stop mariadb
  4. (Opcional) Si desea que el servidor MariaDB se inicie cada vez que arranque el sistema, escriba el siguiente comando.

    [ec2-user ~]$ sudo systemctl enable mariadb

Paso 4: (Opcional) Instalar phpMyAdmin

phpMyAdmin es una herramienta de administración de bases de datos basada en web que sirve para ver y editar las bases de datos MySQL en la instancia EC2. Siga estos pasos para instalar y configurar phpMyAdmin en la instancia de Amazon Linux.

importante

No recomendamos utilizar phpMyAdmin para obtener acceso a un servidor LAMP, a menos que tenga habilitado SSL/TLS en Apache; de lo contrario, la contraseña del administrador de base de datos y otros datos se transmiten de manera insegura por Internet. Para ver las recomendaciones de seguridad de los desarrolladores, consulte Asegurando su instalación de phpMyAdmin. Para obtener información general sobre asegurar un servidor web en una instancia EC2, consulte Tutorial: configure SSl/TLS en Amazon Linux 2.

Para instalar phpMyAdmin

  1. Instale las dependencias requeridas.

    [ec2-user ~]$ sudo yum install php-mbstring -y
  2. Reinicie Apache.

    [ec2-user ~]$ sudo systemctl restart httpd
  3. Reinicie php-fpm.

    [ec2-user ~]$ sudo systemctl restart php-fpm
  4. Navegue a la raíz de documentos de Apache: /var/www/html.

    [ec2-user ~]$ cd /var/www/html
  5. Seleccione un paquete de origen con la versión de phpMyAdmin más reciente en https://www.phpmyadmin.net/downloads. Para descargar el archivo directamente a la instancia, copie el link y péguelo en un comando wget como el de este ejemplo:

    [ec2-user html]$ wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
  6. Cree la carpeta phpMyAdmin y extraiga aquí el paquete con el comando siguiente:

    [ec2-user html]$ mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1
  7. Elimine el archivo tarball phpMyAdmin-latest-all-languages.tar.gz.

    [ec2-user html]$ rm phpMyAdmin-latest-all-languages.tar.gz
  8. (Opcional) Si el servidor MySQL no está en ejecución, inícielo ahora.

    [ec2-user ~]$ sudo systemctl start mariadb
  9. En un navegador web, escriba la URL de la instalación de phpMyAdmin. Esta URL es la dirección DNS pública (o la dirección IP pública) de la instancia, seguida de una barra inclinada y el nombre del directorio de instalación. Por ejemplo:

    http://my.public.dns.amazonaws.com/phpMyAdmin

    Debería ver la página de inicio de sesión de phpMyAdmin:

  10. Inicie sesión en la instalación de phpMyAdmin con el nombre de usuario root y la contraseña raíz de MySQL antes creada.

    Antes de poner en servicio la instalación, debe configurarla. Para configurar phpMyAdmin, puede crear manualmente un archivo de configuración, usar la consola de configuración o combinar ambos métodos.

    Para obtener información acerca del uso de phpMyAdmin, consulte la guía del usuario de phpMyAdmin.

Solución de problemas

En esta sección, se ofrecen sugerencias para resolver los problemas comunes que puede encontrarse al configurar un servidor LAMP nuevo.

No puedo conectarme a mi servidor utilizando un navegador web.

Realice las siguientes comprobaciones para ver si el servidor web Apache funciona y se puede obtener acceso a él.

  • ¿El servidor web funciona?

    Puede verificar que httpd está activo ejecutando el siguiente comando:

    [ec2-user ~]$ sudo systemctl is-enabled httpd

    Si el proceso httpd no se está ejecutando, repita los pasos que se describen en Para preparar el servidor LAMP.

  • ¿El firewall está configurado correctamente?

    Si no puede ver la página de prueba de Apache, compruebe que el grupo de seguridad que usa contiene una regla que permite el tráfico HTTP (puerto 80). Para obtener más información acerca de cómo añadir una regla HTTP al grupo de seguridad, consulte Agregar reglas a un grupo de seguridad.

Temas relacionados

Para obtener información acerca de la transferencia de archivos a la instancia o la instalación de un blog de WordPress en el servidor web, consulte la siguiente documentación:

Para obtener más información acerca de los comandos y el software que se utilizan en este tutorial, visite las siguientes páginas web:

Para obtener más información acerca del registro de un nombre de dominio para el servidor web o la transferencia de un nombre de dominio existente a este host, consulte el tema Creación y migración de dominios y subdominios a Amazon Route 53 en la Guía para desarrolladores de Amazon Route 53.