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
Verifique el servicio 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
-ysudo 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
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.