Instalación de LEMP (Linux, Nginx, MySQL/MariaDB, PHP/PHP-FPM y PhpMyAdmin) en Gentoo Linux

Gentoo es una de las distribuciones de Linux más rápidas debido a su orientación de construcción a partir de fuentes y proporciona, a través de su programa de gestión de software – Portage – ciertas herramientas necesarias para construir una plataforma completa para desarrolladores web que actúa y funciona muy rápido y, además, tiene un alto grado de personalización.

Install Nginx in Gentoo Linux

Este tema te guiará a través de un proceso de instalación paso a paso para construir una plataforma de entorno web completa con LEMP (Linux Nginx, MySQL/MariaDB, PHP-FPM/PhpMyadmin), y con la ayuda de las banderas USE proporcionadas por la Gestión de Paquetes Portage, que ofrecen un conjunto de funcionalidades de paquete en el proceso de compilación – módulos o configuraciones necesarias para una plataforma web, ajustarán de manera significativa las configuraciones del servidor.

Requisitos

  1. Instalación de Gentoo con un Perfil Reforzado para un servidor expuesto a Internet – Guía de Instalación de Gentoo.
  2. Red configurada con una dirección IP estática.

Paso 1: Instalar Servidor Web Nginx

1. Antes de intentar continuar con la instalación de Nginx, asegúrate de que tu NIC haya sido configurada con una Dirección IP Estática y de que las fuentes de Portage y tu sistema estén actualizadas.

$ sudo su -
# emerge --sync
# emerge --update --deep --with-bdeps=y @world
Update Gentoo Linux

2. Después de que finalice el proceso de actualización, procede con la instalación de Nginx eligiendo la configuración y módulos preferidos al imprimir las banderas USE de Nginx en el archivo make.conf de Portage. Primero lista los módulos de instalación predeterminados de Nginx ejecutando el siguiente comando.

# emerge -pv nginx

Para obtener información detallada de los módulos (indicadores USE para paquetes) usa el comando equery.

# equery uses nginx
List All Flag Modules

Luego instala Nginx con el siguiente comando.

# emerge --ask nginx
Install Nginx Web Server

Si necesitas módulos adicionales (WebDAV, fancyindex, GeoIP, etc.) además de los predeterminados con los que Nginx se compilará, añádelos en una sola línea en el archivo make.conf de Portage con la directiva NGINX_MODULES_HTTP, luego vuelve a compilar Nginx con los nuevos módulos.

# echo 'NGINX_MODULES_HTTP="dav auth_pam fancyindex geoip fastcgi uwsgi gzip rewrite"' >> /etc/portage/make.conf
# emerge --ask nginx
Compile Nginx for New Modules

3. Después de que Portage termine de instalar Nginx, inicia el demonio http y verifícalo dirigiendo tu navegador a http://localhost.

Verify Nginx Web Server

Paso 2: Instalar PHP

4. Para utilizar el lenguaje de programación web dinámica PHP con el servidor Nginx, instala PHP-FastCGI Process Manager (FPM) agregando fpm y otras extensiones importantes de PHP en los indicadores USE de Portage y asegúrate de eliminar la extensión de Apache.

# emerge -pv php
Install PHP in Gentoo
# equery uses php
PHP Extension Selection
# echo " dev-lang/php fpm cgi curl gd imap mysql mysqli pdo zip json xcache apc zlib zip truetype -apache2 " >> /etc/portage/package.use
# emerge --ask php

5. Antes de iniciar PHP-FPM, algunos cambios deben aplicarse al archivo de configuración del servicio. Abre el archivo de configuración de php-fpm y realiza los siguientes cambios.

# nano /etc/php/fpm-php5.5/php-fpm.conf

Encuentra y descomenta las siguientes directivas para que se vean así.

error_log = /var/log/php-fpm.log
listen = 127.0.0.1:9000    ## Here you can use any HTTP socket (IP-PORT combination ) you want  ##
pm.start_servers = 20

6. Después de editar el archivo de configuración de PHP-FPM, cambia los permisos del archivo de registro de PHP-FPM y inicia el servicio.

# chmod 755 /var/log/php-fpm.log
# /etc/init.d/php-fpm start

Incluso si el servicio PHP-FPM está iniciado, Nginx no puede comunicarse con la pasarela PHP, por lo que se necesitan hacer algunos cambios en los archivos de configuración de Nginx.

Paso 3: Editar las configuraciones de Nginx

7. El archivo de configuración de plantilla predeterminada de Nginx solo proporciona un socket HTTP básico para localhost. Para cambiar este comportamiento y habilitar Virtual Hosts, abre el archivo nginx.conf ubicado en la ruta /etc/nginx/ y realiza las siguientes configuraciones.

# nano /etc/nginx/nginx.conf

Localiza el primer bloque server que corresponde a localhost y escucha en la dirección IP 127.0.0.1 y comenta todas sus declaraciones para que se vean como en la captura de pantalla a continuación.

Disable Basic HTTP Configuration

No cierres el archivo todavía y ve al final y agrega la siguiente declaración antes de la última llave de cierre “ } “.

Include /etc/nginx/sites-enabled/*.conf;
Enable Nginx Virtual Host

8. A continuación, crea los directorios de Nginx sites-enabled y sites-available (para Virtual Hosts no utilizados) y archivos de configuración para localhost en los protocolos HTTP y HTTPS.

# mkdir /etc/nginx/sites-available
# mkdir /etc/nginx/sites-enabled

Crea el siguiente archivo de configuración para localhost.

# nano /etc/nginx/sites-available/localhost.conf

Agrega el siguiente contenido al archivo.

server {
               listen 80;
               server_name localhost;

               access_log /var/log/nginx/localhost_access_log main;
               error_log /var/log/nginx/localhost_error_log info;

               root /var/www/localhost/htdocs;

                location / {
                index index.html index.htm index.php;
                autoindex on;
                autoindex_exact_size off;
                autoindex_localtime on;

                                }

                         location ~ \.php$ {
                       # Test for non-existent scripts or throw a 404 error
                       # Without this line, nginx will blindly send any request ending in .php to php-fpm
                       try_files $uri =404;
                        include /etc/nginx/fastcgi.conf;
                       fastcgi_pass 127.0.0.1:9000;  ## Make sure the socket corresponds with PHP-FPM conf file
                        }
                }
Create Nginx Virtual Host Configuration

Para localhost con SSL, crea el siguiente archivo de configuración.

# nano /etc/nginx/sites-available/localhost-ssl.conf

Agrega el siguiente contenido al archivo.

server {
               listen 443 ssl;
               server_name localhost;

            ssl on;
               ssl_certificate /etc/ssl/nginx/nginx.pem;
               ssl_certificate_key /etc/ssl/nginx/nginx.key;

               access_log /var/log/nginx/localhost.ssl_access_log main;
               error_log /var/log/nginx/localhost.ssl_error_log info;

               root /var/www/localhost/htdocs;

                                location / {
                index index.html index.htm index.php;
                autoindex on;
                autoindex_exact_size off;
                autoindex_localtime on;
                                 }                                                

                      location ~ \.php$ {
                       # Test for non-existent scripts or throw a 404 error
                       # Without this line, nginx will blindly send any request ending in .php to php-fpm
                       try_files $uri =404;
                       include /etc/nginx/fastcgi.conf;
                       fastcgi_pass 127.0.0.1:9000;
                                }
                }
Create SSL Nginx Virtual Host

9. Ahora es el momento de crear dos scripts en una ruta ejecutable del sistema (variable de shell $PATH), que funcionen como comandos para activar o desactivar los Virtual Hosts de Nginx.

Crea el primer script Bash llamado n2ensite que habilitará los archivos de configuración de Virtual Hosts creando un enlace simbólico entre los hosts especificados de sites-available y sites-enabled.

# nano /usr/local/bin/n2eniste

#!/bin/bash
if test -d /etc/nginx/sites-available && test -d /etc/nginx/sites-enabled  ; then
echo "-----------------------------------------------"
else
mkdir /etc/nginx/sites-available
mkdir /etc/nginx/sites-enabled
fi

avail=/etc/nginx/sites-available/$1.conf
enabled=/etc/nginx/sites-enabled/
site=`ls /etc/nginx/sites-available/`

if [ "$#" != "1" ]; then
                echo "Use script: n2ensite virtual_site"
                echo -e "\nAvailable virtual hosts:\n$site"
                exit 0
else

if test -e $avail; then
sudo ln -s $avail $enabled
else
echo -e "$avail virtual host does not exist! Please create one!\n$site"
exit 0
fi

if test -e $enabled/$1.conf; then
echo "Success!! Now restart nginx server: sudo /etc/init.d/ nginx restart"
else
echo  -e "Virtual host $avail does not exist!\nPlease see available virtual hosts:\n$site"
exit 0
fi
fi
Create Virtual Host Enable Script

10. Luego crea el segundo script llamado n2dissite, que eliminará los Virtual Hosts activos especificados de la ruta de Nginx en sites-enabled con el siguiente contenido.

# nano /usr/local/bin/n2dissite

Agrega el siguiente contenido.

#!/bin/bash
avail=/etc/nginx/sites-enabled/$1.conf
enabled=/etc/nginx/sites-enabled
site=`ls /etc/nginx/sites-available/`

if [ "$#" != "1" ]; then
                echo "Use script: n2dissite virtual_site"
                echo -e "\nAvailable virtual hosts: \n$site"
                exit 0
else

if test -e $avail; then
sudo rm  $avail
else
echo -e "$avail virtual host does not exist! Exiting!"
exit 0
fi

if test -e $enabled/$1.conf; then
echo "Error!! Could not remove $avail virtual host!"
else
echo  -e "Success! $avail has been removed!\nPlease restart Nginx: sudo /etc/init.d/nginx restart"
exit 0
fi
fi
Create Virtual Host Disable Script

11. Después de terminar de editar los scripts Bash, añade permisos de ejecución y activa los Virtual Hosts de localhost: utiliza el nombre del archivo de configuración del Virtual Host sin la extensión .conf, luego reinicia los servicios de Nginx y PHP-FPM para aplicar los cambios.

# chmod +x /usr/local/bin/n2dissite
# chmod +x /usr/local/bin/n2ensite
# n2ensite localhost
# n2ensite localhost-ssl
# service nginx restart
# service php-fpm restart
Restart Nginx and PHP-FPM

12. Para probar las configuraciones, crea un archivo de información PHP en la ruta raíz predeterminada de localhost para archivos web (/var/www/localhost/htdocs) y redirige tu navegador a https://localhost/info.php o http://localhost/info.php.

echo "<?php phpinfo(); ?>" /var/www/localhost/htdocs/info.php
Verify PHP Configuration

Utilizando los archivos de configuración de Virtual Hosts de localhost como plantillas y n2enmod y n2dismod de Nginx, ahora puedes añadir fácilmente tantos sitios web como desees, pero asegúrate de tener punteros DNS válidos para un servidor web orientado a Internet o utiliza entradas localmente en el archivo de hosts del sistema.

Paso 4: Instalar MySQL/MariaDB + PhpMyAdmin

Para instalar la base de datos MySQL y la interfaz web PhpMyAdmin para MySQL, utiliza el mismo procedimiento presentado en Instalando LAMP en Gentoo.

13. Si prefieres utilizar MariaDB, un reemplazo de MySQL, utiliza los siguientes comandos para obtener los flags de USE e instalarlo.

# emerge -pv mariadb
# emerge --ask mariadb
Install MariaDB Database

En caso de que haya un conflicto de paquetes con MySQL, añade las siguientes líneas al archivo package.accept.keywords de Portage.

# echo “=dev-db/mariadb-5.5.37-r1 ~amd64” >> /etc/portage/package.accept.keywords
# echo “=virtual/mysql-5.5 ~amd64” >> /etc/portage/package.accept.keywords
# emerge --ask mariadb

14. Después de instalar la base de datos MySQL, inicie el servicio y asegúrelo utilizando mysql_secure_installation (cambie la contraseña de root, deshabilite el inicio de sesión de root fuera de localhost, elimine el usuario anónimo/base de datos de prueba).

# service mysql start
# mysql_secure_installation

15. Ingrese a la base de datos de MySQL usando el comando mysql -u root -p para probar su funcionalidad y salga con el comando exit.

# mysql -u root -p

MariaDB > show databases;
MariaDB > exit;
Verify MySQL Connectivity

16. Si no se siente muy cómodo con la línea de comandos de MySQL, instale el frontend web PhpMyAdmin ejecutando los siguientes comandos.

# emerge -pv dev-db/phpmyadmin
# echo “dev-db/phpmyadmin setup vhosts” >> /etc/portage/package.use
# emerge  --ask dev-db/phpmyadmin
Install PhpMyAdmin

17. Después de que PhpMyAdmin termine de instalarse, cree un archivo de configuración basado en el archivo de configuración de muestra, cambie la frase secreta blowfish_secret por una cadena aleatoria, luego cree un enlace simbólico desde /usr/share/webapps/phpmyadmin/phpmyadmin_version_number/htdocs/ hasta la ruta de acceso del documento raíz del host virtual donde desea acceder a la interfaz web de PhpMyAdmin.

# cd /usr/share/webapps/phpmyadmin/4.2.2/htdocs/
# cp config.sample.inc.php  config.inc.php
# nano config.inc.php
Configure PHPMyAdmin
# ln -s /usr/share/webapps/phpmyadmin/4.2.2/htdocs/  /var/www/localhost/htdocs/phpmyadmin
Create a PhpMyAdmin Symbolic Link

18. Para acceder a la base de datos de MySQL a través de la interfaz web de PhpMyAdmin, abra un navegador y use la siguiente dirección URL https://localhost/phpmyadmin.

Verify PhpMyAdmin Login

19. El paso final es habilitar los servicios a nivel del sistema para que se inicien automáticamente después de reiniciar.

# rc-update add nginx default
# rc-update add php-fpm default
# rc-update add mysql default
Enable Services System Wide

Ahora tenemos un entorno mínimo configurado para alojamiento web y si solo utiliza páginas generadas dinámicamente con HTML, JavaScript y PHP y no necesita sitios web SSL, la configuración anterior debería ser satisfactoria para usted.

Source:
https://www.tecmint.com/install-lemp-in-gentoo-linux/