
Introducción
Apache, MySQL y PHP (pila LAMP) son un conjunto de aplicaciones de código abierto que permiten el desarrollo y la entrega de aplicaciones web dinámicas en un servidor. Linux se ejecuta como sistema operativo para implementar las aplicaciones, Apache funciona como servidor web, MySQL como backend de la base de datos y PHP procesa el contenido de las aplicaciones web dinámicas en el servidor.
Este artículo explica cómo instalar la pila LAMP en Ubuntu 24.04 y configurar el servidor para entregar aplicaciones web utilizando la pila.
Prerrequisitos
Antes de empezar:
Implementar una instancia de Ubuntu 24.04 en Vultr.
Acceda al servidor usando SSH como un usuario no root con privilegios de sudo.
Configure un nuevo registro A para su dominio que apunte a la dirección IP del servidor .
Instalar Apache
La última versión de Apache está disponible en los repositorios APT predeterminados de Ubuntu 24.04. Siga los pasos a continuación para actualizar el índice de paquetes predeterminado e instalar la última versión del servidor web Apache en su servidor.
Actualizar el índice de paquetes del servidor.
consola$ sudo apt update
Instalar Apache.
consola$ sudo apt install apache2 -y
Inicie el servicio Apache.
consola$ sudo systemctl start apache2
Habilite el servicio Apache para que se inicie automáticamente en el momento del arranque.
consola$ sudo systemctl habilitar apache2
Verifique que el servicio del servidor Apache esté ejecutándose.
consola$ sudo systemctl status apache2
Producción:
apache2.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/apache2.service; enabled; preset: enabled) Active: active (running) since Wed 2024-06-12 06:50:21 UTC; 3 days ago Docs: https://httpd.apache.org/docs/2.4/ Process: 164186 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS) Main PID: 124430 (apache2) Tasks: 8 (limit: 4389) Memory: 18.3M (peak: 44.1M) CPU: 27.485s CGroup: /system.slice/apache2.service ├─124430 /usr/sbin/apache2 -k start ├─164195 /usr/sbin/apache2 -k start ├─164196 /usr/sbin/apache2 -k start ├─164199 /usr/sbin/apache2 -k start ├─164201 /usr/sbin/apache2 -k startPermitir conexiones al puerto HTTP
80a través de la configuración de firewall predeterminada.consola$ sudo ufw allow 80 /tcp
Acceda a la IP de su dominio o servidor mediante un navegador web como Chrome y verifique que se muestre la página web Apache predeterminada.
http://SERVER-IP
Instalar MySQL
MySQL funciona como el backend de la base de datos dentro de la pila LAMP y puede sustituirlo por MariaDB según sus necesidades. El paquete MySQL más reciente está disponible en los repositorios predeterminados de Ubuntu 24.04. Siga los pasos a continuación para instalar la última versión de MySQL en su servidor utilizando el gestor de paquetes APT predeterminado.
Instalar el paquete del servidor de base de datos MySQL.
consola$ sudo apt install -y servidor mysql
Habilite el servicio MySQL para que se inicie automáticamente en el momento del arranque.
consola$ sudo systemctl habilitar mysql
Inicie el servicio MySQL.
consola$ sudo systemctl start mysql
Ver el estado del servicio MySQL y verificar que esté ejecutándose.
consola$ sudo systemctl status mysql
Producción:
mysql.service - MySQL Community Server Loaded: loaded (/usr/lib/systemd/system/mysql.service; enabled; preset: enabled) Active: active (running) since Thu 2024-06-13 06:54:13 UTC; 2 days ago Process: 144075 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS) Main PID: 144083 (mysqld) Status: "Server is operational" Tasks: 38 (limit: 4389) Memory: 369.2M (peak: 382.6M) CPU: 36min 21.658s CGroup: /system.slice/mysql.service └─144083 /usr/sbin/mysqldSegún el
active (running)resultado de la salida anterior, el servidor de base de datos MySQL está activo y ejecutándose en su servidor.Ejecute el script de instalación segura de MySQL para deshabilitar los valores predeterminados inseguros y habilitar la autenticación en su servidor de base de datos.
consola$ sudo mysql_secure_installation
Responda a las siguientes opciones del servidor de base de datos MySQL cuando se le solicite:
VALIDATE PASSWORD: Ingrese Ypara habilitar las comprobaciones de fortaleza de contraseña en el servidor de base de datos.Password strength policy: Ingrese 2para habilitar el uso de contraseñas de múltiples caracteres en el servidor.Remove anonymous users:Ingrese Ypara eliminar usuarios anónimos del servidor de base de datos.Disallow root login remotely: Ingrese Ypara deshabilitar el acceso remoto alrootusuario de la base de datos.Remove test database: Ingrese Ypara eliminar la base de datos de prueba MySQL predeterminada en su servidor.Reload privileges tables now:Ingrese Ypara recargar las tablas de privilegios de MySQL y aplicar los cambios de configuración.
Su salida debería verse como la que se muestra a continuación cuando tenga éxito:
Success. All done!Inicie sesión en la consola MySQL como
rootusuario.consola$ sudo mysql
Modifique el
rootusuario de la base de datos para usar una nueva contraseña segura. ReemplácelaStrong@@password123con la contraseña que desee.SQLmysql > alter user 'root' @ 'localhost' IDENTIFICADO POR 'Strong@@password123' ;
Reemplazar
passwordcon una contraseña segura.Vacíe la tabla de privilegios de MySQL para aplicar los nuevos cambios de usuario.
SQLmysql > FLUSH PRIVILEGIOS ;
Salir de la consola MySQL.
SQLmysql > SALIR
Inicie sesión nuevamente en la consola MySQL como
rootusuario e ingrese la contraseña que estableció anteriormente cuando se le solicite.consola$ sudo mysql -u root -p
Crear una nueva base de datos de muestra
content_database.SQLmysql > CREAR base de datos content_database ;
Ver todas las bases de datos y verificar que la nueva base de datos esté disponible.
SQLmysql > MOSTRAR BASES DE DATOS ;
Producción:
+--------------------+ | Database | +--------------------+ | information_schema | | content_database | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.01 sec)Crea un nuevo usuario de MySQL, por ejemplo,
dbadmincon una contraseña segura. ReemplázalaStrong@@password123con la contraseña que desees.SQLmysql > CREAR USUARIO 'dbadmin' @ 'localhost' IDENTIFICADO POR 'Strong@@password123' ;
Otorgue al usuario privilegios completos sobre su base de datos de muestra
content_database.SQLmysql > CONCEDER TODOS LOS PRIVILEGIOS EN content_database . * A 'dbadmin' @ 'localhost' ;
Vacíe la tabla de privilegios de MySQL para aplicar los cambios.
SQLmysql > FLUSH PRIVILEGIOS ;
Salir del shell MySQL.
SQLmysql > SALIR
Instalar PHP y configurar PHP-FPM
PHP es un componente fundamental de la pila LAMP que procesa contenido dinámico y se integra con su servidor de bases de datos MySQL para leer o crear registros. PHP-FPM (Administrador de Procesos FastCGI) gestiona la conexión al servicio PHP y optimiza el rendimiento de la aplicación mediante grupos de procesos de trabajo. Siga los pasos a continuación para instalar la última versión de PHP y configurar PHP-FPM para habilitar procesos dinámicos de aplicaciones web en su servidor.
Instalar PHP y el módulo PHP-FPM.
consola$ sudo apt install -y php php-fpm
Instale extensiones PHP comunes en su servidor.
consola$ sudo apt install -y php-mysql php-opcache php-cli libapache2-mod-php
El comando anterior instala los siguientes módulos PHP:
php-mysql: Permite que PHP se conecte e interactúe con el servidor de base de datos MySQL.libapache2-mod-php:Permite que el servidor web Apache procese y ejecute scripts PHP.php-opcache:Permite el almacenamiento en caché de scripts PHP precompilados en la memoria para una ejecución más rápida.php-cli:Permite el acceso a PHP en la terminal de su servidor.
Vea la versión de PHP instalada en su servidor.
consola$ php -v
Producción:
PHP 8.3.6 (cli) (built: Jun 13 2024 15:23:20) (NTS) Copyright (c) The PHP Group Zend Engine v4.3.6, Copyright (c) Zend Technologies with Zend OPcache v8.3.6, Copyright (c), by Zend TechnologiesInicie el servicio PHP-FPM según la versión de PHP instalada en su servidor. Por ejemplo,
PHP 8.3.consola$ sudo systemctl start php8.3-fpm
Habilite PHP-FPM para que se inicie en el momento del arranque.
consola$ sudo systemctl habilitar php8.3-fpm
Vea el estado del servicio PHP-FPM y verifique que se esté ejecutando.
consola$ sudo systemctl status php8.3-fpm
Producción:
php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager Loaded: loaded (/usr/lib/systemd/system/php8.3-fpm.service; enabled; preset: enabled) Active: active (running) since Wed 2024-06-12 06:50:21 UTC; 3 days ago Docs: man:php-fpm8.3(8) Main PID: 124416 (php-fpm8.3) Status: "Processes active: 0, idle: 2, Requests: 15, slow: 0, Traffic: 0req/sec" Tasks: 3 (limit: 4389) Memory: 12.0M (peak: 12.4M) CPU: 31.204s CGroup: /system.slice/php8.3-fpm.service ├─124416 "php-fpm: master process (/etc/php/8.3/fpm/php-fpm.conf)" ├─124419 "php-fpm: pool www" └─124420 "php-fpm: pool www"
Configurar PHP-FPM
PHP-FPM garantiza un rendimiento óptimo de las aplicaciones PHP en su servidor mediante grupos de recursos que dependen de la memoria del servidor. Siga los pasos a continuación para configurar PHP-FPM para que funcione con el servidor web Apache y modificar la configuración predeterminada de los grupos de recursos para una gestión eficiente de los recursos.
Habilite los módulos Apache necesarios.
consola$ sudo a2enmod proxy_fcgi setenvif
El comando anterior habilita los siguientes módulos en su servidor web:
proxy_fcgi: Permite que Apache funcione como proxy con PHP-FPM.setenvif:Establece las variables de entorno necesarias para habilitar conexiones entre Apache y PHP-FPM.
Habilitar la configuración predeterminada de PHP-FPM.
consola$ sudo a2enconf php8.3-fpm
Reinicie el servidor web Apache para aplicar los cambios.
consola$ sudo systemctl restart apache2
Cambie al directorio de configuraciones del grupo PHP-FPM.
$ sudo cd /etc/php/8.3/fpm/pool.d/Abra la configuración del pool PHP-FPM predeterminado
www.conf.consola$ sudo nano /etc/php/8.3/fpm/pool.d/www.conf
Verifique que el nombre del grupo PHP-FPM predeterminado sea
www.este[www]Busque y verifique que las siguientes directivas estén configuradas
www-datapara permitir que PHP-FPM utilice el perfil de usuario del servidor web predeterminado.esteusuario = www-data grupo = www-data listen.propietario = www-data listen.grupo = www-data
Encuentre las siguientes configuraciones de pool y modifíquelas para adaptarlas a las necesidades de su servidor:
pm: Establece el administrador de procesos predeterminado. Este valordynamicpermite que los procesos secundarios de PHP se ajusten dinámicamente en el servidor.pm.start_serversDefine el número de procesos secundarios PHP que se crearán al iniciar. El valor predeterminado es2.pm.max_childrenEstablece el número máximo de procesos secundarios PHP que pueden estar activos simultáneamente. El valor predeterminado es5.pm.min_spare_serversEstablece el número mínimo de procesos secundarios PHP inactivos. El valor predeterminado es1.pm.max_spare_serversEspecifica el número máximo de procesos secundarios PHP inactivos. El valor predeterminado es3.pm.max_requests:Limita la cantidad de solicitudes que un proceso secundario PHP puede manejar antes de ser reciclado.
Guarde y cierre el archivo.
Reinicie el servicio PHP-FPM para aplicar los cambios de configuración.
consola$ sudo systemctl restart php8.3-fpm
Configurar Apache con PHP-FPM
El servidor web Apache utiliza el mod_proxy_fcgimódulo para comunicarse con PHP-FPM mediante el socket UNIX del servicio o el puerto TCP predeterminado, 9000según la configuración de su grupo. En los siguientes pasos, configure un nuevo host virtual Apache y conéctese al servicio PHP-FPM mediante el socket UNIX.
Eliminar los archivos de configuración del host virtual Apache predeterminados.
consola$ sudo rm -rf /etc/apache2/sites-enabled/000-default.conf && sudo rm -rf /etc/apache2/sites-available/000-default.conf
Cree un nuevo archivo de configuración de host virtual Apache. Por ejemplo,
app.example.com.conf.consola$ sudo nano /etc/apache2/sites-available/app.example.com.conf
Agregue las siguientes configuraciones al archivo. Reemplácelas
app.example.comcon su dominio actual.este<VirtualHost * : 80> ServerAdmin webmaster@app.example.com ServerName wapp.example.com DocumentRoot /var/www/app.example.com <Directorio /var/www/app.example.com> Opciones Índices FollowSymLinks AllowOverride All Requerir que todos estén permitidos </Directorio> <FilesMatch \.php$> SetHandler "proxy : unix:/var/run/php/php8.3-fpm.sock|fcgi://localhost/" </FilesMatch> Registro de errores ${APACHE_LOG_DIR}/app.example.com_error.log Registro personalizado ${APACHE_LOG_DIR}/app.example.com_access.log combinado </VirtualHost>
Guarde y cierre el archivo.
La configuración anterior crea un nuevo host virtual Apache que escucha las conexiones entrantes en el puerto HTTP predeterminado
80y sirve contenido web usando suapp.example.comdominio. A continuación, todas las solicitudes de archivos PHP se reenvían al proceso PHP-FPM mediante el/var/run/php/php8.3-fpm.socksocket UNIX. Dentro de la configuración:<VirtualHost *:80>: Permite que el perfil de host virtual escuche conexiones en el puerto80.<Directory /var/www/app.example.com>:Establece el directorio raíz web para entregar los archivos de la aplicación web.<FilesMatch \.php$>:Reenvía todas las solicitudes de archivos PHP al socket PHP-FPM/var/run/php/php8.3-fpm.sockutilizando el protocolo FastCGI.ErrorLog,CustomLog: Habilite rutas personalizadas para almacenar los registros de acceso y errores del host virtual respectivamente.
Habilite la nueva configuración del host virtual Apache.
consola$ sudo a2ensite app.example.com.conf
Pruebe la configuración de Apache para detectar errores de sintaxis.
consola$ sudo apache2ctl configtest
Producción:
Syntax OKCree el directorio raíz web del host virtual
/var/www/app.example.comdefinido en su configuración.consola$ sudo mkdir -p /var/www/app.example.com
Crea un nuevo archivo PHP de muestra
info.php.consola$ sudo nano /var/www/html/info.php
Añade el siguiente contenido al archivo.
php<?php phpinfo (); ?>
Guarde y cierre el archivo.
El código de aplicación anterior muestra información sobre la versión de PHP y los módulos instalados en su servidor cuando se accede a él en un navegador web.
Reinicie Apache para aplicar los cambios de configuración.
consola$ sudo systemctl restart apache2
Acceda a su dominio utilizando un navegador web como Chrome y agregue la
/info.phpruta para verificar que se muestre la información de su aplicación PHP.http://app.example.com/info.php
Proteger el servidor
El Firewall Simple (UFW) está disponible y activo en servidores Vultr Ubuntu 24.04 de forma predeterminada. El servidor web Apache entrega aplicaciones web dinámicas en su servidor mediante el puerto HTTP predeterminado, 80mientras que otros componentes de la pila LAMP utilizan puertos TCP internos, como el puerto MySQL 3306y el puerto PHP-FPM 9000. Siga las secciones a continuación para configurar el firewall predeterminado y permitir conexiones al puerto predeterminado del servidor web 80, así como para configurar certificados SSL de confianza para habilitar conexiones HTTPS en el puerto 443.
Configurar el firewall
Vea el estado del firewall predeterminado y verifique que esté activo.
consola$ sudo ufw status
Producción:
consolaEstado: activoVea los perfiles de aplicación UFW disponibles y verifique que el perfil Apache esté disponible.
consola$ sudo ufw lista de aplicaciones
Producción:
Apache Apache Full Apache Secure OpenSSHPermitir que el
Apache Fullperfil habilite conexiones HTTP y HTTPS en el servidor.consola$ sudo ufw allow "Apache completo"
Recargue las reglas del firewall para aplicar los cambios.
consola$ sudo ufw reload
Vea el estado de UFW y verifique que las reglas de conexión de Apache estén disponibles en la tabla de firewall.
consola$ sudo ufw status
Producción:
To Action From -- ------ ---- 1022/tcp ALLOW Anywhere Apache Full ALLOW Anywhere 1022/tcp (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6)
Generar certificados SSL Let's Encrypt confiables
Instale la herramienta cliente Certbot Let's Encrypt usando Snap.
consola$ sudo snap install certbot --classic
Solicita un nuevo certificado SSL para tu dominio. Reemplázalo
app.example.comcon tu dominio actual yadmin@example.comtu correo electrónico.consola$ sudo certbot --apache -d app.ejemplo.com -m admin@ejemplo.com --agree-tos
Producción:
Requesting a certificate for app.example.com Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/app.example.com/fullchain.pem Key is saved at: /etc/letsencrypt/live/app.example.com/privkey.pem This certificate expires on 2024-10-14. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for app.example.com to /etc/apache2/sites-available/000-default-le-ssl.conf Congratulations! You have successfully enabled HTTPS on https://app.example.comPruebe el proceso de renovación automática del certificado SSL de Certbot.
consola$ sudo certbot renew --dry-run
Reinicie el servidor web Apache para aplicar los cambios de configuración SSL.
consola$ sudo systemctl restart apache2
Pruebe la instalación de la pila LAMP
Siga los pasos a continuación para configurar una nueva tabla de muestra en su content_databasebase de datos MySQL existente para conectarse con su aplicación PHP y mostrar el mensaje Hello World! Greetings from Vultrcuando se acceda a ella en un navegador web.
Inicie sesión en la consola MySQL utilizando el usuario de base de datos de muestra
dbadminque creó anteriormente.consola$ mysql -u dbadmin -p
Ingrese la
dbadmincontraseña de usuario cuando se le solicite para acceder a la consola MySQL.Cambiar a la base de datos de muestra
content_database.SQLmysql > USO content_database ;
Cree una nueva tabla de muestra
messagescon dos columnascontent_idparacontentalmacenar sus datos.SQLmysql > CREAR TABLA SI NO EXISTE mensajes ( content_id INT AUTO_INCREMENT CLAVE PRIMARIA , content VARCHAR ( 255 ) NO NULO );
La consulta SQL anterior crea una nueva tabla con las siguientes especificaciones:
content_id:Contiene valores numéricos e incrementa automáticamente datos únicos en cada nueva fila.content:Contiene datos de contenido mixto con hasta255caracteres.
Insertar nuevos datos en la
messagestabla. Por ejemplo, añadir una nuevaHello World! Greetings from Vultrcadena a lacontentcolumna.SQLmysql > INSERT INTO messages ( content ) VALUES ( '¡Hola mundo! Saludos desde Vultr' );
Ver todos los datos de la tabla para verificar que la nueva cadena se haya agregado a la columna.
SQLmysql > SELECT * de mensajes ;
Producción:
+----+------------------------------------------+ | content_id | content | +------------+-----------------------------------+ | 1 | Hello World! Greetings from Vultr | +------------+-----------------------------------+ 1 row in set (0.00 sec)Salir de la consola MySQL.
SQLmysql > SALIR
Cree un nuevo archivo de aplicación PHP de muestra
setup.phpen su directorio raíz web/var/www/html/app.example.com.consola$ sudo nano /var/www/html/setup.php
Añade el siguiente contenido al archivo.
php<?php $nombre_de_host = "localhost" ; $nombre_de_usuario = "dbadmin" ; $contraseña = "Strong@@password123" ; $nombre_de_base_de_datos = "content_database" ; // Establecer conexión $conn = new mysqli ( $nombre de host , $nombre de usuario , $contraseña , $nombre de base de datos ); // Verificar la conexión si ( $conn -> connect_error ) { die ( "Error de conexión." . $conn -> connect_error ); } $sql = "SELECCIONAR contenido DE mensajes" ; $resultado = $conn -> consulta ( $sql ); if ( $resultado -> num_filas > 0 ) { $fila = $resultado -> fetch_assoc (); echo "" < h2 estilo = 'color: azul; alineación del texto: centro; margen inferior: 15px;' > " . htmlspecialchars( $fila["contenido"] ) . " </ h2 > "; } else { echo " < h1 > No se encontraron registros .</ h1 > "; } $conn->cerrar ();
Guarde y cierre el archivo.
El código de la aplicación PHP anterior se conecta a la base de datos MySQL
content_databasey muestra los datos de lacontentcolumna de lamessagestabla al acceder a ella. Si la base de datos MySQL no contiene registros,No records foundse muestra un mensaje oConnection Failed.si falla la conexión con el servidor de la base de datos.Otorgue al usuario Apache
www-dataprivilegios completos en su directorio raíz web.consola$ chown -R www-data:www-data /var/www/html/app.example.com/
Acceda a su dominio utilizando la
/setup.phpruta en su navegador web para verificar que su aplicación PHP muestra elHello World! Greetings from Vultrcontenido de la cadena de su base de datos MySQL.https://app.example.com/setup.php
Conclusión
Ha instalado y configurado Apache, MySQL y PHP (pila LAMP) en su servidor Ubuntu 24.04. Además, ha creado aplicaciones dinámicas de ejemplo para probar el acceso entre todos los componentes de la pila LAMP y ejecutar las aplicaciones de forma segura en su servidor. Para obtener más información y opciones de configuración sobre cada componente, visite la siguiente documentación oficial:
No hay comentarios:
Publicar un comentario