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

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.

 

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.

 

 

Como crear un LAMP

Infraestructura LAMP

Instalación de sistema de infraestructura de internet LAMP.

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

  • Linux, el sistema operativo; En algunos casos también se refiere a LDAP.
  • Apache, el servidor web.
  • MySQL/MariaDB, el gestor de bases de datos.
  • Perl, PHP, o Python, los lenguajes de programación.

Apache

Para poder instalar Apache seguiremos estos pasos:

# yum install httpd

Configurar para que el servicio arranque al inicio del equipo

# chkconfig httpd on           (CentOS 6)
# systemctl enable httpd       (CentOS 7)

Iniciar el servicio de httpd

# service httpd start          (CentOS 6)
# systemctl start httpd        (CentOS 7)

MySQL (C6) o MariaDB (C7)

Instalación del servicio mysql:

# yum install mysql-server     (Centos 6)
# yum install mariadb-server   (Centos 7)

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

# chkconfig mysqld on          (CentOS 6)
# systemctl enable mariadb     (CentOS 7)

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

# service mysqld start         (CentOS 6)
# systemctl start mariadb      (CentOS 7)

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

Modulo de PHP en apache

# yum install php

Instalación 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

Reiniciar el servicio de Apache para que se vea reflejado:

# service httpd restart     (Centos6)
# systemctl restart httpd   (Centos7)

Cortafuegos

Iptables (Centos6)

Editar el archivo de las IPTABLES para poder visualizar la pagina

 # vi /etc/sysconfig/iptables

Agregar la siguiente linea

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEP
Sugerencia: ponerla debajo de la que abre el puerto 22

De este modo:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

Por ultimo reiniciar el servicio de las IPTABLES:

# service iptables restart

Firewall (Centos7)

Agregar el servicio http

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

Y ya hemos creado nuestro LAMP.

Ahora para poder ver PHP en nuestro servidor debemos de hacer los siguiente:

Creamos un nuevo archivo

sudo nano /var/www/html/info.php

y agregamos lo siguiente

<?php
phpinfo();
?>

guardamos y salimos y reiniciamos nuestro servidor para que se vean los cambios

sudo service httpd restart

ahora accedemos a http://12.34.56.789/info.php (la ip depende de tu equipo asi que asegura cambiarla) y nos mostrara la pagina con las caracteristicas de php

Documentación en GNU/Linux

Las distintas distribuciones comerciales de GNU/Linux poseen documentación en formato impreso. Pero el mismo no cubre la totalidad de funcionalidades y programas del SO, sino solamente lo que corresponde a su implementación particular, quedando en manos de los usuarios el adquirir documentación más específica. Sin embargo, existe tanto en la misma distribución como en Internet infinidad de documentación que puede ser consultada.

Existen numerosos proyectos que sirven para documentar cada aspecto del sistema y sus aplicaciones. Uno de los proyectos más conocidos es el LDP (Proyecto de Documentación de Linux), que se alza como una entidad centralizadora de documentación. Esto es bueno para tener un solo lugar en donde buscar toda la información necesaria.

GNU/Linux cuenta con gran cantidad de documentación en varios formatos y uno de los desarrollados por el LDP son los HOWTO que están disponibles muchas veces con la misma distribución o a través de Internet. En muchos casos estos HOWTO fueron escritos por los mismos autores que los programas y en otros por personas que se han visto en un problema real en una empresa, universidad u otra institución. También existen lo que se denomina MINI-HOWTO, que son guías rápidas para la pronta implementación de un servicio o un programa, sin detenerse en aspectos que no se utilizarán o se utilizarán rara vez. Se pueden encontrar, tanto los HOWTO como los MINI-HOWTO, en distintos formatos como en ASCII, PDF, PS, HTML, DocBook, etc. En español existe un mirror de documentación del proyecto LUCAS (Lin​ux en castellano), en el cual se podrán encontrar la mayoría de ellos.

Uno de las formas de documentación más populares y simples de acceder es el uso de las man-pages. Estas páginas de manual vienen en todas las distribuciones y cubren con notable detalle el uso de comandos o programas. Además los programas nuevos que se instalen traerán en su mayoría man-pages que se podrán acceder de igual manera que a las propias del sistema. Se accede a ellas con el comando:

Existen varias opciones que se pueden utilizar y se pueden buscar tecleando:

con lo que aparecerán las páginas de manual del comando man.

Muchas veces las páginas de manual indican un número luego del comando Ej. ls. Esto indica que la información del comando “ls” puede encontrarse en la sección 1. Esta forma se remonta a cuando las man-pages de los sistemas Unix venían en libros impresos que se dividían en secciones donde se abordaba el tema de un comando de acuerdo a su aplicación. También se puede contar con las páginas de INFO de cada comando, utilizando el comando

donde se encontrara información menos detallada que en las man-pages pero de pronta utilización.

Un lugar donde buscar cuando se instale un nuevo programa es los archivos README. Estos explican todo el proceso de instalación así como también los requerimientos necesarios. Además cada programa cuenta con documentación propia que se podrá encontrar en los directorios /usr/doc y /usr/share/doc, pudiendo haber otros según el programa y/o la distribución. Las fuentes del kernel también poseen una gran cantidad de información sobre aspectos generales del SO y su funcionamiento, siendo una muy buena fuente de información al momento de meter mano al sistema, abundando los comentarios técnicos, dirigidos por los distintos desarrolladores a sus pares. Existen además muchísimas guías que cubren aspectos muy importantes y de alta complejidad del SO y sus aplicaciones. Cabe destacar que mucha de esta información se encuentra en español pero existe un número mucho mayor que esta en inglés. Proyectos como Lucas tratan de que se revierta esto, aportando con su trabajo un aporte invaluable para toda la comunidad hispanohablante. Por todo lo expuesto hasta aquí, puede decirse que GNU/Linux es uno de los sistemas con mayor cantidad de documentación que existe, tanto libremente como en forma de libros impresos por editoriales de renombre en el campo técnico. No quedan excusas para no informarse.

Conociendo la terminal de Linux

Terminal de GNU/Linux. Todos los sistemas operativos derivados de Unix, GNU/Linux tienen un intérprete de órdenes o terminal (en inglés mejor conocido como shell) que hace de interfaz entre el usuario y el sistema operativo.

Un terminal es una forma de acceder al sistema sin utilizar la interfaz gráfica, es decir, realizar todo tipo de tareas en formato texto. La forma de utilizar el sistema de este modo es mediante órdenes.

El terminal muestra en pantalla un indicador de línea de órdenes (en inglés se utiliza la palabra prompt que literalmente traduciría “prontuario” pero se puede definir como ayuda visual o palabra que ayuda) esperando que el usuario introduzca una orden. Este indicador finaliza generalmente por un caracter $ o con #.

Cuando abrimos la terminal se puede observar que nos muestra un texto similar al siguiente:

user@linux: ~ $

Donde

user:  Muestra el nombre del usuario el cual esta haciendo uso de la consola

@:  Significa “en”

linux:  Indica el nombre de la máquina a la cual estamos conectados

~:  Indica la ruta en la cual nos encontramos, en este caso ruta de inicio predeterminada

$: Indicador para comenzar a escribir nuevas órdenes o comandos como usuario normal

Por ejemplo:

juan@fedora:~ $

Significa que el usuario “Juan” se encuentra “en” la maquina “fedora” en la carpeta raíz “~” y se encuentra como usuario normal “$”

También tenemos otro caso el cual es el siguiente:

root@linux: home#

En el cual

root: es el usuario el cual esta usando la consola

@:  Significa “en”

linux:  Indica el nombre de la máquina a la cual estamos conectados

~:  Indica la ruta en la cual nos encontramos, en este caso ruta de inicio predeterminada

#: Este signo distingue que estamos usando la terminal en modo administrador

Esto significa que el usuario “root” se encuentra “en” la maquina “fedora” en la carpeta  “home” y se encuentra como usuario root “#”

Los signos “$” y “#” son caracteres los cuales  en este caso el signo “$” significa que estamos usando la terminal como un usuario normal, por lo cual no podemos realizar tareas de administrador. En el caso de “#” significa que estamos usando la terminal como administrador y podemos realizar cualquier cambio al sistema sin problema pero recuerda “Un gran poder conlleva una gran responsabilidad”.

Imagen ilustrativa de una terminal de Linux

Arquitectura Cliente/Servidor

¿QUÉ ES UNA ARQUITECTURA?

Una arquitectura es un entramado de componentes funcionales que aprovechando diferentes estándares, convenciones, reglas y procesos, permite integrar una amplia gama de productos y servicios informáticos, de manera que pueden ser utilizados eficazmente dentro de la organización.

Debemos señalar que para seleccionar el modelo de una arquitectura, hay que partir del contexto tecnológico y organizativo del momento y, que la arquitectura Cliente/Servidor requiere una determinada especialización de cada uno de los diferentes componentes que la integran.

¿QUÉ ES UN CLIENTE?

Es el que inicia un requerimiento de servicio. El requerimiento inicial puede convertirse en múltiples requerimientos de trabajo a través de redes LAN o WAN. La ubicación de los datos o de las aplicaciones es totalmente transparente para el cliente.

¿QUÉ ES UN SERVIDOR?

Es cualquier recurso de cómputo dedicado a responder a los requerimientos del cliente. Los servidores pueden estar conectados a los clientes a través de redes LANs o WANs, para proveer de múltiples servicios a los clientes y ciudadanos tales como impresión, acceso a bases de datos, fax, procesamiento de imágenes, etc.