Blog / Tutoriales / Instala LAMP Stack en tu servidor en menos de 90 segundos con Cloud-Init
(last updated: )

Instala LAMP Stack en tu servidor en menos de 90 segundos con Cloud-Init

LAMP Stack (Linux, Apache, MySQL & PHP) se usa ampliamente para aplicaciones web. Aquí aprenderás a instalar y ejecutar LAMP en tu servidor en solo 90 segundos con Cloud-Init.

Lectura de 5 min

El desarrollo de software actual combina distintas tecnologías, como lenguajes de programación, frameworks, bases de datos y otras herramientas. Al conjunto se le conoce como el “tech stack de una empresa”. Un ejemplo popular es MERN, nombre formado por MongoDB, Express, React y Node. Ahora veremos LAMP Stack, uno de los stacks más influyentes y usados.

¿Qué es LAMP Stack?

LAMP significa Linux, Apache, MySQL y PHP. Surgió en 1998 como una alternativa gratuita y de código abierto al software comercial para crear sitios web. Desde entonces, muchas empresas y herramientas han adoptado este tech stack, que continúa usándose ampliamente.

¿LAMP está obsoleto?

Otros tech stacks siguen ganando popularidad y el desarrollo web ya no es tan complejo como hace 20 años. Aun así, LAMP continúa muy presente. Herramientas como WordPress, que impulsa el 43% de la web, ayudan a mantenerlo vigente.

Estos son algunos ejemplos de grandes empresas o herramientas que usan LAMP Stack:

  1. WordPress
  2. Wikipedia
  3. Slack
  4. Facebook

Por cierto, este blog también funciona con WordPress y, por lo tanto, usa el tech stack LAMP.

Configuración de LAMP Stack

Ya sabes de qué se trata. Ahora configura un sitio web con LAMP Stack. El objetivo es ejecutar un servidor web Apache con PHP y MySQL. Puedes hacerlo mediante una instalación sencilla con apt (Advanced Packaging Tool) en Linux. También hay otras formas de preparar LAMP Stack en tu máquina.
En Contabo puedes crear una instancia nueva con LAMP Stack preinstalado en un VPS o VDS. Esta opción está disponible al crear la instancia o desde el panel de reinstalación. Sin embargo, a veces necesitas ajustar la configuración, por lo que instalarlo manualmente puede ser una mejor opción.

Para entender bien el archivo de configuración de cloud-init, comenzaremos con la instalación manual. La configuración se basa principalmente en los pasos de esta guía.

Instalación manual

Solo necesitas un servidor Linux y acceso root para instalar y configurar los paquetes requeridos. En esta guía usaremos Debian 11 en un Contabo Cloud VPS.

Antes de instalar paquetes nuevos, actualiza el sistema y sus paquetes:

apt update && apt upgrade -y

Después, agrega algunos paquetes requeridos para la instalación, incluido apache2:

apt-get install software-properties-common wget curl apache2 -y

Para instalar los paquetes de PHP, primero agrega el repositorio de PHP:

curl -sSL https://packages.sury.org/php/README.txt | sudo bash -x

Ahora instala los paquetes de PHP:

apt-get install php8.1 php8.1-cli php8.1-common php8.1-curl php8.1-gd php8.1-intl php8.1-mbstring php8.1-mysql php8.1-opcache php8.1-readline php8.1-xml php8.1-xsl php8.1-zip php8.1-bz2 libapache2-mod-php8.1 -y

Si no necesitas las extensiones anteriores, también puedes instalar PHP sin los paquetes adicionales:

apt-get install php8.1 php8.1-cli libapache2-mod-php8.1 -y

Reinicia el servidor web apache2 con service apache2 restart. Cuando visites la dirección IP de tu servidor, deberías ver la página predeterminada de apache2:

apache2_default_page

Para completar la instalación de LAMP Stack, solo falta MySQL. Instálalo con este comando:

apt install mariadb-server mariadb-client -y && mysql_secure_installation

El comando instalará MariaDB (MySQL) e iniciará automáticamente el instalador. Durante el proceso se te pedirá establecer una nueva contraseña root. Para acceder a la base de datos, usa “root” como nombre de usuario y la contraseña que acabas de configurar.

Ya instalaste LAMP Stack en tu sistema. Ahora puedes automatizar con cloud-init lo que acabas de hacer manualmente.

Instalación con Cloud-Init

En un artículo anterior, explicamos las ventajas de cloud-init y por qué resulta tan útil. Cloud-init permite configurar una instancia cloud a partir de un archivo de configuración predefinido que funciona como plantilla. Además de automatizar la configuración, ayuda con la recuperación ante desastres y los clústeres.

Con los pasos de la instalación manual como referencia, ya puedes crear la configuración de cloud-init. Así automatizarás el proceso y podrás repetirlo en varias máquinas.

Para indicar que se trata de una configuración de cloud-init, la primera línea debe verse así:

#cloud-config

Cloud-init ofrece dos opciones sencillas para controlar si los paquetes deben actualizarse al inicio. Para trabajar con sus versiones más recientes, establece ambas opciones en true:

package_update: true
package_upgrade: true

Puedes instalar de inmediato el servidor web apache2 y otros paquetes requeridos. Indica a cloud-init que los instale mediante el módulo packages:

packages:
  - software-properties-common
  - wget
  - curl
  - apache2

El resto de la instalación se hará en el módulo runcmd. Este contiene una lista sencilla de comandos que se ejecutan durante la etapa “config” de cloud-init. Para instalar PHP, usa los mismos comandos de la instalación manual:

runcmd:
  - curl -sSL https://packages.sury.org/php/README.txt | sudo bash -x
  - sudo apt-get install php8.1 php8.1-cli php8.1-common php8.1-curl php8.1-gd php8.1-intl php8.1-mbstring php8.1-mysql php8.1-opcache php8.1-readline php8.1-xml php8.1-xsl php8.1-zip php8.1-bz2 libapache2-mod-php8.1 -y
  - service apache2 restart

La configuración de MySQL / MariaDB es un poco distinta. Primero debes instalarlo:

apt install mariadb-server mariadb-client -y

En este caso no puedes usar el instalador mysql_secure_installation, así que debes establecer la contraseña mediante la configuración de cloud-init. Para no guardar una contraseña en este archivo, genera una aleatoria y guárdala en un archivo del servidor (/home/mysql_access.txt). Después podrás consultarla mediante SSH:

pw=$(openssl rand -base64 18); echo "mysql_password=$pw" >> /home/mysql_access.txt

Para cambiar la contraseña, usa el comando mysqladmin:

pw=$(openssl rand -base64 18); mysqladmin -u root -h localhost password "$pw"; echo "mysql_password=$pw" >> /home/mysql_access.txt

Ahora vuelve a cargar las tablas de privilegios para aplicar los cambios:

mysqladmin reload

Al combinar todas estas configuraciones, obtienes un archivo completo de cloud-init. Puedes usarlo para crear instancias nuevas con LAMP Stack instalado y configurado:

#cloud-config
package_update: true
package_upgrade: true
packages:
  - software-properties-common
  - wget
  - curl
  - apache2
runcmd:
  - curl -sSL https://packages.sury.org/php/README.txt | sudo bash -x
  - sudo apt-get install php8.1 php8.1-cli php8.1-common php8.1-curl php8.1-gd php8.1-intl php8.1-mbstring php8.1-mysql php8.1-opcache php8.1-readline php8.1-xml php8.1-xsl php8.1-zip php8.1-bz2 libapache2-mod-php8.1 -y
  - service apache2 restart
  - apt install mariadb-server mariadb-client -y
  - pw=$(openssl rand -base64 18); mysqladmin -u root -h localhost password "$pw"; echo "mysql_password=$pw" >> /home/mysql_access.txt
  - mysqladmin reload

Ventajas de usar Cloud-Init

Con este archivo puedes repetir la misma configuración en varias instancias.

¿Necesitas otro sitio web basado en LAMP? Inicia una máquina nueva y podrás desplegar tu proyecto.

¿Una instancia dejó de funcionar? Con esta configuración de Cloud-Init puedes crear otra rápidamente y aplicar automáticamente todos tus ajustes.

El objetivo es simplificar la replicación y la recuperación ante desastres. Ya no necesitas instalar manualmente cada instancia nueva. Esta configuración funciona como una plantilla para crearlas, lo que reduce el trabajo y agiliza tu flujo de trabajo.