Installar LEMP en Cent Os7 y Ubuntu Server 18.04

LEMP es el acrónimo usado para describir un sistema de infraestructura de internet que usa las siguientes herramientas:

  • Linux, el sistema operativo.
  • NGINX, el servidor web.
  • MySQL/MariaDB, el gestor de bases de datos.
  • PHP-fpm, los lenguajes de programación.

Instalar en Cent Os 7

NGINX

Antes de instalar nginx debemos tener instalado el repositorio epel

# yum install epel-release

Instalación del servicio LEMP

Instalacion de paquetes en RedHat / CentOS

# yum install nginx

Configurar para que el servicio arranque al inicio del equipo.

Una vez que esté instalado, puede iniciar Nginx con el siguiente comando:

# systemctl start nginx

Luego es habilitar el servicio de Nginx

# systemctl enable nginx

MySQL/MariaDB

Instalación del servicio mysql:

# yum install mariadb-server   

Configuración para que el servicio arranque al inicio del equipo:

# systemctl enable mariadb 

Configuración para que el servicio arranque al inicio del equipo:

# systemctl start mariadb

Se Realiza una instalacion segura de MySQL:

# mysql_secure_installation
Enter current password for root (enter for none): <-- ENTER (Al tratarse de una configuracion nueva el pass esta en blanco)
Set root password? [Y/n] <-- Y
New password: <-- fill in your desired MySQL root password
Re-enter new password: <-- confirm that password
Remove anonymous users? [Y/n] <-- Y
Disallow root login remotely? [Y/n] <-- Y
Remove test database and access to it? [Y/n] <-- Y
Reload privilege tables now? [Y/n] <-- Y

Para probar la terminal de mysql, ingresaremos el siguiente comando:

# mysql -u root -p

Instalación de PHP & FastCGI

Modulo de PHP en apache

Habilitar EPEL

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

Installar utils si no esta instalado

yum install yum-utils

Poner el repositorio de php7.2

yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum-config-manager --enable remi-php72

y ahora instalamos php

# yum install php

Instalacion del soporte de MySQL y PHP:

# yum install -y php-mysql php-gd php-imap php-ldap php-mbstring php-odbc php-pear php-xml php-xmlrpc php-ldap

PHP Procesos FastCGI (FPM) NOTA: Esto es si queremos que funcione con los módulos de FPM de lo contrario no es necesario para el lemp

Instalar php-fpm

# yum install php php-mysql php-fpm

Una vez instalado con todo y los complementos el php-fpm, abriremos el archivo de configuracion

# vi /etc/php.ini

Después procederemos a remplazar el “1” de la siguiente linea en el archivo por “0” y descomentarlo:

cgi.fix_pathinfo=0

A continuación, abra el archivo de configuración php-fpm www.conf:

# vi /etc/php-fpm.d/www.conf

Buscaremos la línea que especifica el “listen” y la cambiaremos por la siguiente:

listen = /var/run/php-fpm/php-fpm.sock

A continuación, encontrará las líneas que marcan la listen.ownere listen.groupy las descomentaremos. Deberían verse así:

listen.owner = nginx
listen.group = nginx

Por último, encontrar las líneas que marcan la user y group se cambiaran sus valores por “nginx”:

user = nginx
group = nginx

Ahora, solo tenemos que iniciar nuestro procesador PHP-fpm escribiendo:

# systemctl start php-fpm

Luego, habilitar php-fpm para que comience en el arranque:

# systemctl enable php-fpm

Configurar Nginx para procesar páginas PHP

Editaremos el archivo conf del nginx por bloque servidor con el siguiente comando:

vi /etc/nginx/conf.d/default.conf

A continuación se realizaran los siguientes cambios al archivo .conf:

server {
   listen       80;
   server_name  server_domain_name_or_IP;
   # note that these lines are originally from the "location /" block
   root   /usr/share/nginx/html;
   index index.php index.html index.htm;
   location / {
       try_files $uri $uri/ =404;
   }
   error_page 404 /404.html;
   error_page 500 502 503 504 /50x.html;
   location = /50x.html {
       root /usr/share/nginx/html;
   }
  location ~ [^/]\.php(/|$) {
  fastcgi_split_path_info ^(.+\.php)(/.+)$;
  fastcgi_index index.php;
  fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
  include fastcgi_params;
  fastcgi_param PATH_INFO $fastcgi_path_info;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
 
}

Reinicie Nginx para realizar los cambios necesarios:

# systemctl restart nginx

Añadir los servicios al Firewall

Añadimos el servicio de http

# firewall-cmd --zone=public --permanent --add-service=http

Añadimos el puerto 80/tcp

# firewall-cmd --zone=public --permanent --add-port=80/tcp

Recargamos el servicio de firewall

# firewall-cmd --reload

Reiniciar el servicio de Nginx para que se vea reflejado:

# systemctl restart nginx

 

Instalar en Ubuntu Server 18.04

Instalamos NginX

# apt install nginx

Nginx una ves instalado se ejecuta solo por lo cual podemos verificar que ya este corriendo en la ip del equipo que tenemos

 

Instalaremos ahora MySQL

# apt install mysql-server

Ahora configuramos MySQL con este comando

mysql_secure_installation

Ahora instalaremos PHP 7.2

Primero asegurate de tener instalado el siguiente paquete

# apt-get install software-properties-common

Luego agregamos el repositorio

# add-apt-repository ppa:ondrej/php

hacemos un update

# apt-get update

E instalamos php 7.2

# apt-get install php7.2

Ahora tenemos nuestros componentes de PHP instalados, pero necesitamos hacer un ligero cambio de configuración para hacer nuestra configuración más segura.

Abra el archivo de configuración principal php-fpm con privilegios de root

vi /etc/php/7.2/fpm/php.ini

Lo que estamos buscando en este archivo es el parámetro que establece cgi.fix_pathinfo. Esto se comentará con un punto y coma (;) y se establecerá en “1” de forma predeterminada.

Cambiamos estas dos condiciones descomentando la línea y estableciéndola en “0” como esto:

cgi.fix_pathinfo=0

Guarde y cierre el archivo cuando haya finalizado.

Ahora, solo necesitamos reiniciar el procesador de PHP escribiendo:

# systemctl restart php7.2-fpm

hora, tenemos todos los componentes necesarios instalados. El único cambio de configuración que todavía necesitamos es decirle a Nginx que use nuestro procesador PHP para contenido dinámico.

Hacemos esto en el bloque del servidor (los bloques del servidor son similares a los hosts virtuales de Apache). Abra el archivo de configuración del bloque del servidor Nginx predeterminado escribiendo:

 # vi /etc/nginx/sites-available/default

Actualmente, con los comentarios eliminados, el archivo del bloque del servidor predeterminado de Nginx se ve así:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;

    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }
}

Reemplazamos eso por la siguiente linea

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name server_domain_or_IP;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    location ~ /\.ht { 
        deny all;`.
    }
}

Cuando haya realizado los cambios anteriores, puede guardar y cerrar el archivo.

Pruebe su archivo de configuración de errores de sintaxis escribiendo:

# nginx -t

Si se informa de algún error, vuelva a revisar su archivo antes de continuar.

Cuando esté listo, recargue Nginx para realizar los cambios necesarios:

# systemctl reload nginx

EMP debe estar completamente configurado. Podemos probarlo para validar que Nginx puede manejar correctamente archivos .php en nuestro procesador PHP.

Podemos hacerlo creando un archivo PHP de prueba en nuestra carpeta raíz. Abra un nuevo archivo llamado info.php dentro de la carpeta raíz en el editor de texto:

vi /var/www/html/info.php

Escriba o pegue las siguientes líneas en el nuevo archivo. Este es un código PHP válido que devolverá información sobre nuestro servidor:

<?php
phpinfo();

Cuando haya terminado, guarde y cierre el archivo.

Ahora, puede visitar esta página en su navegador de Internet visitando el nombre de dominio de su servidor o la dirección IP pública seguida por /info.php:

http://dominio_del_servidor_o_IP/info.php

Usted debe ver una página web que ha sido generada por PHP con información sobre su servidor

NGINX

Nginx, pronunciado “engine x” es un servidor web que ha ganado una popularidad increíble entre los sitios web más visitados en internet.

No es justo pensar en nginx como sólo un servidor web.  Puede hacer mucho más, puede servir para el tráfico HTTP y HTTPS, el proxy para aplicaciones Rails, PHP o Node, se ejecutan como un software equilibrador de carga, caché http, ssl de descarga o incluso actuar como un servidor de correo SMTP, POP3 e IMAP.

La mayoría de la gente piensa que nginx es un reemplazo de Apache. Eso  es verdad, cuando se mira lo que los sitios web más grandes en Internet están utilizando hoy en día. Según Netcraft, a partir de en marzo de 2015, nginx es utilizado por el 21% de los 1 millones de sitios web con mayor actividad en Internet. Nginx es todas estas cosas, pero en el fondo es un HTTP enrutador, una parte viva de la pila web que ofrece a los desarrolladores la flexibilidad de crear y desplegar aplicaciones web más fácil que nunca.

Debido a que sus raíces yacen en la optimización del rendimiento bajo escala, NGINX a menudo supera a otros populares servidores web en pruebas de rendimiento (Benchmarks), especialmente en situaciones con contenido estático y/o un elevado número de solicitudes concurrentes.

¿Cómo Funciona NGINX?

NGINX está diseñado para ofrecer un bajo uso de memoria y alta concurrencia.

En lugar de crear nuevos procesos para cada solicitud web, NGINX usa un enfoque asincrónico basado en eventos donde las solicitudes se manejan en un solo hilo (single-thread). Por otro lado, una alternativa como el servidor web Apache crearía un hilo separado para cada proceso.

Con NGINX, un proceso maestro puede controlar múltiples procesos de trabajo. El proceso maestro mantiene los procesos de trabajo, y son estos lo que hacen el procesamiento real.

Debido a que NGINX es asíncrono, cada solicitud se ejecuta por el proceso de trabajo de forma concurrente sin bloquear otras solicitudes.

Stephen Corona. (2015). getting started. En nginx A PRACTICAL GUIDE TO HIGH PERFORMANCE(11). United States of America: O’Reilly Media, Inc.

kinsta. (2018). ¿Qué Es NGINX y Cómo Funciona?. 12/12/2018, de kinsta Sitio web: https://kinsta.com/es/base-de-conocimiento/que-es-nginx/

GNU/Linux

Linux es un sistema operativo: un conjunto de programas que le permiten interactuar con su ordenador y ejecutar otros programas.

Un sistema operativo consiste en varios programas fundamentales que necesita el ordenador para poder comunicar y recibir instrucciones de los usuarios; tales como leer y escribir datos en el disco duro, cintas, e impresoras; controlar el uso de la memoria; y ejecutar otros programas. La parte más importante de un sistema operativo es el núcleo. En un sistema GNU/Linux, Linux es el núcleo. El resto del sistema consiste en otros programas, muchos de los cuales fueron escritos por o para el proyecto GNU. Dado que el núcleo de Linux en sí mismo no forma un sistema operativo funcional, preferimos utilizar el término “GNU/Linux” para referirnos a los sistemas que la mayor parte de las personas llaman de manera informal “Linux”.

Linux está modelado como un sistema operativo tipo Unix. Desde sus comienzos, Linux se diseñó para que fuera un sistema multi tarea y multi usuario. Estos hechos son suficientes para diferenciar a Linux de otros sistemas operativos más conocidos. Sin embargo, Linux es más diferente de lo que pueda imaginar. Nadie es dueño de Linux, a diferencia de otros sistemas operativos. Gran parte de su desarrollo lo realizan voluntarios de forma altruista.

En 1984 comenzó el desarrollo de lo que más tarde sería GNU/Linux cuando la Free Software Foundation (Fundación de software libre, N. del t.) comenzó a desarrollar un sistema operativo libre de tipo Unix, llamado GNU.

El proyecto GNU ha desarrollado un conjunto de herramientas de software libre para ser utilizados por Unix™ y sistemas operativos tipo Unix como Linux. Estas herramientas permiten a los usuarios desarrollar tareas que van desde las mundanas (como copiar o eliminar ficheros del sistema) a las arcanas (como escribir y compilar programas o hacer edición sofisticada en una gran variedad de formatos de documento).

Aunque hay muchos grupos e individuos que han contribuido a Linux, la Free Software Foundation ha sido quien más ha contribuido. No sólo creó la mayor parte de las herramientas que se utilizan en Linux sino también la filosofía y comunidad que hizo que Linux fuera posible.

 

MySQL/MariaDB

MySQL

Es un sistema de gestión de base de datos relacional o SGBD. Este gestor de base de datos en multihilo y multiusuario, lo que le permite ser utilizado por varias personas al mismo tiempo, e incluso, realizar varias consultas a la vez, lo que lo hace sumamente versátil.
Utilidad de MySQL

Como comentábamos anteriormente este gestor de base de datos es muy utilizado en desarrollo web, ya que permite a los desarrolladores y diseñadores, realizar cambios en sus sitios de manera simple, con tan sólo cambiar un archivo, evitando tener que modificar todo el código web. Esto se debe a que MySQL, trabaja con un sistema centralizado de gestión de datos, que permite realizar cambios en un solo archivo y que se ejecuta en toda la estructura de datos que se comparte en la red. Además, permite incluir noticias e información rápidamente en un sitio web, utilizando un simple formulario, sin tener que tocar el código del website.

MariaDB

MariaDB es un sistema de base de datos que proviene de MySQL, pero con licencia GPL, desarrollado por Michael Widenius, fundador de MySQL y la comunidad de desarrolladores de software libre.

MariaDB se trata de una “sustituto” de MySQL que corre bajo una licencia GPL. Por lo tanto, incorpora todas las mejoras de la versión de MySQL en la que se encuentre e incluye diferentes mejoras:

Incorpora nuevos motores de almacenamiento mucho más eficientes que son Aria y XtraDB, los cuales han sido desarrollados para ser los sustitutos de MyISAM e InnoDB respectivamente. Estos permiten ejecutar consultas más complejas y almacenarlas en caché y no en disco duro.
Aparte de incluir los sustitutos de MyISAM e InnoDB también incorpora nuevos motores de almacenamiento:
FederatedX : Reemplaza a Federated que incorpora mysql.
OQGRAPH: Nos permite que nuestro sistema de base de datos soporte el uso de jerarquías de estructuras y graphs complejos.
SphinxSE : Nos permite usar searchd bajo Sphinx para permitir búsquedas de texto.
Cassandra Storage Engine: Nos permite acceder a un clúster de datos. Cabe destacar que por defecto no viene instalado y deberá activarse por separado.
También incorpora mejoras de rendimiento y versiones de seguridad más rápidas y más transparentes.
Es de código libre y cuenta con el soporte de la comunidad de desarrolladores, pero también cuenta con el soporte de Oracle.

Apache HTTP Server

El servidor Apache HTTP , también llamado Apache, es un servidor web HTTP de código abierto para plataformas Unix-like (BSD, GNU/Linux, etc.), Windows, Macintosh y otras, que implementa el protocolo HTTP/1.1 y la noción de sitio virtual.

Este nos permite configurar un Hosting Virtual basado en IPs o en nombres, es decir, tener varios sitios web en un mismo equipo (por ejemplo: nombreweb1.com, nombreweb2.com,….) o como indicábamos, establecer distintos niveles de control de acceso a la información incluyendo el soporte a cifrado SSL utilizando protocolo seguro HTTPS.

¿Como funciona Apache HTTPS server?

Aunque llamamos a Apache un servidor web, no es un servidor físico, sino un software que se ejecuta en un servidor. Su trabajo es establecer una conexión entre un servidor y los navegadores de los visitantes del sitio web (Firefox, Google Chrome, Safari, etc.) mientras envían archivos entre ellos (estructura cliente-servidor). Apache es un software multiplataforma, por lo cual funciona tanto en servidores Unix como en Windows.

Cuando un visitante quiere cargar una página de tu sitio web, por ejemplo la página de inicio o tu página “Acerca de nosotros”, su navegador le envía una solicitud a tu servidor y Apache le devuelve una respuesta con todos los archivos solicitados (texto, imágenes, etc. ) El servidor y el cliente se comunican a través del protocolo HTTP y Apache es responsable de garantizar una comunicación fluida y segura entre las dos máquinas.

¿Que es un Servidor web?

Un servidor Web es un programa que utiliza el protocolo de transferencia de hiper texto, HTTP (Hypertext Transfer Protocol), para servir los archivos que forman páginas Web a los usuarios, en respuesta a sus solicitudes, que son reenviados por los clientes HTTP de sus computadoras. Las computadoras y los dispositivos dedicados también pueden denominarse servidores Web.

El servidor web es el encargado de aceptar las peticiones de páginas (o recursos en general) que provienen de los visitantes que acceden a nuestro sitio web y gestionar su entrega o denegación, de acuerdo a las políticas de seguridad establecidas. Esto, que puede parecer simple, implica muchas facetas y funcionalidades que debe cubrir, como pueden ser:

  • Atender de manera eficiente, ya que puede recibir un gran número de peticiones HTTP, incluyendo una ejecución multitarea ya que pueden darse peticiones simultáneas. Cualquier petición compleja (por ejemplo con acceso a base de datos) dejaría colapsado el servicio.
  • Restricciones de acceso a los ficheros que no se quieran ‘exponer’, gestión de autentificaciones de usuarios o filtrado de peticiones según el origen de éstas.
  • Manejar los errores por páginas no encontradas, informando al visitante y/o redirigiendo a páginas predeterminadas.
  • Gestión de la información a transmitir en función de su formato e informar adecuadamente al navegador que está solicitando dicho recurso.
  • Gestión de logs, es decir almacenar las peticiones recibidas, errores que se han producido y en general toda aquella información que puede ser registrada y analizada posteriormente para obtener las estadísticas de acceso al sitio web.