

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Tutorial: Instale un servidor LAMP en AL2
<a name="ec2-lamp-amazon-linux-2"></a>

Los siguientes procedimientos le ayudan a instalar un servidor web Apache compatible con PHP y [MariaDB](https://mariadb.org/about/) (una bifurcación de MySQL desarrollada por la comunidad) en su instancia AL2 (a veces denominada 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**  
Si está intentando configurar un servidor web LAMP en una distribución diferente, como Ubuntu o Red Hat Enterprise Linux, este tutorial no funcionará. Para el AL2023, consulte [Instalación de un servidor LAMP en el AL2023](https://docs.aws.amazon.com//linux/al2023/ug/ec2-lamp-amazon-linux-2023.html). [Para Ubuntu, consulte la siguiente documentación de la comunidad de Ubuntu: ApacheMy SQLPHP.](https://help.ubuntu.com/community/ApacheMySQLPHP) Para otras distribuciones, consulte su documentación específica.

**Opción: completar este tutorial con la automatización**  
Para completar este tutorial utilizando la AWS Systems Manager automatización en lugar de las siguientes tareas, ejecute el documento de [AWS Docs-InstallALAMPServer-AL2](https://console.aws.amazon.com/systems-manager/automation/execute/AWSDocs-InstallALAMPServer-AL2)automatización.

**Topics**
+ [Paso 1: Preparar el servidor LAMP](#prepare-lamp-server)
+ [Paso 2: Probar el servidor LAMP](#test-lamp-server)
+ [Paso 3: Proteger el servidor de base de datos](#secure-mariadb-lamp-server)
+ [Paso 4: (opcional) Instalar php MyAdmin](#install-phpmyadmin-lamp-server)
+ [Solución de problemas](#lamp-troubleshooting)
+ [Temas relacionados](#lamp-more-info)

## Paso 1: Preparar el servidor LAMP
<a name="prepare-lamp-server"></a>

**Requisitos previos**
+ En este tutorial se supone que ya ha lanzado una nueva instancia mediante AL2, con un nombre DNS público al que se puede acceder desde Internet. Para obtener más información, consulte [Lanzar una instancia](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html) en la *Guía del usuario de Amazon EC2*. 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 sobre estos requisitos previos, consulte [las reglas de los grupos de seguridad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules.html) en la Guía del *usuario de Amazon EC2*.
+ El siguiente procedimiento instala la última versión de PHP disponible actualmente en AL2. `php8.2` Si tiene previsto usar otras aplicaciones de PHP diferentes a las que se indican en este tutorial, debe comprobar su compatibilidad con `php8.2`.<a name="install_apache-2"></a>

**Para preparar el servidor LAMP**

1. [Conéctese a la instancia](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html).

1. 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
   ```

1. Instale los repositorios de Amazon Linux Extras `mariadb10.5` para obtener la versión más recientes del paquete MariaDB.

   ```
   [ec2-user ~]$ sudo amazon-linux-extras install mariadb10.5
   ```

   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
   ```

1. Instale los repositorios `php8.2` Amazon Linux Extras para obtener la última versión del PHP paquete para AL2.

   ```
   [ec2-user ~]$ sudo amazon-linux-extras install php8.2
   ```

1. Ahora que la instancia está actualizada, puede instalar el servidor web Apache, MariaDB y los paquetes de software PHP. 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
   ```

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

   ```
   yum info {{package_name}}
   ```

1. Inicie el servidor web Apache.

   ```
   [ec2-user ~]$ sudo systemctl start httpd
   ```

1.  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
   ```

1. 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 forma predeterminada, se configuró un grupo de {{N}} seguridad **launch-wizard** 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/](https://console.aws.amazon.com/ec2/).

   1. Elija **Instances (Instancias)** y seleccione la instancia.

   1. 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
      ```
**aviso**  
Utilizar `0.0.0.0/0` permite que todas las direcciones IPv4 tengan acceso a su instancia mediante SSH. Esto es aceptable para un periodo de tiempo corto en un entorno de prueba, pero no es seguro en entornos de producción. En entornos de producción, solo se autoriza el acceso a la instancia a una dirección IP o a un rango de direcciones IP específicas.

   1. Elija el vínculo para el grupo de seguridad. Siguiendo los procedimientos de [Añadir reglas a un grupo de seguridad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule), agrega una nueva regla de seguridad entrante con los siguientes valores:
      + **Tipo**: HTTP
      + **Protocolo**: TCP
      + **Rango de puertos**: 80
      + **Origen**: personalizado

1. 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 su instancia mediante la consola Amazon EC2 (compruebe la columna **Public DNS**; si esta columna está oculta, elija **Show/Hide Columns** (el icono con forma de engranaje) y elija Public DNS).**

   Compruebe que el grupo de seguridad de la instancia contenga una regla para permitir el tráfico HTTP en el puerto 80. Para obtener más información, consulte [Agregar reglas al grupo de seguridad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).
**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.  
![La prueba del servidor muestra la página de prueba de Apache.](http://docs.aws.amazon.com/es_es/linux/al2/ug/images/apache_test_page_al2_2.4.png)

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.<a name="setting-file-permissions-2"></a>

**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}}
   ```

1. 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
      ```

   1. 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
      ```

1. Cambie la propiedad de grupo de `/var/www` y su contenido al grupo `apache`.

   ```
   [ec2-user ~]$ sudo chown -R ec2-user:apache /var/www
   ```

1. 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 {} \;
   ```

1. 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 mejor práctica para proteger su servidor web es instalar el soporte para HTTPS (HTTP Secure), que protege sus datos mediante cifrado. SSL/TLS

Para obtener información sobre la habilitación de HTTPS en su servidor, consulte [Tutorial: Configurar SSL/TLS en AL2](SSL-on-amazon-linux-2.md).

## Paso 2: Probar el servidor LAMP
<a name="test-lamp-server"></a>

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](#setting-file-permissions-2).

1. 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.:  
![La prueba del servidor LAMP muestra la página de información de PHP.](http://docs.aws.amazon.com/es_es/linux/al2/ug/images/phpinfo7.2.10.png)

   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 verificar 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**.

1. 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
<a name="secure-mariadb-lamp-server"></a>

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.<a name="securing-maria-db"></a>

**Para proteger el servidor MariaDB**

1. Inicie el servidor MariaDB.

   ```
   [ec2-user ~]$ sudo systemctl start mariadb
   ```

1. 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.

      1. Escriba **Y** para configurar una contraseña y escriba una contraseña segura dos veces. Para obtener más información sobre cómo crear una contraseña segura, consulte [https://identitysafe.norton.com/password-generator/](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. 

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

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

   1. Escriba **Y** para eliminar la base de datos de prueba.

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

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

   ```
   [ec2-user ~]$ sudo systemctl stop mariadb
   ```

1. (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 php MyAdmin
<a name="install-phpmyadmin-lamp-server"></a>

[php MyAdmin](https://www.phpmyadmin.net/) es una herramienta de administración de bases de datos basada en la web que puede utilizar para ver y editar las bases de datos MySQL en su instancia EC2. Siga estos pasos para instalar y configurar `phpMyAdmin` en la instancia de Amazon Linux.

**importante**  
No recomendamos utilizarla `phpMyAdmin` para acceder a un servidor LAMP a menos que esté habilitado SSL/TLS en Apache; de lo contrario, la contraseña de administrador de la base de datos y otros datos se transmitirán de forma insegura a través de Internet. Para ver las recomendaciones de seguridad de los desarrolladores, consulta Cómo [proteger tu MyAdmin instalación de php](https://docs.phpmyadmin.net/en/latest/setup.html#securing-your-phpmyadmin-installation). Para obtener información general sobre asegurar un servidor web en una instancia de EC2, consulte [Tutorial: Configurar SSL/TLS en AL2](SSL-on-amazon-linux-2.md).

**Para instalar php MyAdmin**

1. Instale las dependencias requeridas.

   ```
   [ec2-user ~]$ sudo yum install php-mbstring php-xml -y
   ```

1. Reinicie Apache.

   ```
   [ec2-user ~]$ sudo systemctl restart httpd
   ```

1. Reinicie `php-fpm`.

   ```
   [ec2-user ~]$ sudo systemctl restart php-fpm
   ```

1. Navegue a la raíz de documentos de Apache: `/var/www/html`.

   ```
   [ec2-user ~]$ cd /var/www/html
   ```

1. Seleccione un paquete fuente para la última MyAdmin versión de php desde [https://www.phpmyadmin.net/downloads](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}}
   ```

1. 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
   ```

1. Elimine el {{phpMyAdmin-latest-all-languages.tar.gz}} tarball.

   ```
   [ec2-user html]$ rm {{phpMyAdmin-latest-all-languages.tar.gz}}
   ```

1.  (Opcional) Si el servidor MySQL no está en ejecución, inícielo ahora.

   ```
   [ec2-user ~]$ sudo systemctl start mariadb
   ```

1. En un navegador web, escribe la URL de tu MyAdmin instalación de php. 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ías ver la página de inicio de MyAdmin sesión de php:  
![El resultado de escribir la URL de su MyAdmin instalación de php es la pantalla de inicio de MyAdmin sesión de php.](http://docs.aws.amazon.com/es_es/linux/al2/ug/images/phpmyadmin_login.png)

1. Inicie sesión en su MyAdmin instalación de php con el nombre `root` de usuario y la contraseña root de MySQL que creó anteriormente.

   Antes de poner en servicio la instalación, debe configurarla. Le sugerimos que comience con la creación manual del archivo de configuración de la siguiente manera:

   1. Para comenzar con un archivo de configuración mínimo, utilice su editor de texto favorito para crear un archivo nuevo y luego, copie el contenido de `config.sample.inc.php` en él.

   1. Guarde el archivo tal y como está `config.inc.php` en el MyAdmin directorio php que lo contiene`index.php`.

   1. Consulte las instrucciones posteriores a la creación del archivo en la sección [Uso del script de configuración](https://docs.phpmyadmin.net/en/latest/setup.html#using-the-setup-script) de las instrucciones de MyAdmin instalación de php para cualquier configuración adicional.

    Para obtener información sobre el uso de phpMyAdmin, consulte la [Guía del MyAdmin usuario de php](http://docs.phpmyadmin.net/en/latest/user.html).

## Solución de problemas
<a name="lamp-troubleshooting"></a>

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 mediante un navegador web.
<a name="is_apache_on"></a>

Realice las siguientes verificaciones 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](#install_apache-2).
+ **¿El firewall está configurado correctamente?**

  Compruebe que el grupo de seguridad de la instancia contenga una regla para permitir el tráfico HTTP en el puerto 80. Para obtener más información, consulte [Agregar reglas al grupo de seguridad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).

### No puedo conectarme a mi servidor mediante HTTPS.
<a name="is-https-enabled"></a>

Realice las siguientes verificaciones para verificar si su servidor web Apache está configurado para admitir HTTPS.
+ **¿El servidor web está configurado correctamente?**

  Después de instalar Apache, el servidor se configura para el tráfico HTTP. Para admitir HTTPS, habilite TLS en el servidor e instale un certificado SSL. Para obtener información, consulte [Tutorial: Configurar SSL/TLS en AL2](SSL-on-amazon-linux-2.md).
+ **¿El firewall está configurado correctamente?**

  Verifique que el grupo de seguridad de la instancia contiene una regla para permitir el tráfico HTTPS en el puerto 443. Para obtener más información, consulte [Añadir reglas a un grupo de seguridad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).

## Temas relacionados
<a name="lamp-more-info"></a>

Para obtener más información sobre la transferencia de archivos a la instancia o la instalación de un WordPress blog en el servidor web, consulte la siguiente documentación:
+ [Transfiera los archivos a su instancia de Linux mediante WinSCP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html#Transfer_WinSCP).
+ [Transfiera archivos a instancias de Linux mediante un SCP cliente](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-linux-inst-ssh.html#linux-file-transfer-scp).
+ [Tutorial: Aloje un WordPress blog en AL2](hosting-wordpress.md)

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:
+ Servidor web Apache: [http://httpd.apache.org/](http://httpd.apache.org/)
+ Servidor de base de datos MariaDB: [https://mariadb.org/](https://mariadb.org/)
+ Lenguaje de programación PHP: [http://php.net/](http://php.net/)
+ El `chmod` comando: [https://en.wikipedia.org/wiki/Chmod](https://en.wikipedia.org/wiki/Chmod)
+ El `chown` comando: [https://en.wikipedia.org/wiki/Chown](https://en.wikipedia.org/wiki/Chown)

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](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/creating-migrating.html) en la *Guía para desarrolladores de Amazon Route 53*.