Ahora que ya sabemos cómo configurar un servidor remoto para acceder a él, veremos en este documento cómo instalar el software necesario para desplegar aplicaciones web en dicho servidor.
NOTA IMPORTANTE: conviene que no instales nada de lo que se explica aquí directamente en el VPS, ya que se dan las nociones importantes para instalar diversos servidores web (Apache, Nginx), diversas bases de datos (MariaDB, MongoDB), pero posiblemente no vayas a tener todas esas cosas en el servidor. Limítate a instalar lo que se indica en los ejercicios nada más, que será lo que utilicemos en el curso.
En primer lugar veremos qué pasos son los recomendables para poder desplegar cómodamente aplicaciones Node.js en servidores remotos.
Apache es, hoy por hoy, el servidor más utilizado para desarrollo de aplicaciones web. Su instalación y configuración varían ligeramente de un sistema operativo a otro, especialmente en cuanto al nombre y ubicación de los ejecutables y de los ficheros de configuración. Aquí veremos el caso que nos ocupa: instalarlo en una distribución Debian para nuestro VPS.
Para instalar Apache en Debian, escribimos este comando:
sudo apt-get install apache2
Automáticamente, Apache quedará instalado como servicio, y se iniciará con el sistema operativo. Podemos iniciar, detener o reiniciar el servidor con estos comandos (la opción reload
es más ligera y menos profunda que restart
, y se emplea para recargar los archivos de configuración simplemente):
sudo systemctl start apache2
sudo systemctl stop apache2
sudo systemctl restart apache2
sudo systemctl reload apache2
O también con estos otros:
sudo /etc/init.d/apache2 start
sudo /etc/init.d/apache2 stop
sudo /etc/init.d/apache2 reload
sudo /etc/init.d/apache2 restart
Por defecto, Apache queda escuchando en el puerto 80, así que para probar que está en marcha, podemos acceder a la URL que nos dieron para nuestro VPS al registrar (por ejemplo, vps-xxxxxxxx.vps.ovh.net). Si hemos contratado un nombre de dominio y lo hemos asociado a la IP de nuestro VPS, también lo podemos usar para acceder a Apache. Veremos una página de bienvenida similar a ésta:
La configuración de Apache en Linux Debian se encuentra distribuida en varios archivos, todos ellos ubicados en la carpeta /etc/apache2
. Antes de editar cualquiera de estos archivos, conviene hacer una copia de seguridad de su estado original, por si los cambios dejan al archivo con errores, y Apache no puede iniciar. Por ejemplo:
sudo cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.original
El archivo principal de configuración de Apache, dentro de la carpeta anterior, es apache2.conf
. En él existen referencias a los otros archivos de configuración, que permiten gestionar puertos, hosts virtuales y otros elementos.
Dentro de este archivo principal en sí, podemos configurar cosas como:
ServerRoot
)DocumentRoot
). Por defecto, el valor de este último elemento es var/www/html
.DirectoryIndex
).ErrorLog
, cuyo valor por defecto es /var/log/apache2/error.log
)El archivo de gestión de puertos también se encuentra dentro de la carpeta /etc/apache2
. En concreto, es el archivo ports.conf
, y contiene los puertos que se habilitan para trabajar con Apache. Por defecto, hay dos puertos habilitados:
Podemos editar cualquiera de estos puertos para hacer que Apache escuche estas conexiones por otros puertos, y podemos habilitar más que esos dos puertos, añadiendo más directivas Listen
a las que ya hay.
Ejercicio 1:
Instala Apache en tu VPS siguiendo las instrucciones indicadas en este apartado. Edita el fichero
ports.conf
para habilitar también los puertos 8000 y 8080. Reinicia el servidor para que incluya los cambios.
Los hosts virtuales permiten que un solo ordenador pueda alojar múltiples dominios y páginas web, de forma que una sola dirección IP puede responder a diferentes nombres de dominio. También un host virtual permite asignar un subdominio a una aplicación concreta, ubicada en una carpeta determinada. Por ejemplo, si nuestro dominio es daw.ovh, podemos definir un subdominio llamado pruebas.daw.ovh, y colocar la web en la carpeta /home/usuario/pruebas, por ejemplo.
En la carpeta /etc/apache2/sites-available
se tienen definidos los hosts virtuales, y en la carpeta /etc/apache2/sites-enable
se tienen enlaces simbólicos a los hosts de la carpeta anterior que están activados o habilitados actualmente.
El servidor web Apache se instala por defecto con un host virtual ya definido. La configuración de este host la podemos encontrar en /etc/apache2/sites-available/000-default.conf
, y alude a la carpeta de documentos por defecto /var/www/html
. Por defecto este sitio virtual está habilitado, por lo que podemos comprobar que existe un enlace simbólico a este fichero en el directorio /etc/apache2/sites-enable
.
Supongamos que queremos configurar un host virtual para el subdominio maycalle.ovh (que ya tendremos registrado previamente en OVH), de forma que atienda peticiones en el puerto 80 y cargue la web que tenemos almacenada en /home/usuario/librosweb
. En este caso, debemos crear un archivo de configuración en /etc/apache2/sites-available
. Podemos copiar el que ya hay y darle otro nombre:
cd /etc/apache2/sites-available
cp 000-default.conf 001-librosweb.conf
Después, editamos este nuevo archivo 001-librosweb.conf
y lo configuramos con los datos del nombre de dominio o subdominio asociado, y carpeta de la web. Añadimos también un bloque <Directory>
para dar permisos de acceso a la carpeta en cuestión.
<VirtualHost *:80>
ServerAdmin may.calle@gmail.com
ServerName maycalle.ovh
DocumentRoot "/home/debian/librosweb"
DirectoryIndex index.js
<Directory "/home/debian/librosweb">
Require all granted
</Directory>
</VirtualHost>
Finalmente, debemos habilitar este nuevo sitio, para lo que usaremos el comando ln
para crear un alias del archivo en la carpeta /etc/apache2/sites-enabled
. El siguiente comando se escribe en una sola línea:
sudo ln -s /etc/apache2/sites-available/001-librosweb.conf
/etc/apache2/sites-enabled
Para deshabilitar el sitio simplemente tenemos que borrar el enlace simbólico de la otra carpeta.
Tras los cambios realizados, deberemos reiniciar el servidor para que los incorpore:
sudo systemctl reload apache2
Veremos que al visitar maycalle.ovh
en el navegador se muestra el contenido del archivo index.js en lugar de ejecutarse, esto es porque Apache, por defecto, no procesa archivos .js a diferencia de los archivos .php. Por lo tanto, Apache está sirviendo el archivo index.js como un archivo estático. Una posible solución es configurar Apache para actuar como un proxy inverso que reenvíe las solicitudes al puerto donde se ejecuta tu aplicación Node.js o utilizar Phusion Passenger, que veremos más adelante.
Ejercicio 2:
Para realizar este ejercicio seguiremos estos pasos:
- Descarga este ejemplo de proyecto Node.js que hemos utilizado en alguna sesión anterior. Contiene un código simple para probar la autenticación basada en sesiones con Express (sin base de datos). Descomprímelo en una carpeta
- Súbelo a un repositorio tuyo en GitHub. Para ello:
- Crea un repositorio nuevo con el nombre que quieras (por ejemplo PruebaSesionesExpress), y añade un fichero README
- Clona el repositorio en tu ordenador, y copia dentro el código del proyecto descomprimido del paso 1.
- Añade un fichero
.gitignore
que incluya la carpetanode_modules
- Haz un Commit y un Push para subir los cambios a GitHub
- Abre sesión en tu VPS y descarga el proyecto en tu carpeta de usuario (utiliza git clone para clonar el repositorio la primera vez, y git pull si haces cambios las siguientes veces).
- Añade un virtual host en Apache (carpeta /etc/apache2/sites-available) para que acceda a esa carpeta por el puerto 8080:
<VirtualHost *:8080> ServerAdmin tu_correo@gmail.com ServerName vps-XXXXXX-vps.ovh.net DocumentRoot "/home/debian/PruebaSesionesExpress" DirectoryIndex index.js <Directory "/home/debian/PruebaSesionesExpress"> Require all granted </Directory> </VirtualHost>
- Recuerda añadir también el enlace simbólico en la carpeta sites-enabled Reinicia el servidor y prueba a cargar el fichero index.js (se mostrará directamente el código fuente)
A la hora de instalar Node.js, podemos emplear el gestor de versiones NVM o bien la distribución correspondiente de Node para nuestro sistema operativo. En este documento se explica detalladamente cómo instalar una u otra opción.
Ejercicio 3:
Instala Node.js (la última versión LTS disponible) en tu VPS. Es preferible que lo instales desde la web oficial, sin usar NVM, siguiendo estas instrucciones para Linux.
Es habitual que en un servidor remoto coexistan distintos servidores web, como por ejemplo Node y Apache, o Apache y Nginx. En este caso, no es muy recomendable tener que acceder a las aplicaciones Node por un puerto distinto al puerto por defecto, salvo que sean aplicaciones de prueba o para uso particular, pero tampoco podemos dejar escuchando a Node por el puerto 80 si ya hay otro servidor ocupando ese puerto… salvo que comuniquemos ambos servidores.
Passenger es un servidor de aplicaciones que permite trabajar con aplicaciones desarrolladas en varios frameworks, como por ejemplo Ruby o Node. Monitoriza las aplicaciones para volver a levantarlas si caen, y ofrece algunas ventajas adicionales, como el balanceo de carga. Además, dispone de módulos para integrarse con los servidores Apache o Nginx, de forma que, utilizando los mismos puertos, podemos hacer que estos servidores “pasen” a Passenger las aplicaciones que indiquemos en los correspondientes archivos de configuración.
Instalamos Passenger y el módulo para Apache a través del repositorio oficial. Cada comando sudo a continuación debe introducirse en una sola línea independiente del resto, en el mismo orden.
sudo apt-get install -y dirmngr gnupg
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80
--recv-keys 561F9B9CAC40B2F7
sudo apt-get install -y apt-transport-https ca-certificates
sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/
apt/passenger bullseye main > /etc/apt/sources.list.d/passenger.list'
sudo apt-get update
sudo apt-get install -y libapache2-mod-passenger
Habilitamos el módulo Passenger para apache, y reiniciamos el servidor
sudo a2enmod passenger
sudo systemctl restart apache2
Verificar la instalación antes de continuar.
sudo /usr/bin/passenger-config validate-install
Añadir un nuevo archivo de configuración de virtual host para nuestra aplicación Node:
sudo nano /etc/apache2/sites-available/appnode.conf
Editar el archivo para dejarlo con esta apariencia:
<VirtualHost *:80>
ServerName tu_dominio.com
DocumentRoot /home/usuario/web_node
PassengerAppRoot /home/usuario/web_node
PassengerAppType node
PassengerStartupFile app.js
<Directory /home/usuario/web_node>
Allow from all
Options -MultiViews
Require all granted
</Directory>
</VirtualHost>
Habilitar el nuevo virtual host, y reiniciar Apache para aceptar los cambios:
sudo ln -s /etc/apache2/sites-available/app.node.conf
/etc/apache2/sites-enabled
sudo systemctl reload apache2
Ahora nuestra nueva web ya debe estar visible y operativa. Podemos también comprobarlo con el comando curl
, además del navegador:
curl http://www.tu_dominio.com
NOTA: obviamente, tanto el dominio de
ServerName
como las carpetas indicadas enDocumentRoot
,PassengerAppRoot
yDirectory
las adaptaremos a las que requiera nuestra aplicación.
NOTA: las propiedades
DocumentRoot
yPassengerAppRoot
normalmente apuntarán a la misma carpeta, donde se encuentre el archivo principal de nuestra aplicación Node.js. Si estamos utilizando algún framework especial, como Nest.js, donde no hay un archivo principal específico (en este caso, la aplicación se lanza con npm run y alguna opción predefinida en el archivo package.json), entonces debemos construir la aplicación (en el caso de Nest.js, usamosnpm run build
), y las propiedades anteriores del archivo de configuración de Apache deben apuntar a la subcarpetadist
dentro del proyecto, siendo el archivo principal (propiedadPassengerStartupFile
) el archivomain.js
, dentro de dicha carpeta.
Estos pasos están sacados de la web oficial. También allí se puede obtener cómo instalar Passenger de forma autónoma (standalone), y también integrado con Nginx.
Ejercicio 4:
Completa los siguientes pasos:
- Instala Passenger siguiendo los pasos indicados en este apartado
- Modifica el virtual host que has creado antes en el Ejercicio 2 para configurarlo con Passenger:
<VirtualHost *:8080> ServerAdmin tu_correo@gmail.com ServerName vps-XXXXXX-vps.ovh.net DocumentRoot "/home/debian/PruebaSesionesExpress" PassengerAppRoot "/home/debian/PruebaSesionesExpress" PassengerAppType node PassengerStartupFile index.js <Directory "/home/debian/PruebaSesionesExpress"> Allow from all Options -MultiViews Require all granted </Directory> </VirtualHost>
- Reinicia Apache
- Ejecuta npm install en tu carpeta /home/debian/PruebaSesionesExpress para que se instalen los paquetes necesarios.
- Prueba a acceder de nuevo a la web (ruta raíz) y ahora ya debería verse todo correctamente.
Como alternativas o complementos a los pasos seguidos en el apartado anterior, aquí vamos a indicar otras opciones que podemos tener en cuenta a la hora de ser instaladas en el VPS.
Cuando uno oye hablar de servidores web, posiblemente Apache sea el primero que le viene a la mente. Y no es casualidad, ya que en torno al 30 o 35% del tráfico web se sirve actualmente con este servidor. Sin embargo, en los últimos años han surgido alternativas al mismo, y una de las que ha llegado con más fuerza es Nginx. Actualmente sirve más del 20% de las webs existentes.
Nginx es un servidor HTTP ligero, de origen ruso. Inicialmente se creó para dar soporte a una web que recibía en torno a 500 millones de visitas diarias, y actualmente también se emplea como servidor base de otros sitios web conocidos, como Reddit o Dropbox.
Entre las características que podríamos citar de Nginx, las más relevantes son:
Con todo lo anterior, podemos concluir que Nginx es una mezcla de eficiencia, velocidad y potencia, y por ello cada día es una alternativa más sólida a Apache.
Veamos cómo descargar, instalar y poner en marcha una instancia básica de Nginx. Los primeros pasos son similares a cualquier otra herramienta bajo sistemas Linux: actualizamos repositorios e instalamos el paquete:
sudo apt update
sudo apt install nginx
NOTA: si ya tenemos una instancia de otro servidor (por ejemplo, Apache), corriendo en el puerto 80, es conveniente que detengamos el servicio temporalmente, para que Nginx pueda completar su instalación y puesta en marcha en dicho puerto 80. Más adelante veremos cómo podemos cambiar el puerto y hacer que cada servidor tenga el suyo, si es necesario.
Por defecto, Nginx utiliza la misma carpeta de documentos web que Apache (/var/www/html
), por lo que, si tenemos Apache ya instalado, Nginx utilizará esta página de inicio, y dejará la suya renombrada en la misma carpeta, en un segundo plano. Si Nginx es nuestro primer servidor, entonces al conectar al puerto 80 desde nuestro dominio (por ejemplo, vps112233.ovh.net o similar), veremos la página de bienvenida de Nginx.
El archivo de configuración de Nginx es /etc/nginx/nginx.conf
. Internamente redirige o incluye otros archivos de configuración adicionales, y de hecho, gran parte de la configuración que necesitemos la haremos en esos archivos.
La mecánica de Nginx para habilitar sitios web es similar a la utilizada por Apache: existe una carpeta /etc/nginx/sites-available
donde definir archivos de configuración para los distintos hosts virtuales que tengamos (además de la propia carpeta /var/www/html
), y luego existe una carpeta paralela /etc/nginx/sites-enabled
con enlaces simbólicos a los sitios de la carpeta anterior que queramos tener activos en cada momento.
Para añadir un nuevo host virtual en Nginx, basta con añadir un nuevo archivo a la carpeta /etc/nginx/sites-available
. Ya existe un archivo default
que apunta a la carpeta por defecto /var/www/html
, y lo podemos utilizar para crear un duplicado, por ejemplo, misitio.com
, con una apariencia como ésta:
server {
listen 80;
listen [::]:80;
root /home/usuario/pruebas;
index index.html index.htm;
server_name misitio.com;
location / {
try_files $uri $uri/ =404;
}
}
listen
se emplea para indicar el puerto por el que escuchar. La segunda directiva listen
con la sintaxis [::]
se emplea para direcciones IPv6.root
indica la carpeta raíz de los documentos de este host virtualindex
contiene las páginas que se van a cargar cuando se acceda a la carpeta de la web sin indicar ninguna. En este caso se buscará primero la página index.html
, y si no se encuentra, se buscará index.htm
en segundo lugar. También podríamos incluir aquí index.php
, por ejemplo, si trabajamos con PHP.server_name
es el nombre asociado al host virtual (normalmente, un alias o subdominio)location
se emplean para configuraciones particulares de ciertas rutas. En este caso, se emite un código 404 en el caso de que el archivo solicitado no se encuentre.Una vez tenemos el sitio configurado, para hacerlo visible debemos crear un enlace simbólico de este archivo en la carpeta sites-enabled
, con el siguiente comando (en una sola línea):
sudo ln -s /etc/nginx/sites-available/misitio.com
/etc/nginx/sites-enabled
En algunos tipos de aplicaciones, como por ejemplo aplicaciones SPA (Single Page Applications), o hechas con frameworks como Angular, puede resultar interesante redirigir cualquier URL que solicite el cliente a un único recurso (por ejemplo, a la página index.html
en la raíz de la aplicación). Para eso, podemos crear un archivo de configuración (copia de default.conf
, como en el caso anterior), como éste. La línea con la instrucción rewrite
se encarga de la redirección propiamente dicha.
server {
listen 80;
server_name misitio.com;
root /home/debian/pruebas;
rewrite ^\/.+$ /index.html last;
location / {
}
...
En algunos casos, al cargar una URL se tiende a buscar el archivo por defecto “favicon.ico”, y si no se encuentra nos podemos encontrar con mensaje de error en el navegador, o con el correspondiente mensaje de log en el archivo de errores. Para evitar esto, podemos añadir esta directiva a la configuración de nuestro host virtual:
location = /favicon.ico {
return 204;
access_log off;
log_not_found off;
}
Por otra parte, ante cualquier error en la ejecución de Nginx, se generarán los correspondientes mensajes en el archivo de logs, ubicado en /var/log/nginx/error.log
. Podemos consultarlo si algo va mal para tener algo más de información sobre el error. Si es debido a un error de sintaxis en algún fichero de configuración, podemos tener alguna pista de en qué archivo y línea está el error.
En la mayoría de ejemplos que hemos visto o veremos realizaremos una única aplicación Node que pondremos en marcha por sí misma. Pero es posible que en un mismo servidor tengamos coexistiendo varias aplicaciones, cada una de ellas asociada a un subdominio diferente. Si hemos configurado Passenger con Apache podemos definir un host virtual para cada aplicación, con su dominio asociado, que apunte a cada carpeta.
Sin embargo, de forma alternativa, podemos gestionar todas las aplicaciones y hosts virtuales desde Node.js de otra forma. Para empezar, puede ser buena idea definir una carpeta donde ubicar todos los proyectos (en subcarpetas independientes). Podemos crear una carpeta llamada “ProyectosNode” dentro de nuestra carpeta de usuario, con una subcarpeta para cada proyecto.
Supongamos que definimos un primer proyecto llamado “Principal” en nuestra carpeta de “ProyectosNode”. Instalamos Express en dicha carpeta, y dejamos un archivo app.js
como este:
const express = require('express');
let app = express();
app.get('/', (req, res) => {
res.send('Bienvenido a la web principal');
});
module.exports.app = app;
Del mismo modo, podemos crear otro proyecto, llamado “Pruebas”, por ejemplo, en nuestra carpeta de “ProyectosNode”. Instalamos nuevamente Express y dejamos el archivo app.js
así:
const express = require('express');
let app = express();
app.get('/', (req, res) => {
res.send('Bienvenido a la web de pruebas');
});
module.exports.app = app;
Ahora vamos a crear una tercera carpeta llamada “Manager”, en la misma carpeta de “ProyectosNode”. Instalamos también Express, y una librería adicional llamada vhost
, que se encarga de asociar hosts virtuales con aplicaciones Express. El archivo app.js
quedará como sigue:
const express = require('express');
const vhost = require('vhost');
let app = express();
app.use(vhost('nachoib.ovh',
require(__dirname + '/../Principal/app').app));
app.use(vhost('pruebas.nachoib.ovh',
require(__dirname + '/../Pruebas/app').app));
app.listen(3000);
En este último caso, lo que hacemos es asociar el nombre nachoib.ovh con la aplicación “Principal”, y el subdominio pruebas.nachoib.ovh con el proyecto de “Pruebas”. Si ponemos en marcha esta última aplicación, podemos acceder a las dos webs por separado con las correspondientes URLS:
Alternativamente, podemos mapear Passenger con esta última aplicación Manager únicamente, y que sea ella la que se encargue de redirigir a una u otra app en función del dominio. Aunque, en este último caso, quizá sea más cómodo configurar hosts virtuales independientes en Apache con Passenger.
Como alternativa al uso de Passenger con Apache, podemos optar por no instalar Apache y gestionar el arranque de las aplicaciones Node con la herramienta forever para que se inicien de forma automática al iniciar el sistema. Para ello, seguimos estos pasos (suponiendo que los hagamos como usuario root, de lo contrario deberemos anteponer el comando sudo
). Tomaremos como ejemplo la aplicación Manager que hemos hecho en el apartado anterior.
forever
del repositorio de NPM. Este módulo permite rearrancar de forma automática una aplicación Node, incluso cuando se produce un error que la hace finalizar.npm install forever -g
/etc/init.d
, por ejemplo:nano /etc/init.d/servidor-node
#!/bin/sh
FOREVER="/usr/bin/forever"
APP_PATH="/home/usuario/ProyectosNode/Manager/app.js"
USER="usuario"
su - $USER -c "$FOREVER start $APP_PATH"
Nota: Recuerda que debes cambiar el usuario y la ruta del proyecto de acuerdo a tus necesidades. En el VPS de OVH el usuario es “debian”.
chmod +x /etc/init.d/servidor-node
update-rc.d /etc/init.d/servidor-node defaults
/etc/init.d/servidor-node
) o reiniciar el servidor VPS para que acepte los cambios introducidos.Vamos a mostrar los pasos para instalar un servidor de base de datos de nuestra elección. Veremos los casos de MariaDB y MongoDB.
Para instalar MariaDB en nuestro servidor VPS, accedemos por SSH como usuario root y escribimos el siguiente comando:
apt update
apt install mariadb-server
NOTA: si queremos instalar MySQL en lugar de MariaDB, los pasos a seguir son los mismos, pero en el comando anterior cambiaremos el paquete
mariadb-server
pormysql-server
.
Tras la instalación, podemos ejecutar con permisos de root el comando:
mysql_secure_installation
para asegurar algunos aspectos que quedan poco seguros en la instalación por defecto, como la contraseña de root o el acceso remoto o anónimo.
Una vez finalizada esta configuración, para iniciar, detener o reiniciar el servidor, escribiremos estos comandos, respectivamente:
/etc/init.d/mysql start /etc/init.d/mysql stop /etc/init.d/mysql restart
Para instalar MongoDB en VPS, lo propio es instalarlo como servicio. Los pasos a seguir siempre será mejor consultarlos en la página oficial. En nuestro caso, puedes seguir estos pasos: Instalación de la Edición Community de MongoDB en Debian 11.
Tras esto, ya podemos lanzar y detener Mongo con el servicio:
/etc/init.d/mongodb start
/etc/init.d/mongodb stop
/etc/init.d/mongodb restart
Habilitar conexiones externas
Podríamos utilizar un cliente para conectar a nuestro servidor remoto de MongoDB. Pero antes debemos habilitar MongoDB para aceptar conexiones remotas. Para ello, editamos el archivo /etc/mongodb.conf
y comentamos esta línea:
#bind_ip = 127.0.0.1
Reiniciamos el servicio de MongoDB, y después iniciamos nuestro cliente MongoDB (por ejemplo, el plugin de Visual Studio Code, o la aplicación Compass oficial de Mongo) y creamos una nueva conexión a nuestro servidor (por ejemplo, vps112233.ovh.net) por el puerto que sea. Recordemos que el puerto por defecto es 27017, pero se puede modificar con la directiva port
en el archivo de configuración anterior:
port = 27017
Finalmente, vamos a instalar los módulos de PHP para poder trabajar tanto desde Apache como desde Nginx, si fuese el caso. También instalaremos la aplicación phpMyAdmin para gestionar las bases de datos MariaDB de forma remota con esta aplicación web.
Explicaremos a continuación cómo instalar PHP de forma global, y cómo configurarla después para el caso concreto de Nginx (la configuración con Apache es inmediata).
En primer lugar, debemos ejecutar los siguientes comandos para descargar PHP del repositorio correspondiente:
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
Después, instalamos tanto php7.4
como php7.4-fpm
, que es la herramienta que utiliza Nginx para tratamiento de páginas PHP.
sudo apt install php7.4
sudo apt install php7.4-fpm
Podemos consultar la versión instalada con estos comandos, respectivamente:
php -v
php-fpm7.4 -v
De forma similar a como hemos instalado FPM, podemos instalar otras extensiones que puedan ser necesarias en un momento dado, haciendo el correspondiente sudo apt install php7.4-XXXX
, siendo XXXX la extensión en sí (por ejemplo, php7.4-common
, o php7.4-mysql
). Aunque en principio no son necesarias para la instalación de base.
En lo que respecta a Nginx, nos faltaría habilitar PHP en él. Este paso no es tan automático y sencillo como en Apache, ya que Nginx no dispone de procesamiento PHP nativo, y requiere de unos pasos a seguir, una vez hemos instalado previamente el FPM (FastCGI Process Manager).
/etc/php/7.x/fpm/php.ini
(siendo la x la versión que tengamos instalada de PHP). Buscamos la línea de configuración cgi.fix_pathinfo
, y la dejamos así, guardando el archivo al finalizar:cgi.fix_pathinfo=0
/etc/php/7.x/fpm/pool.d/www.conf
y comentamos esta línea y añadimos la que va a continuación:;listen = /run/php/php7.0-fpm.sock
listen = 127.0.0.1:9000
sudo systemctl restart php7.x-fpm
Indicamos a Nginx que las solicitudes a páginas PHP las pase al procesador que hemos instalado. Para ello, abrimos el archivo del host virtual que queramos configurar (por ejemplo, /etc/nginx/sites-available/default
, o cualquier otro que hayamos creado) y hacemos lo siguiente:
index index.php index.html ...
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
}
Tras estos pasos, reiniciamos Nginx y probamos a cargar algún contenido PHP básico, como la llamada a phpinfo()
.
La forma más sencilla de gestionar nuestras bases de datos MySQL (o MariaDB) quizá sea a través de la aplicación phpMyAdmin, el cliente web por excelencia para gestionar las bases de datos de este tipo. Se instala con el siguiente comando (en modo root o con permisos de superusuario):
apt-get install phpmyadmin
Durante la instalación, nos pedirá los siguientes datos:
Tras los pasos anteriores, ya podemos acceder a phpMyAdmin con el nombre de nuestro dominio y el puerto por el que esté escuchando Apache. Por ejemplo:
http://vps112233.ovh.net/phpmyadmin
En el caso de querer utilizar phpMyAdmin con Nginx, podemos hacer un enlace simbólico de la carpeta de instalación de phpMyAdmin (/usr/local/phpmyadmin
) a la carpeta de nuestra aplicación web. Por ejemplo, si queremos acceder desde la carpeta general de aplicaciones de Nginx:
ln -s /usr/share/phpmyadmin /var/www/html
Después, editamos el archivo de configuración de esa carpeta (en nuestro ejemplo, sería el archivo /etc/nginx/sites-available/default
, y añadimos la configuración para PHP, si no la tiene. También convendría dejar como globales la ruta raíz de la aplicación (root) y los archivos de inicio por defecto. Podría quedar algo así:
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.html index.php;
location / {
}
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
}
...