LAMP Stack en funcionamiento en su servidor en menos de 90 segundos usando Cloud-Init

Hoy en día, la creación de software consta de muchas tecnologías diferentes, incluidos lenguajes de programación, bases de datos y otras herramientas. Todo esto combinado es lo que usted llama una “company’s tech stack”..

Por ejemplo, uno popular es  MERN Stark que significa MongoDB, Express, React y Node. Pero hoy, echemos un vistazo a la “LAMP Stack”, ya que es una de las más influyentes y populares.

¿Qué es LAMP Stack?

LAMP significa Linux, Apache, MySQL y PHP y existe desde 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 esta tecnología y se usa ampliamente hasta el día de hoy.

¿La LAMP no está muerta?

Hay muchas otras pilas de tecnología que ganan cada vez más popularidad y el desarrollo web ya no es tan complejo como lo era hace 20 años. A pesar de esto, LAMP todavía se usa ampliamente y las herramientas como WordPress , que impulsan el 43% de la web, están haciendo un gran trabajo para mantener vivo a LAMP.

Estos son solo algunos ejemplos de grandes empresas o herramientas que utilizan la pila LAMP:

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

Por cierto, este blog también se ejecuta en WordPress y, por lo tanto, utiliza la pila tecnológica LAMP.

Configuración de Stack LAMP

Entonces, ahora que sabe de lo que estamos hablando, pongámonos a trabajar y configuremos un sitio web con la pila LAMP. El objetivo es tener un servidor web Apache que se ejecute con PHP y MySQL y podemos lograrlo con una instalación simple usando apt (Advanced Packaging Tool) en Linux. Pero además de este método de instalación manual, en realidad hay otras formas de preparar la Stack LAMP en nuestra máquina.

Aunque en nuestro proveedor de Hosting Contabo es posible configurar una nueva instancia con la pila LAMP preinstalada en un VPS o VDS al crear una nueva instancia o usar el panel de reinstalación, a veces es necesario modificar algunas configuraciones y, por lo tanto, una instalación manual puede ser la mejor manera de hacerlo. .

Para obtener una comprensión completa del archivo de configuración cloud-init, primero comenzaremos con la instalación manual, ya que la configuración se basa principalmente en los pasos que estamos haciendo en la guía manual.

Instalación manual

Para comenzar, todo lo que necesita es un servidor Linux y acceso de root para que podamos instalar y configurar los paquetes necesarios. Usaremos Debian 11 en un Contabo Cloud VPS en esta guía.

Antes de instalar nuevos paquetes, asegúrese de que el sistema esté actualizado actualizando y actualizando los paquetes:

apt update && apt upgrade -y

A continuación, agregamos algunos paquetes necesarios para la instalación y también apache2:

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

Para instalar los paquetes de PHP, primero debemos agregar el repositorio de PHP:

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

Ahora podemos instalar 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 necesita las extensiones anteriores, también puede instalar PHP sin todos los paquetes adicionales:

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

Reiniciemos el servidor web apache2 con service apache2 restart y si visita la dirección IP de su servidor, debería poder ver la página predeterminada de apache2:

Para tener una LAMP Stack  completa instalada, todo lo que queda es MySQL. Podemos instalarlo bastante fácilmente con un simple comando:

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

Esto instalará MariaDB (MySQL) e iniciará automáticamente el instalador. En el proceso de instalación, se le pedirá que establezca una nueva contraseña de root. Para acceder a su base de datos, puede hacerlo con “root” como nombre de usuario y la contraseña que acaba de configurar.

Podemos ser mucho más eficientes, así que vayamos a cloud-init y automaticemos lo que acabamos de hacer manualmente.

Instalación usando Cloud-Init

Cloud-init es una herramienta para configurar una instancia de nube utilizando un archivo de configuración predefinido como modelo. Esto no solo automatiza el proceso de configuración, sino que también ayuda cuando se trata de clústeres y recuperación ante desastres.

Con la guía de instalación manual en mente, ahora podemos crear la configuración de inicio de nube para automatizar el proceso y replicarlo en muchas máquinas.

Para indicar que es una configuración de inicio de nube, la primera línea se ve así:

#cloud-config

Cloud-init proporciona opciones para controlar si los paquetes deben actualizarse y actualizarse inicialmente. Para asegurarnos de que estamos trabajando con lo último y lo mejor, los configuramos como verdaderos:

package_update: true
package_upgrade: true

El servidor web apache2 y algunos otros paquetes necesarios se pueden instalar de inmediato y podemos decirle a cloud-init que los instale con el modulo de paquetes: 

  - software-properties-common
  - wget
  - curl
  - apache2

El resto de la instalación se realizará en el módulo runcmd. Es una lista simple de comandos que se ejecutarán en la etapa “config” de inicio . Para instalar PHP, podemos usar los mismos comandos que usamos en 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

Configurar MySQL / MariaDB es un poco diferente. Primero tenemos que instalarlo:

apt install mariadb-server mariadb-client -y

Debido a que no podemos usar el instalador mysql_secure_installation en este caso, tenemos que establecer la contraseña usando la configuración de inicio de nube. No queremos que se almacene una contraseña en este archivo, así que simplemente creemos una aleatoria y guárdela en un archivo en el servidor (/home/mysql_access.txt) para que podamos acceder a ella mediante SSH:

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

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

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

Ahora volvamos a cargar las tablas de concesión para asegurarnos de que los cambios sean efectivos:

mysqladmin reload

Si ahora combinamos todas estas configuraciones, obtenemos una configuración de inicio de nube completa que se puede usar para crear nuevas instancias con la pila LAMP instalada y configurada:

#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

Los beneficios de usar Cloud-Init

Con este archivo de configuración, ha creado un solo archivo que se puede usar para replicar esta configuración en varias instancias.

¿Necesita otro sitio web construido sobre LAMP? Simplemente ponga en marcha una nueva máquina y estará listo para implementar su nuevo proyecto.

¿Pasó algo malo y se cayó una instancia? No hay problema, con esta configuración de Cloud-Init puede crear una nueva instancia rápidamente con toda su configuración ya aplicada.

Se trata de la replicación y la recuperación ante desastres: ya no necesita instalar nuevas instancias manualmente, porque con esta configuración ha creado un modelo que se puede usar al crear nuevas instancias; esto significa menos trabajo para usted y un flujo de trabajo mucho más eficiente.