En este tutorial vamos a hacer una instalación (en este artículo no se tratará la configuración de los servicios) paso a paso de un entorno Linux con Apache, MySQL y PHP.
Instalación de requisitos previos
Seguramente penséis que es una tarea bastante simple, pero si queremos un entorno “actualizado” con versiones tales como Apache 2.4.X PHP7.X y MySQL 5.7 o superior, debemos de habilitar varios repositorios, y han de ser en este riguroso orden:
- Developer Tools: Este repositorio es oficial, y nos ofrece un conjunto de paquetes que necesitarán los programas que instalaremos después. Para instalarlo:
sudo yum --setopt=group_package_types=mandatory,default,optional group install "Development Tools"
Luego actualizamos los repositorios con el comando:
sudo yum update
Software collections: Este repositorio oficial nos ofrece las últimas versiones estables disponibles. Para instalarlo:
sudo yum install centos-release-scl
- Volvemos a actualizar los repositorios, y procedemos a instalar los paquetes necesarios:
NOTA: Es conveniente instalar el paquete wget para descargar manualmente librerías o paquetes que nos puedan dar error y tengamos que instalarlas a parte. Para instalar wget ejecutamos el comando.
sudo yum install wget
Y para localizar los paquetes que necesitamos, podemos servirnos de esta web.
Instalación de Apache
Habiendo instalado todos los requistitos previos, procederemos a instalar el servidor Apache. El paquete que instalaremos será apache24 que es la última versión en la fecha de redacción de este tutorial. A su vez, hay que mencionar que el nombre de los paquetes es distinto, y por tanto, también cambia el nombre del servicio. Para instalar el servidor web debemos ejecutar los siguientes comandos:
sudo yum install httpd24
#Permitimos que se detecte como aplicación ubicada en otra ubicación el sistema de archivos
scl enable httpd24 bash
El nombre del servicio es httpd24-httpd, con lo que para operar con el servicio usaremos los siguientes comandos:
- Arranque:
systemctl start httpd24-httpd
- Parada:
systemctl stop httpd24-httpd
- Estado de servicio:
systemctl status httpd24-httpd
- Arranque al inicio del sistema:
systemctl enable httpd24-httpd
Finalizada la instalación, debemos agregar la excepción al firewall y la excepción a selinux. La ruta de instalación es /opt/rh/httpd24 y los subdirectorios y archivos quedan tal que así:
- Expeción para Selinux (hay que cambiar hmtl por el directorio que en el cual se aloja el sitio web):
semanage fcontext -a -t httpd_sys_content_t ".../html(/.*)?"
semanage fcontext -a -t httpd_cache_t ".../html/cache(/.*)?"
semanage fcontext -a -t httpd_log_t ".../html/logs(/.*)?"
restorecon -Rv /html
#Aplica las directivas creadas
Estas directivas permiten la lectura, escritura. Si es un entorno de desarrollo, Selinux no va a ser necesario, podemos cambiar la directiva pertinente en el archivo /etc/selinux/config y cambiar los valores a
SELINUX=disabled
Debemos reiniciar para aplicar los cambios.
- Excepción para el Firewall:
sudo firewall-cmd --zone=public --add-service=http
sudo firewall-cmd --list-all
sudo firewall-cmd --zone=public --permanent --add-service=http
Una vez arrancado el servicio y comprobado el estado del servicio, pasamos a probar en local si el navegador funciona, y en caso afirmativo continuamos el tutorial.
Instalación de PHP 7
En esta parte del tutorial llegamos a un punto en el que varían los paquetes a instalar, dado que no todos necesitamos los mismos módulos de PHP.
Si seleccionamos el paquete rh-php71 nos instalará todas las extensiones de PHP. Si queremos instalarlas individualmente, debemos de instalar el paquete rh-php71-fpm y el resto de módulos a parte. Para el paquete completo:
sudo yum install rh-php71
sudo scl enable rh-php71 bash
La ruta en la que se instala este paquete es /opt/rh/rh-php71/root, y los subirectorios quedan de la siguiente manera:
A continuación, configuramos el fichero /opt/rh/httpd24/root/etc/httpd/conf.d/php.conf añadiendo las siguientes líneas:
Evitamos que se vean archivos .user.ini:
<Files ".user.ini"> Require all denied </Files> AddType text/html .php
Añadimos un index.php a la lista de archivos que serán mostrados como índice:
DirectoryIndex index.php
Habilitamos la autenticación en las cabeceras http
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
Forzamos la ejecución de scripts al backend
<FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch>
Una vez guardados los cambios, procedemos a reiniciar apache, e inciamos el servicio de PHP. Para gestionar los servicios:
- Arranque
sudo systemctl start rh-php77-php-fpm
- Parada
sudo systemctl stop rh-php77-php-fpm
- Estado del servicio
sudo systemctl status rh-php77-php-fpm
- Arranque al servicio del sistema
sudo systemctl enable rh-php77-php-fpm
Tras comprobar que el servicio funciona bien y hacer un script en php de prueba, pasamos a la última parte del tutorial.
Instalación de MySQL
En este punto, hay 3 opciones posibles para instalar:
- MariaDB, que es un fork libre de MySQL compatible al 99%.
- MySQL 5.7, que es una versión estable madura.
- MySQL 8.0, que es la nueva versión de MySQL.
La versión de 8.0 no está en los repositorios de las software collections, así que voy a centrarme en esta versión, por que para las alternativas anteriores basta con seguir los pasos que nos indiquen en la web.
Primero nos descargamos con wget el paquete pertinente:
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-community-server-8.0.12-1.el7.x86_64.rpm
Después lo instalamos (esta vez se usan las rutas por defecto):
rpm -ivh mysql-community-server-8.0.12-1.el7.x86_64.rpm
Por último, arrancamos el servicio mysql, para gestionar los servicios de mysql usaremos los siguientes comandos:
- Arranque
sudo systemctl start mysqld
- Parada
sudo systemctl stop mysqld
- Estado del servicio
sudo systemctl status mysqld
- Arranque al inicio del sistema
sudo systemctl enable mysqld
Arrancado el servicio, obtenemos la contraseña temporal que MySql ha generado con el comando
sudo grep 'temporary password' /var/log/mysqld.log
Paso opcional: Securizar la instalación con el comando
sudo mysql_secure_installation
- Este comando nos abrirá un asistente y nos irá guiando.
Bibliografía
- https://www.serverlab.ca/tutorials/linux/web-servers-linux/configuring-selinux-policies-for-apache-web-servers/
- https://www.softwarecollections.org/en/
- https://developers.redhat.com/blog/2017/10/25/php-configuration-tips/
Fuente: lignux