En este artículo veremos cómo instalar LAMP en CentOS 8 / CentOS Stream 8 paso a paso, de modo que tendrás disponible esta pila de Apache, PHP y MariaDB/MySQL para las aplicaciones que lo requieran en tu servidor o VPS CentOS.
Antes de instalar LAMP en CentOS 8
Para seguir esta guía de instalación LAMP en CentOS 8 / CentOS Stream 8 necesitas partir de la siguiente base:
- Un sistema CentOS 8 / CentOS Stream 8 actualizado.
- Acceso a terminal de comandos con un usuario con permisos de sudo o el mismo usuario root.
- Conexión a Internet.
Una pila o entorno LAMP se basa en un sistema Linux con servidor web Apache, el lenguaje del lado de servidor PHP y motor de bases de datos MySQL o MariaDB. En esta guía instalaremos estos componentes, pero tienes guías específicas para cada uno de ellos en este mismo sitio.
Cómo instalar LAMP en CentOS 8
Para instalar una pila LAMP en CentOS 8 usaremos los paquetes disponibles en los repositorios de la distribución y, opcionalmente, en repositorios auxiliares, por lo que la primera tarea es actualizar el sistema:
~$ sudo yum update -y
En cuanto a PHP, la versión incluida en la distribución es la 7.2, que a día de hoy puede resultar un tanto obsoleta, por lo que puede ser interesante configurar un repositorio para las versiones más recientes.
PHP 7.3, 7.4, 8.0 y 8.1
Para poder trabajar con estas versiones instalamos el repositorio Remi:
~$ sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
Actualizamos las listas de paquetes:
~$ sudo yum update
Desactivamos la versión de PHP de CentOS 8:
~$ sudo yum module disable -y composer glpi php
Y activamos la versión que nos interese (la 8.0, en este caso):
~$ sudo yum module enable -y composer glpi php:remi-8.0
Como estarás imaginando, puedes usar el parámetro remi-7.4 ó remi-8.1 para otras versiones.
Instalación del servicio web y PHP
Empezaremos instalando los paquetes comunes correspondientes al servidor web Apache, PHP y la extensión de PHP para conexión a bases de datos. Instalaremos estos paquetes con yum:
~$ sudo yum install -y httpd php php-mysqlnd
Se crean los servicios httpd.service y php-fpm.service que no están iniciados ni habilitados para iniciar automáticamente junto a CentOS 8.
Iniciaremos y habilitaremos los servicios para su inicio automático con el sistema:
~$ sudo systemctl enable --now php-fpm httpd
Por otro lado, tienes dos posibilidades a la hora de instalar la pila LAMP, según si prefieres usar MySQL o MariaDB como servicio de bases de datos.
Instalación del motor de base de datos
Si prefieres usar MySQL Server 8 instala el paquete mysql-server:
~$ sudo yum install -y mysql-server
El servicio que se crea es mysqld.service, procedemos a iniciarlo y habilitarlo:
~$ sudo systemctl enable --now mysqld
En cambio, si quieres optar por usar MariaDB Server 10.3 instala el paquete mariadb-server:
~$ sudo yum install -y mariadb-server
Se crea el servicio mariadb.service, que tendremos que arrancar y habilitar:
~$ sudo systemctl enable --now mariadb
Configurando el firewall de CentOS 8
Si quieres que el servidor web sea accesible desde la red debes proporcionar una regla o excepción para el firewall:
~$ sudo firewall-cmd --permanent --add-service={http,https}
Si sólo quieres ofrecer el servicio HTTP entonces puedes especificar unicamente ese protocolo:
~$ sudo firewall-cmd --permanent --add-service=http
Hay que recargar la configuración del firewall para aplicar los cambios:
~$ sudo firewall-cmd --reload
Probando el servicio
Para probar la integración del servidor web con PHP, crearemos un script de prueba en este lenguaje:
~$ sudo nano /var/www/html/info.php
Y pondremos este contenido:
<?php phpinfo();
Accedemos a través de un navegador, indicando la dirección del servidor y la ruta /info.php (en este ejemplo, http://centos8.local.lan/info.php).
Obviamente, se mostrará información de la versión instalada.
Cómo configurar la pila LAMP en CentOS 8
Los servicios ya están configurados por defecto, pero es necesario realizar unos mínimos y rápidos ajustes.
Servicio web
El servidor web funciona bien con los valores por defecto, pero para ajustes avanzados puede interesarte nuestra guía de instalación de Apache en CentOS 8.
Configurar PHP
El archivo principal de configuración es php.ini que debemos editar:
~$ sudo nano /etc/php.ini
Buscamos la directiva date.timezone:
... [Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone ;date.timezone = ...
Está desactivada, hay que darle el valor de la zona horaria que nos interese:
... date.timezone = Europe/Madrid ...
Puedes consultar los valores posibles para esta directiva en http://php.net/date.timezone.
Si tu servidor LAMP CentOS 8 es para producción y funcionamiento expuesto al público hemos terminado, pero si es para desarrollo necesitas configurar algunos valores de tratamiento de errores.
Busca las siguientes directivas:
... error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT ... display_errors = Off ... display_startup_errors = Off ...
Y cambia los valores adecuados para desarrollo:
... error_reporting = E_ALL ... display_errors = On ... display_startup_errors = On ...
Tras hacer cualquier cambio en la configuración del archivo php.ini es necesario recargar el servicio php-fpm:
~$ sudo systemctl reload php-fpm
Configurar MariaDB/MySQL
Cualquiera de los dos servicios de bases de datos crea una cuenta de root sin contraseña, lo que es un problema de seguridad enorme si no se soluciona.
Puedes pasar el script interactivo mysql_secure_installation que, entre otras cosas, permitirá crear una contraseña para root.
Pero además permite borrar bases de datos de pruebas, usuarios anónimos y eliminar el acceso remoto a root.
El script se lanza igual para ambos sistemas de bases de datos:
~$ sudo mysql_secure_installation
Pero tiene algunas particularidades para cada sistema.
En MySQL:
Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD COMPONENT can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD component? Press y|Y for Yes, any other key for No: n Please set the password for root here. New password: Re-enter new password: By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) : y Success. Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y Success. By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y - Dropping test database... Success. - Removing privileges on test database... Success. Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y Success. All done!
En MariaDB:
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. Set root password? [Y/n] y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success! By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] y ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
Conclusión
Ahora que sabes cómo instalar una pila o stack LAMP en CentOS 8 / CentOS Stream 8 ya puedes dar soporte a aplicaciones y CMS que lo requieren, o realizar tus propios desarrollos web avanzados.
Si tienes dudas o preguntas, alguna sugerencia, etc. puedes dejar un comentario.
¡Apoya esta entrada!
¿Te ha servido esta guía de instalación LAMP en CentOS 8 / CentOS Stream 8 para montar tu servidor? Si es así y deseas agradecérnoslo, cualquier mínima contribución ayuda al mantenimiento de este sitio y elaboración de nuevos tutoriales y guías.
Puedes ayudarnos dejando tan sólo 1 $ de propina deshaciéndote de la calderilla que no usas en PayPal:
O, si te sientes especialmente generoso, puedes invitarnos a un café:
¡Gracias!
¡Gracias totales mi sooooo!
¡De nada, Brayan!
Muchísimas gracias, tus tutoriales son fantásticos.
Son muy útiles, he aprendido mucho sobre LAMP con tu entrada.
Un saludo.
¡De nada, Ander!
Hola. Excelente aporte, me gustaría saber qué hay que hacer cuando tienes activado SELinux en CentOS 8, así lo requerimos por seguridad institucional. Al probar el script de php.info no se despliega y por ende no se puede ejecutar la instalación desde web, por lo que creo son permisos de SELinux, si tienes la oportunidad de publicar los pasos que se deben ejecutar de SELinux en tu aporte sería altamente agradecido. El Firewall está correcto y habilitados los servicios http y https.
Saludos y gracias de antemano.
¡Hola! En esta guía de instalación de la pila LAMP en CentOS 8, SELinux permanece activado todo el tiempo. ¿En qué ruta has instalado el script info.php? Tal vez se trate de un error en el script, por lo que te recomendaría la guía de instalación de PHP en CentOS 8 donde se explica cómo activar la depuración de errores.
Excelente
Gracias, Luis
Muy bueno, gracias.
¡¡Excelente ayuda!!