IBM Cloud Docs
Aplicación web de PHP en una pila LAMP en VPC

Aplicación web de PHP en una pila LAMP en VPC

Esta guía de aprendizaje puede incurrir en costes. Utilice Estimador de costes para generar una estimación del coste basada en el uso previsto.

Este tutorial le guiará a través de la creación de un servidor virtual Ubuntu Linux con servidor web Apache, base de datos MySQL y scripting PHP en IBM Cloud Infraestructura de Nube Privada Virtual(VPC ). Esta combinación de software -más comúnmente denominada pila LAMP- se utiliza a menudo para ofrecer sitios y aplicaciones web. Con IBM Cloud VPC desplegará rápidamente la pila LAMP y si lo desea, añada el registro y la supervisión. Para experimentar el servidor LAMP en acción, también instalará y configurará el sistema de gestión de contenidos gratuito y de código abierto WordPress.

Objetivos

  • Suministrar una instancia de servidor virtual (VSI) en una VPC.
  • Instalar el software más reciente de Apache, MySQL y PHP.
  • Alojar un sitio web o blog mediante la instalación y configuración de WordPress.
  • Configurar el registro y la supervisión para detectar interrupciones y supervisar si hay rendimiento lento (opcional).
  • Redimensionar la VSI (opcional).

de la arquitectura*Esquema de la arquitectura del

  1. El usuario final accede al servidor LAMP que se ejecuta en una VPC utilizando un navegador web.
  2. La VSI está configurada para utilizar datos de un volumen de almacenamiento de bloque cifrado (opcional).

Antes de empezar

Esta guía de aprendizaje requiere:

  • Una IBM Cloud ,
  • CLI de IBM Cloud,
    • plugin de IBM Cloud VPC (vpc-infrastructure),
  • terraform para utilizar la infraestructura como código para suministrar recursos,
  • jq para consultar archivos JSON,
  • git para clonar el repositorio de código fuente,

Encontrará instrucciones para descargar e instalar estas herramientas para su entorno operativo en la guía Introducción a los tutoriales de soluciones. Para evitar la instalación de estas herramientas puede utilizar el Cloud Shell.

Creación de servicios

En esta sección, aprovisionará una VPC, una subred, un grupo de seguridad y una instancia de servidor virtual (VSI) utilizando IBM Cloud Shell y la CLI de IBM Cloud. Los VSI a menudo se ocupan de los picos en la demanda después de los cuales pueden suspenderse o apagarse para que el entorno de nube se ajuste perfectamente a las necesidades de la infraestructura.

Si prefiere utilizar una plataforma de Terraform para generar estos recursos, puede utilizar la plantilla que está disponible aquí: https://github.com/IBM-Cloud/vpc-tutorials/tree/master/vpc-lamp y siga las instrucciones del README.md. Esta plantilla también se puede utilizar en Schematics.

  1. Cuando haya iniciado sesión en su cuenta deIBM Cloud, inicie la IBM Cloud Shell.
  2. En el shell, se inicia sesión automáticamente en una de las regiones IBM Cloud, puede cambiar a una región diferente si lo desea ejecutando el siguiente comando:
    ibmcloud target -r <region-name> -g <resource-group>
    

Crear claves SSH

  1. En VPC se utiliza una clave SSH para el acceso de administrador a una VSI en lugar de una contraseña. Cree una clave SSH ejecutando el mandato siguiente y acepte los valores predeterminados cuando se le solicite. Para más información sobre las claves SSH, consulte los documentos Claves SSH.

    ssh-keygen -t rsa -b 4096
    

    El mandato anterior genera dos archivos dentro del directorio ~/.ssh: id_rsa e id_rsa.pub. Su sesión de Cloud Shell es de corta duración, todos los archivos que se creen dentro de IBM Cloud Shell deben guardarse en una ubicación segura para su futura reutilización. Existe una opción de descarga y carga de archivo en Cloud Shell en la sección superior derecha de la pantalla.

    Si tiene una clave SSH existente que desea reutilizar, puede cargarla en su sesión de Cloud Shell en su lugar.

  2. Añada la clave SSH a la cuenta.

    SSHKEY_ID=$(ibmcloud is key-create sshkey-lamp-tutorial @$HOME/.ssh/id_rsa.pub --json | jq -r '.id')
    

Crear VPC, subredes y grupos de seguridad

  1. Crear una VPC. Para obtener más información, consulte la documentación sobre cómo crear una VPC en la consola o la CLI.

    VPC_ID=$(ibmcloud is vpc-create vpc-lamp-tutorial --json | jq -r '.id')
    
  2. Cree la subred para la VPC.

    SUBNET_ID=$(ibmcloud is subnet-create subnet-lamp-1 $VPC_ID --zone $(ibmcloud target --output json | jq -r '.region.name')-1 --ipv4-address-count 256 --json | jq -r '.id')
    
  3. Cree el grupo de seguridad para la VPC.

    SG_ID=$(ibmcloud is security-group-create sg-lamp-1 $VPC_ID --json | jq -r '.id')
    
  4. Añada una regla para limitar la entrada al puerto SSH 22.

    ibmcloud is security-group-rule-add $SG_ID inbound tcp --port-min 22 --port-max 22 --json
    

    Puede restringir el acceso al puerto SSH a un subconjunto de direcciones, utilice --remote <dirección IP o CIDR> en el comando anterior para limitar quién puede acceder a este servidor, es decir. ibmcloud is security-group-rule-add $SG_ID inbound tcp --remote YOUR_IP_ADDRESS --port-min 22 --port-max 22 --json

  5. Añada una regla para limitar la entrada al puerto HTTP 80.

    ibmcloud is security-group-rule-add $SG_ID inbound tcp --port-min 80 --port-max 80 --json
    

    También puede restringir el acceso al puerto HTTP a un subconjunto de direcciones, utilice --remote <dirección IP o CIDR> en el comando anterior para limitar quién puede acceder a este servidor, por ejemplo ibmcloud is security-group-rule-add $SG_ID inbound tcp --remote YOUR_IP_ADDRESS --port-min 80 --port-max 80 --json

  6. Añada una regla para permitir la salida a todos; esto es necesario para instalar software, se puede inhabilitar o eliminar más adelante.

    ibmcloud is security-group-rule-add $SG_ID outbound all --json
    

Crear instancia de servidor virtual

  1. IBM Cloud actualiza periódicamente la imagen de Ubuntu con el último software, obtenga el ID de imagen para el último Ubuntu 20.x ejecutando el siguiente mandato.
    IMAGE_ID=$(ibmcloud is images --json | jq -r '.[] | select (.name=="ibm-ubuntu-22-04-1-minimal-amd64-3") | .id')
    
  2. Crear instancia de servidor virtual
    NIC_ID=$(ibmcloud is instance-create vsi-lamp-1 $VPC_ID $(ibmcloud target --output json | jq -r '.region.name')-1 cx2-2x4 $SUBNET_ID --image-id $IMAGE_ID --key-ids $SSHKEY_ID --security-group-ids $SG_ID --json | jq -r '.primary_network_interface.id')
    
  3. Reserve una IP flotante
    FLOATING_IP=$(ibmcloud is floating-ip-reserve fip-lamp-1 --nic-id $NIC_ID --json | jq -r '.address')
    
  4. Conéctese al servidor con SSH, tenga en cuenta que puede tardar un minuto para que el servidor recién creado sea accesible a través de SSH.
    ssh root@$FLOATING_IP
    
    Deberá conocer la IP flotante para acceder al servidor virtual a través del navegador. Puesto que se ha capturado anteriormente en una variable de shell, puede ejecutar el mandato siguiente para obtener la dirección IP flotante echo $FLOATING_IP o ejecutando ibmcloud is floating-ips --json y buscando el nombre utilizado para crear la IP flotante fip-lamp-1 en el resultado. También puede encontrar la dirección IP flotante del servidor desde la consola web.

Instalar Apache, MySQL y PHP

En esta sección, ejecutará mandatos para actualizar los orígenes de los paquetes Ubuntu e instalar Apache, MySQL y PHP con la versión más reciente.

Cuando el servidor se arranca por primera vez, es posible que ya esté ejecutando actualizaciones del sistema y le bloquee la ejecución de los mandatos siguientes; puede comprobar el estado de las actualizaciones del sistema ejecutando ps aux | grep -i apt y esperar a que la tarea de actualizaciones del sistema automatizado complete o interrumpa la tarea.

  1. Inhabilite la modalidad interactiva durante las actualizaciones
    export DEBIAN_FRONTEND=noninteractive
    
  2. Actualice paquetes
    apt update
    
  3. Instala Apache
    apt install apache2 -y
    
  4. Instale MySQL
    apt install mysql-server -y
    
  5. Instale PHP
    apt install php libapache2-mod-php php-mysql php-common php-cli -y
    

Verificación de la instalación y de la configuración

En esta sección, verificará que Apache, MySQL y PHP están actualizados y en ejecución en la imagen de Ubuntu. También implementará los valores de seguridad recomendados para MySQL.

  1. Verifique Ubuntu abriendo la dirección IP flotante en el navegador. Debería ver la página de bienvenida de Ubuntu.
    Verificar Ubuntu
    Verificar Ubuntu
  2. Revise las versiones de Apache, MySQL y PHP instaladas con los mandatos siguientes.
    apache2 -v
    
    mysql -V
    
    php -v
    
  3. Abra una ventana mysql.
    mysql
    
  4. Ejecute los mandatos siguientes sustituyendo la contraseña por yourPassword.
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourPassword';
    
  5. Salga de mysql.
    exit
    
  6. Ejecute el script siguiente para proteger la base de datos MySQL. Elija las opciones que mejor se ajusten a sus preferencias o simplemente pulse la tecla INTRO para pasar rápidamente por la configuración.
    mysql_secure_installation
    
  7. Además, puede crear rápidamente una página de información PHP con el siguiente comando.
    echo "<?php phpinfo(); ?>" > /var/www/html/info.php
    
  8. Vea la página de información de PHP que ha creado: abra un navegador y vaya a http://{FloatingIPAddress}/info.php. Sustituya la dirección IP flotante del VSI. Se parecerá a la siguiente imagen.

Información de PHP
Información de PHP

Instalación y configuración de WordPress

Empiece a probar su pila LAMP instalando una aplicación. En los siguientes pasos se instala la plataforma WordPress de código abierto, que se suele utilizar para crear sitios web y blogs. Para más información y ajustes para la instalación de producción, consulte la documentación de WordPress.

  1. Ejecute el mandato siguiente para instalar WordPress.
    apt install wordpress -y
    
  2. Configure WordPress para que utilice MySQL y PHP. Ejecute el mandato siguiente para abrir un editor de texto y crear el archivo /etc/wordpress/config-localhost.php.
    sensible-editor /etc/wordpress/config-localhost.php
    
  3. Copie las líneas siguientes en el archivo, sustituyendo yourPassword por la contraseña de la base de datos MySQL y dejando los otros valores sin cambios. Guarde y salga del archivo.
    <?php
    define('DB_NAME', 'wordpress');
    define('DB_USER', 'wordpress');
    define('DB_PASSWORD', 'yourPassword');
    define('DB_HOST', 'localhost');
    define('WP_CONTENT_DIR', '/usr/share/wordpress/wp-content');
    ?>
    
  4. Abra una solicitud de mysql y proporcione la contraseña.
    mysql -u root -p
    
  5. Ejecute los siguientes comandos sustituyendo la contraseña de su base de datos por yourPassword y dejando los demás valores sin modificar.
    CREATE DATABASE wordpress;
    
    CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'yourPassword';
    
    GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON wordpress.* TO 'wordpress'@'localhost';
    
    FLUSH PRIVILEGES;
    
  6. Salga de mysql.
    exit
    
  7. Mueva la instalación de WordPress a la raíz del documento del servidor web.
    ln -s /usr/share/wordpress /var/www/html/wordpress
    
    mv /etc/wordpress/config-localhost.php /etc/wordpress/config-default.php
    
  8. Complete la configuración de WordPress y publique en la plataforma. Abra un navegador y vaya a http://{FloatingIPAddress}/wordpress/wp-admin. Sustituya la dirección IP flotante de la instancia. Debería ser similar a la siguiente imagen.
    WordPress en funcionamiento
    Sitio de WordPress en funcionamiento

Configuración del dominio

Para utilizar un nombre de dominio existente con el servidor LAMP, actualice el registro A para que apunte a la dirección IP flotante del VSI.

Supervisión de servidor y gestión de registros

Para garantizar la disponibilidad del servidor y la mejor experiencia de usuario, la supervisión debe estar habilitada en cada servidor de producción. Hay varias opciones disponibles para supervisar el VSI y capturar registros en una ubicación central para su análisis.

Supervisión del servidor

Puede supervisar la CPU, el volumen, la memoria y el uso de la red de las instancias de VSI después de configurar una instancia del servicio IBM Cloud Monitoring. Si desea configurar el servicio de supervisión, siga los pasos descritos en la documentación de Supervisión de un host Linux.

Registro del servidor

Puede crear una instancia IBM Cloud Logs para gestionar registros de sistemas y aplicaciones en IBM Cloud.

IBM Cloud Logs ofrece a los administradores, a los equipos de DevOps y a los desarrolladores características avanzadas para filtrar, buscar y hacer un seguimiento de datos de registro, definir alertas y diseñar vistas personalizadas para supervisar registros de aplicaciones y sistemas

Siga las instrucciones descritas en la sección Gestión del agente de registro para Linux

Configuración de un volumen de datos cifrados de Key-Own-Key (BYOK) (opcional)

El VSI se ha creado con un volumen de arranque cifrado gestionado por el proveedor de 100 GB, sin embargo si suprime esa VSI todos los datos que desee guardar deberán moverse antes de suprimir la VSI. Una alternativa es crear un volumen de datos que puede persistir incluso si la VSI se suprime y adjunta a una nueva VSI. También puede cifrar el volumen con su propia clave. Si ese es el resultado deseado, siga los pasos que se indican a continuación para crear un volumen de datos y adjuntarlo a la VSI.

  1. Cree un archivo de configuración de volumen de datos.

    VOLUME_ID=$(ibmcloud is volume-create volume-lamp-1 10iops-tier $(ibmcloud target --output json | jq -r '.region.name')-1 --capacity 100 --json | jq -r '.id')
    

    En VPC también tiene la opción de utilizar una clave de cifrado gestionada por el cliente. Para almacenar sus propias claves de cifrado, puede utilizar uno de los dos servicios disponibles: (1) Un servicio FIPS 140-2 Nivel 3 IBM Key Protect. Consulte el tema Suministro del servicio de IBM Key Protect en la documentación. (2) Un servicio FIPS 140-2 de Nivel 4 IBM Cloud Hyper Protect Crypto Services, consulte el tema Cómo empezar con IBM Cloud Hyper Protect Crypto Services en la documentación. Al crear el volumen puede especificar el parámetro --encryption-key con el CRN en la clave de cifrado que desea utilizar.

  2. Capture el ID del VSI que ha creado anteriormente listando todas las instancias y filtrando por el nombre de instancia:

    VSI_ID=$(ibmcloud is instances --json | jq -r '.[] | select(.name == "vsi-lamp-1") | .id')
    
  3. Adjunte el volumen de datos al VSI existente.

    ibmcloud is instance-volume-attachment-add attachment-data-1 $VSI_ID $VOLUME_ID --auto-delete false --json
    
  4. Conéctese al servidor con SSH.

    ssh root@$FLOATING_IP
    
  5. Configure el volumen de datos recién creados en la VSI; ejecute las líneas siguientes de una en una.

    new_bsv=$(echo $(parted -l 2>&1) | awk 'NR==1{print $2}' | sed 's/:$//')
    parted $new_bsv mklabel gpt
    parted -a opt $new_bsv mkpart primary ext4 0% 100%
    new_part=${new_bsv}1
    mkfs.ext4 -L lamp-data ${new_part}
    mkdir /data
    mount ${new_part} /data
    echo "${new_part} /data ext4 defaults,relatime 0 0" | tee -a /etc/fstab
    mount -a
    

Configurar Apache para que utilice el nuevo sistema de archivos de datos

  1. Detenga el servicio Apache
    service apache2 stop
    
  2. Mover el directorio de Apache de /var a /data
    mv /var/www /data/
    
  3. Cree un enlace a la nueva ubicación
    ln -s /data/www /var/www
    
  4. Inicie el servicio Apache
    service apache2 start
    

Configurar MySQL para que utilice el nuevo sistema de archivos de datos

  1. Detenga el servicio MySQL
    service mysql stop
    
  2. Mueva el directorio de MySQL de /var a /data
    mkdir /data/lib
    
    mv /var/lib/mysql /data/lib/
    
  3. Cree un enlace a la nueva ubicación
    ln -s /data/lib/mysql /var/lib/mysql
    
  4. Añade un alias de la nueva ubicación a AppArmor, de lo contrario AppArmor bloqueará el acceso.
    echo "alias /var/lib/mysql/ -> /data/lib/mysql/," >> /etc/apparmor.d/tunables/alias
    
  5. Reinicie el servicio AppArmor
    systemctl restart apparmor
    
  6. Inicie el servicio MySQL
    service mysql start
    
  7. Abra un navegador y vaya a http://{FloatingIPAddress}/wordpress. Sustituya la dirección IP flotante de la instancia. Debe ser capaz de acceder a la página de WordPress tal como la tenía antes de añadir el nuevo volumen de datos.

Redimensionar la VSI (opcional)

La VSI se ha creado mediante uno de los perfiles más pequeños disponibles en VPC, es decir, 2 vCPU y 4GiB RAM. Esto es posible según los requisitos de uso para aumentar o disminuir la cantidad de vCPU y de RAM disponibles, consulte la sección Redimensionamiento de una instancia de servidor virtual.

  1. Capture el ID del VSI que ha creado anteriormente listando todas las instancias y filtrando por el nombre de instancia:

    VSI_ID=$(ibmcloud is instances --json | jq -r '.[] | select(.name == "vsi-lamp-1") | .id')
    
  2. Detenga la instancia de .

    ibmcloud is instance-stop $VSI_ID
    
  3. Redimensione la instancia.

    ibmcloud is instance-update $VSI_ID --profile cx2-4x8
    

    Puede obtener una lista de perfiles alternativos emitiendo el mandato siguiente ibmcloud is instance-profiles; sin embargo, fíjese en las restricciones de redimensionamiento según los perfiles actual/destino en el tema Redimensionamiento de una instancia de servidor virtual.

  4. Inicie la instancia.

    ibmcloud is instance-start $VSI_ID
    
  5. Es posible que tenga que esperar un par de minutos mientras la VSI se coloca en un host adecuado y se inicia. Abra un navegador y vaya a http://{FloatingIPAddress}/wordpress. Sustituya la dirección IP flotante de la instancia. Debe ser capaz de acceder a la página de WordPress tal como la tenía antes del redimensionamiento.

Eliminación de recursos

  1. En la consola de VPC, pulse IP flotantes, en la dirección IP de sus VSI, en el menú de acciones, seleccione Release. Confirme que desea liberar la dirección IP.
  2. A continuación, vaya a Instancias de servidor virtual, Suprimir la instancia.
  3. Una vez eliminadas las VSI, vaya a Subredes. Suprima la subred.
  4. Después de que se hayan suprimido las subredes, vaya al separador VPC y suprima la VPC.
  5. Si ha creado el volumen de datos opcional y ya no lo necesita, vaya al separador Bloquear volúmenes de almacenamiento y suprima el volumen.

Si utiliza la consola, es posible que tenga que renovar el navegador para ver información de estado actualizada después de suprimir un recurso.

En función del recurso, es posible que no se suprima de inmediato sino que se retenga (durante 7 días de forma predeterminada). Puede reclamar el recurso suprimiéndolo de forma permanente o lo puede restaurar dentro del periodo de retención. Consulte este documento sobre cómo utilizar una reclamación de recurso.