Ubuntu: instale un servidor web – NGINX / PHP / MariaDB

En este tutorial veremos cómo instalar y configurar un servidor en Ubuntu con los siguientes componentes:

  • Nginx
  • PHP
  • MariaDB

También explicaré cómo poner phpmyadmin para administrar el servidor MariaDB y cómo configurar vhosts.

En este tutorial, no usaremos los repositorios oficiales de la distribución, sino los repositorios de los distintos componentes para instalar las últimas versiones.

Requisito previo

Tenga un servidor Ubuntu recién instalado y actualizado con acceso root o sudo y acceso a Internet.

Instalación de los distintos componentes

En esta parte vamos a instalar los distintos componentes del servidor Web y comprobar su correcto funcionamiento.

Instalar Nginx

Antes de instalarlo, agregaremos el repositorio de oficina de Nginx.

Ingrese el siguiente comando para crear un archivo de lista donde completaremos las URL.

sudo nano /etc/apt/sources.list.d/nginx.list

En el editor nano, ingrese las líneas debajo que son la configuración del repositorio:

deb [arch=amd64] http://nginx.org/packages/mainline/ubuntu/ bionic nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ bionic nginx

Presione las teclas del teclado Crtl + X y guarde los cambios.

Tienes que adaptar las fuentes del repositorio a la versión de Ubuntu, en el tutorial estoy en la versión 18.04.X, entonces estoy usando bionic.

Agregue las firmas del depósito usando los siguientes comandos:

wget http://nginx.org/keys/nginx_signing.key 
sudo apt-key add nginx_signing.key

Actualice los paquetes con el comando:

sudo apt update

En la captura de pantalla a continuación, podemos ver que se ha consultado el repositorio de nginx:

Instale nginx con el siguiente comando:

sudo apt install nginx -y

La opción -y le permite no tener una solicitud de confirmación para la instalación

Nginx ahora está instalado, ahora vamos a hacer algunas comprobaciones, configuraciones y ver algunos comandos antes de pasar a la instalación de PHP.

Verifique la configuración de nginx:

sudo nginx -t

Este comando es muy útil, sobre todo a la hora de realizar un cambio de configuración, te permite comprobar que es correcto antes de volver a cargarlo.

Inicie el servicio nginx:

sudo systemctl start nginx

Si todo va bien el comando no devuelve nada

Configure el inicio automático del servicio:

sudo systemctl enable nginx
sudo systemctl enable nginx

Verifique el servicio nginx:

systemctl status nginx
systemctl status nginx

Este comando le permite verificar el estado del servicio y desde cuándo se ha estado ejecutando.

Mostrar versión de nginx

nginx -v

Configurar el usuario de nginx

Este paso de configuración es importante, especialmente si desea utilizar php (php-fpm) en el servidor web.

Al instalar nginx desde el repositorio oficial, el servicio está configurado para ejecutarse con el usuario nginx y php con el usuario www-data. Es necesario modificar la configuración de nginx para usar el mismo usuario que php.

Éditer le fichier /etc/nginx/nginx.conf :

sudo nano /etc/nginx/nginx.conf

Buscar:

user nginx;

Reemplazar con :

user www-data;

Guarde el archivo de configuración.

Recargue la configuración:

sudo systemctl reload nginx

Pruebe el servidor Nginx

Desde una computadora, abra un navegador de Internet e ingrese la dirección IP o el nombre de la máquina y verifique que el mensaje ¡Bienvenido a nginx! se visualiza.

Instalar PHP

Ahora que el servidor web está en su lugar, pasaremos a instalar PHP, como para nginx, agregaremos el repositorio ppa: ondrej / php que permite tener las últimas versiones de PHP y tener varias versiones simultáneamente .

En este tutorial instalaremos la versión 7.3 y 7.4 de PHP y veremos cómo posteriormente configurar un vhost para usar una versión específica de PHP.

Agregar depósito

Ingrese los siguientes comandos:

sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php

Se requiere confirmación al ejecutar el comando: sudo add-apt-repository ppa: ondrej / php

Actualice los paquetes usando el comando:

sudo apt update

Ver versiones de PHP disponibles

Ingrese el comando apt install php7. y haz una pestaña.

Puede ver todos los paquetes PHP disponibles en el repositorio.

Instalar una versión de PHP

Para una instalación en nginx, es importante no ingresar el comando sudo apt install php7.X porque este comando instalará dependencias incluyendo apache2.

Para usar PHP con NGINX, debe instalar PHP en modo FPM.

Para instalar PHP ingrese el siguiente comando (adapte según la versión deseada):

sudo apt install php7.x-fpm php7.x-mysql php7.x-opcache -y

Una vez que se complete la instalación, ingrese el siguiente comando para probar el funcionamiento correcto:

php -v

PHP en modo FPM, funciona como un servicio, es posible verificar su estado usando el siguiente comando adaptando la versión de php instalada:

systemclt status php7.x-fpm
systemclt status php7.3-fpm

Para instalar otra versión de PHP simultáneamente, simplemente repita la operación cambiando el comando con la versión deseada.

Configurar NGINX y PHP

Ahora configuraremos nginx para usar PHP y probaremos que funcione.

Edite el archivo vhost predeterminado:

sudo nano /etc/nginx/conf.d/default.conf

Añada antes de final} las siguientes líneas adaptándose a la versión de PHP disponible:

location ~ \.php$ { 
     root /usr/share/nginx/html;
     fastcgi_index index.php;
     fastcgi_pass unix:/run/php/php7.3-fpm.sock; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
     include fastcgi_params;
}

Verifique la configuración usando el comando: sudo nginx -t

Recargue la configuración: sudo systemctl reload nginx

Para probar cómo funciona php, crearemos un archivo phpinfo.php:

sudo nano /usr/share/nginx/html/phpinfo.php

Ingrese el código PHP a continuación:

<?php
phpinfo();
?>

Guardar el archivo.

Desde un navegador de Internet, llame a la página http: //ip_server/phpinfo.php

Si la página phpinfo.php está bien.

Instalar MariaDB

Nuestro servidor web está casi completo, ahora tenemos que instalar MariaDB para tener una base de datos.

Agregar el depósito

Una vez más, necesitamos agregar el repositorio para tener la última versión. Vaya a la siguiente URL: Download MariaDB Server – MariaDB.org y seleccione la distribución y la versión de MariaDB para tener la url de las fuentes.

Ingrese los siguientes comandos para agregar el repositorio:

sudo apt-get install software-properties-common 
sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc' 
sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] https://ftp.igh.cnrs.fr/pub/mariadb/repo/10.5/ubuntu bionic main'

Actualice la lista de paquetes con el comando:

sudo apt update

Instalación de MariaDB

En cuanto a PHP, ingrese el comando apt install mariadb- + tab para mostrar los paquetes disponibles.

Para el ejemplo, instalaremos la versión 10.5, ingrese el siguiente comando para realizar la instalación:

sudo apt install mariadb-server-10.5 -y

Una vez finalizada la instalación, ingrese el siguiente comando para verificar el correcto funcionamiento del servidor MariaDB:

sudo systemctl status mariadb

Creación de una cuenta de administración

Por defecto, la cuenta root no tiene contraseña y solo es accesible desde la consola, para evitar modificar esta cuenta crearemos una cuenta de administración que podremos usar con otra herramienta. como phpmyadmin.

Ingrese el siguiente comando para cambiar al modo mysql

sudo mysql

Ingrese las siguientes líneas (solicitudes) para crear una cuenta adminsql, cambie la contraseña antes de realizar pedidos.

CREATE USER 'adminsql'@'%' IDENTIFIED BY 'azerty';
GRANT ALL PRIVILEGES ON *.* TO 'adminsql'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;

Instalar PHPMYADMIN

Este paso es opcional, la instalación de phpmyadmin le permite administrar MariaDB.

Para facilitar mi trabajo, utilicé WinSCP para la transferencia al servidor en SSH.

Descargue la última versión de phpmyadmin.

Descomprime el archivo.

En el servidor web, cree una carpeta pma en la ubicación del vhost de forma predeterminada: / usr / share / nginx / html

Envíe el contenido del archivo a la carpeta pma:

Desde un navegador, vaya a la dirección: http: //ip_server/pma/index.php

Ingrese la información de la cuenta creada previamente (adminsql / contraseña) y haga clic en Ejecutar para conectarse.

Puede administrar el servidor MariaDB con una interfaz web.

Configurar vhosts

Ahora que el servidor web está listo, veremos cómo configurar vhost también llamado host virtual que le permite alojar varios sitios en el mismo servidor.

Para el tutorial, crearé dos vhost (site-a.lab.priv y site-b.lab.priv) que usarán una versión diferente de php, site-a estará bajo php7.3 y site -b estará con php7.4

De antemano creé los dos registros DNS y apunta al servidor

Antes de comenzar, debe crear las diferentes carpetas, en la carpeta / home crearé una carpeta www-data y luego en esta carpeta crearé las subcarpetas sites, site-a y site-b, las cuales tendrán cada una dos subcarpetas. -log y carpetas public_html.

sudo mkdir /home/www-data
sudo mkdir /home/www-data/site-a
sudo mkdir /home/www-data/site-a/log
sudo mkdir /home/www-data/site-a/public_html
sudo mkdir /home/www-data/site-b
sudo mkdir /home/www-data/site-b/log
sudo mkdir /home/www-data/site-b/public_html
sudo chown www-data /home/www-data -R

Ahora que los archivos están listos, pasaremos a los archivos de configuración. Para tener una operación similar a Apache, crearemos dos carpetas en la carpeta / etc / nginx.

  • sites-available : que contendrá los archivos de configuración del host virtual
  • sites-enabled : que contendrá enlaces simbólicos a los archivos de configuración del host virtual que estarán activos.

Crea las carpetas con los siguientes comandos:

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

Ahora debe modificar el archivo de configuración nginx para indicarle que cargue los archivos de configuración que estarán en la carpeta habilitada para el sitio.

sudo nano /etc/nginx/nginx.conf

Buscar:

include /etc/nginx/conf.d/*.conf;

Agregar después:

include /etc/nginx/sites-enabled/*;

Guarde el archivo de configuración.

Pruebe la configuración de nginx:

sudo nginx -t

Recargue la configuración:

sudo systemctl reload nginx

Vamos a la configuración del host virtual para el sitio-a, usaremos el archivo predeterminado como base, copiaremos el archivo default.conf en la carpeta disponible del sitio renombrándolo site-a.conf

sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/sites-available/site-a.conf

Ahora debe modificar el archivo para que corresponda con la configuración del sitio.

nano /etc/nginx/sites-available/site-a.conf

Aquí está el archivo de configuración:

server {
    listen       80;
    server_name  site-a.lab.priv;

    #charset koi8-r;
    access_log  /home/www-data/site-a/log/access.log  main;

    location / {
        root   /home/www-data/site-a/public_html;
        index  index.php index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}

    location ~ \.php$ {
        root           /home/www-data/site-a/public_html;
        #try_files      $uri =404;
        fastcgi_index  index.php;
        fastcgi_pass   unix:/run/php/php7.3-fpm.sock;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;    
   }
}

Líneas cambiadas:

Ligne 3 (server_name) : indicar URL
Ligne 6 : ubicación de registros
Ligne 9 : directorio raíz del sitio
Ligne 10 : agregando index.php
Ligne 46 : directorio raíz del sitio

Ahora debe activar el sitio con enlace simbólico:

sudo ln -s /etc/nginx/sites-available/site-a.conf /etc/nginx/sites-enabled/

Pruebe la configuración de nginx

sudo nginx -t

Recargar la configuración

sudo systemctl reload nginx

Para probar el funcionamiento correcto, agregué un archivo index.php en la carpeta public_html del sitio con el siguiente código:

<?php
echo "site a";
phpinfo();
?>

Desde un navegador, ingrese la URL del sitio:

Para el sitio-b, reproduje la misma configuración cambiando el nombre del servidor, las ubicaciones y la configuración de php para usar php7.4.

el archivo de configuración:

server {
    listen       80;
    server_name  site-b.lab.priv;

    #charset koi8-r;
    access_log  /home/www-data/site-b/log/access.log  main;

    location / {
        root   /home/www-data/site-b/public_html;
        index  index.php index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}

    location ~ \.php$ {
        root           /home/www-data/site-b/public_html;
        #try_files      $uri =404;
        fastcgi_index  index.php;
        fastcgi_pass   unix:/run/php/php7.4-fpm.sock;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;    
   }
}

Aquí está el resultado:

Conclusión

El tutorial termina aquí, ahora sabe cómo instalar y configurar un servidor web con Nginx / PHP / MariaDB con Ubuntu usando diferentes versiones de PHP y hosts virtuales.

Otros tutoriales vendrán como instalar WordPress y GLPI en un servidor web NGINX.




Deja un comentario