Node.js

Acceso a servidores remotos

     

Una vez visto cómo funciona un servidor web local y cómo se construye una web sobre él, ya sea PHP sobre Apache, ASP.NET sobre IIS, JSP sobre Tomcat, Node o cualquier otro, conviene también saber los pasos a seguir para poner en marcha dicho servidor y dicha(s) web(s) en un entorno real, en lo que se conoce como el paso a producción.

1. Pasos previos para el despliegue de aplicaciones en servidores remotos

El despliegue en servidores remotos permite que una aplicación web sea accesible a nivel mundial.

Este paso requiere de algunos elementos previos que debemos tener preparados:

2. Tipos de alojamientos web y características

A la hora de elegir el alojamiento de nuestros proyectos web, existen diferentes opciones, unas más costosas y otras más asequibles. En general, salvo para empresas fuertes que dispongan de la infraestructura adecuada, se suele acudir a empresas especializadas en alojamiento web para ubicar estos proyectos. Ellas se encargan así del mantenimiento del servidor, medidas de seguridad, y otros elementos tales como la disponibilidad, que se garantiza mediante un acuerdo del nivel de servicio (Service Level Agreement, SLA). Veamos algunos ejemplos típicos.

2.1. Alojamiento en servidor dedicado

Cuando el proyecto es de envergadura, y la compañía tiene suficiente solvencia económica, se puede optar por contratar un servidor dedicado, es decir, un equipo hardware exclusivo para uso de la empresa en cuestión. Como decimos, en algunos casos este servidor está en las propias instalaciones de la empresa, con su IP propia, y es la empresa quien se encarga de mantenerlo, reiniciarlo y configurar la seguridad en su acceso. En otras ocasiones, se delega esta tarea en una empresa especializada en alojamientos web, con el correspondiente SLA acordado.

Los servidores dedicados ofrecen un alto rendimiento y seguridad, ya que no se comparten recursos con otros usuarios. Sin embargo, suelen ser más costosos y requieren conocimientos técnicos para su configuración y administración.

Como ejemplos de empresas de alojamiento que ofrecen estos servidores dedicados podemos nombrar, entre otras, a Acens, OVH, o IONOS 1&1. Los precios promedio tienden a empezar alrededor de los 70 - 90 euros al mes, aunque puede haber otras ofertas más económicas.

2.2. Alojamiento en servidor compartido o hosting básico

En el otro extremo, podemos encontrarnos con proyectos que requieran de pocos recursos. Hablamos de proyectos con pocas bases de datos, poca necesidad de espacio para almacenamiento, y pocos requisitos de ancho de banda o conexiones simultáneas. En estos casos, algunas empresas de alojamiento también ofrecen la posibilidad de utilizar un espacio pequeño en un servidor, que nos limita mucho ciertas cosas, tales como el ancho de banda, número de bases de datos disponibles, espacio en disco… Incluso nos limita el lenguaje o lenguajes a utilizar, siendo PHP el más habitual.

En comparación con los servidores dedicados, presentan más problemas de seguridad. Esto se debe a la naturaleza misma de cómo funcionan estos dos tipos de servidores y cómo se gestionan los recursos y la seguridad en cada uno de ellos. Por ejemplo, si otros usuarios tienen alguna vulnerabilidad de seguridad en su sitio web, un atacante podría intentar aprovecharla para acceder a otros sitios en el mismo servidor.

También encontramos numerosas empresas que ofrecen este tipo de alojamiento, como IONOS 1&1, Servage, Hostalia… Dependiendo de las características que ofrezcan (número de bases de datos, ancho de banda, almacenamiento, etc), los precios pueden rondar entre 3 y los 7 u 8 euros al mes, para este tipo de servicio.

2.3. Una solución intermedia: el VPS

Como situación intermedia entre las dos anteriores, está la opción de contratar un servidor privado virtual (VPS, Virtual Private Server). Consiste en simular que se dispone de un servidor dedicado, pero internamente de lo que se dispone es de una parte de un equipo, con su propio disco duro, memoria RAM dedicada, procesadores, etc. De esta forma, podemos instalar cualquier tipo de software que necesitemos (teniendo únicamente en cuenta los requisitos de número de procesadores, RAM y espacio disponible), pero el coste es mucho menor que el de un servidor dedicado, al compartirlo con otras webs que utilizan un VPS sobre el mismo equipo.

Muchas de las empresas que podríamos citar en los dos casos anteriores ofrecen este tipo de servicio, como por ejemplo OVH, Hostalia o IONOS 1&1. El precio suele rondar los 10 euros al mes, aunque en algunos casos se ofrecen precios más competitivos para ciertos tipos básicos de VPS.

Por su versatilidad, en este tema nos vamos a basar en esta última opción. Como empresa de alojamiento, explicaremos cómo registrarnos y utilizar un VPS con OVH, auque los pasos a seguir con cualquier otra empresa de hosting serán más o menos similares.

3. Contratación de un VPS con OVH

Como hemos comentado antes, explicaremos los pasos a seguir para contratar un VPS básico con la empresa OVH, por ejemplo, y veremos qué características ofrece dicho VPS. Para empezar, debemos acceder a la web de la empresa.

Como vamos a contratar un producto, deberemos registrarnos desde el Área de cliente en la parte superior, eligiendo después la opción de Crear una cuenta. Si ya somos clientes, podemos loguearnos desde esta misma sección de Área de cliente.

Para elegir el VPS a contratar, vamos a la sección Bare Metal Cloud > Contratar > Servidores Privados Virtuales del menú superior de la página principal (una vez nos hemos logueado)

Veremos los distintos planes de VPS ofertados:

Elegiremos la opción más básica y económica. Si hacemos clic en el botón correspondiente de Contratar, se mostrarán las opciones para configurar nuestra instancia de VPS.

Permite elegir qué distribución de sistema operativo preinstalar. Podemos elegir entre distintas, como Linux Debian, CentOS, Ubuntu… También se ofrecen algunas distribuciones con interfaz gráfica incorporada, como KUbuntu o Windows Server.

Si contratamos el VPS, nos pedirá que especifiquemos algunas opciones más, como nuestra localización (Europa), o el sistema operativo a instalar. En nuestro caso, utilizaremos una distribución Debian. En general no es recomendable utilizar la última, ya que algunas herramientas, como MongoDB, suelen tardar en actualizarse a estas últimas versiones.

3.1. Gestión básica del VPS

Una vez completado el registro, y pasado un tiempo, recibiremos un e-mail de confirmación con los datos para acceder al VPS. A través del área de cliente de la página web, al que se accede con el usuario y contraseña que indicamos al registrarnos, podremos gestionar algunos aspectos: reinstalar el VPS, ampliar sus capacidades, asociar un nombre de dominio, etc.

Inicialmente se asignará un nombre de dominio con un código aleatorio, siguiendo el patrón vps-XXXXXX.vps.ovh.net, siendo XXXXXX el código que se nos haya asignado. Podemos, además, contratar otros nombres de dominio y asociarlos a nuestro VPS, como veremos a continuación.

En la sección de Inicio podemos consultar, entre otras cosas, qué dirección IP se nos ha asignado (IPv4 e IPv6), el nombre del VPS, y en la parte izquierda hay una serie de opciones para, por ejemplo, reiniciar el servidor, o reinstalarlo de nuevo (en el caso de que alguna instalación haya resultado defectuosa y necesitemos volver a empezar, por ejemplo).

3.2. Contratación de un dominio

Un paso habitual si vamos a desarrollar una aplicación web con cierta visibilidad es contratar un nombre de dominio asociado, de forma que podamos acceder a la aplicación con dicho nombre de dominio.

Desde la propia plataforma de OVH podemos contratar el dominio, con diferentes extensiones (.es, .com, .net, .org, .eu…). Podemos, no obstante, utilizar el nombre de dominio vps-XXXXXX.vps.ovh.net que nos han asignado, para hacer webs de uso privado o restringido. También podemos contratar un dominio .ovh si buscamos un precio económico. Estos dominios se suelen ofrecer por entre 1 y 3 euros al año, aproximadamente.

Desde la sección de Web Cloud en nuestra área de clientes podemos contratar el dominio.

Buscaremos primero el dominio que queremos comprar (por ejemplo, maycalle.ovh), y la plataforma nos informará de si está disponible y su precio anual. Una vez seleccionado el dominio en cuestión, los siguientes pasos son:

  1. Opcionalmente, se pueden añadir otros servicios, como el DNS Anycast (que replica el DNS en otros servidores para agilizar el acceso), o DNSSEC, que protege el dominio contra el envenenamiento de DNS (es decir, que sea facilitado por fuentes DNS no autorizadas).
  2. También se puede contratar un alojamiento (hosting) con el dominio. En este caso no es necesario, ya que tenemos un VPS contratado, así que podemos elegir que no necesitamos alojamiento con el dominio.
  3. Podemos especificar las cuentas de correo del propietario, administrador, etc del dominio (se rellenan automáticamente con la cuenta de correo con que nos registramos). También podemos indicar el servidor DNS donde alojar el nombre de dominio (lo normal es elegir el que viene por defecto).

Cuando ya tengamos contratado el dominio con las opciones que hayamos elegido, debemos asociar el dominio al VPS. En la sección Web Cloud de nuestra área de clientes existe una subsección Dominios, donde podemos ver los dominios que tenemos contratados. Haciendo clic en uno de ellos veremos su configuración actual.

En la pestaña de Redirección veremos el dominio con la IP actualmente asignada. Dicha IP corresponde a una página de bienvenida por defecto de OVH. Hacemos clic en el botón de configuración a la derecha de la IP, y elegimos modificar registro. Asignamos la que tenemos asignada a nuestro VPS.

Además, debemos ir a la sección Zona DNS y modificar los registros A (Address Record) para que nuestro dominio apunte a la IP de nuestro VPS.

Pasados unos días tendremos disponible el dominio (de no ser así, deberemos contactar con OVH a través del soporte del panel de cliente para que lo refresquen). Podemos comprobarlo haciendo ping a dicho dominio, y viendo que la IP a la que intenta conectar corresponde con la nuestra.

ping maycalle.ovh
PING maycalle.ovh (92.222.22.170): 56 data bytes...

NOTA: si pasadas 24 o 48 horas seguimos sin tener asociada la IP a nuestro dominio, siguiendo la documentación oficial de OVH, debemos acudir a la misma sección de dominios vista antes, pero en lugar de ir a Redirección, debemos ir a la sección Zona DNS, y hacer clic en el botón Editar en modo texto de la parte derecha. Aparecerá un cuadro para editar la configuración de DNS manualmente, pero basta con que enviemos esta configuración sin más para solicitar que se propague.

Añadir subdominios

Si queremos añadir subdominios de uno contratado (por ejemplo, pruebas.maycalle.ovh), bastaría con acceder a este mismo panel de redirecciones y pulsar el botón de Crear una redirección en la parte derecha. Pondremos el nombre del subdominio:


Después indicaremos a qué lo vamos a redirigir (podemos redirigir a una web, o a un servidor). En este caso, redirigiríamos a nuestro servidor VPS:

Después, elegimos el método de redirección (por IP), y finalmente especificamos la dirección IP, que será la que se nos ha asignado para el VPS. Tras este paso, confirmaremos los datos y quedará el subdominio registrado en las redirecciones.

4. Acceso remoto al VPS

Existen diferentes formas de acceder al VPS para subir archivos, descargarlos o instalar software, entre otras cosas. Analizaremos aquí algunas de las más habituales y/o cómodas.

4.1. Acceso por SSH en terminal para instalar aplicaciones

Una forma rudimentaria, pero útil, de acceder al servidor, es a través de un terminal por SSH. Para ello, tenemos que acceder al nombre del VPS indicado en el correo de confirmación. Por ejemplo, si el nombre es vps-xxxxxxxx.vps.ovh.net, podemos conectar por SSH con usuario root con este comando:

ssh root@vps-xxxxxxxx.ovh.net

En el caso de tener un dominio contratado y ya enlazado con el VPS (por ejemplo, maycalle.ovh), podemos conectar así:

ssh root@maycalle.ovh

Vemos que se antepone el usuario a la dirección del VPS, separados por una arroba. Nos pedirá que introduzcamos la contraseña de root al conectar, y ya podremos acceder. Una vez dentro, y desde el terminal, podremos instalar el software que necesitemos (servidores web, servidores de bases de datos, etc), y también detener o reiniciar estos servicios, como veremos más adelante.

También es posible utilizar algún cliente SSH que recuerde los datos de la conexión para no tenerlos que indicar cada vez. En el caso de Windows y Linux, podemos utilizar OpenSSH, por ejemplo. En el caso específico de Windows disponemos de Solar Putty, que permite, entre otras cosas, tener varias pestañas de terminal abiertas. En lo que respecta a sistemas Mac, podemos emplear la herramienta Termius, por ejemplo. La principal ventaja de estas herramientas es simplemente el recordar los datos de la conexión para no tenerlos que poner cada vez, pero podemos conectar por SSH con un simple terminal del sistema operativo.

4.2. Descarga de aplicaciones mediante git

Si tenemos abierta una sesión SSH, podemos emplear la herramienta git para descargar aplicaciones que tengamos subidas a algún repositorio tipo GitHub, BitBucket o similar. Para ello, basta con que:

  1. Instalemos git, si no lo hemos hecho ya:
sudo apt install git
  1. Registremos de forma global en el sistema nuestros datos de la cuenta de GitHub (e-mail y usuario):
git config --global user.email tu_email@dominio.com
git config --global user.name tu_nick_en_github
  1. Para descargar por primera vez un repositorio remoto, usaremos la orden git clone, seguida de la URL del repositorio a clonar:
git clone url_repositorio_git

NOTA: se creará una subcarpeta con el nombre del repositorio en cuestión.

  1. Para descargar actualizaciones sobre un proyecto previamente clonado, emplearemos el comando git pull, desde la carpeta del proyecto en sí:
git pull

Ejercicio 1:

Instala git en tu VPS y configúralo con tus credenciales

Conectar un repositorio local con un repositorio remoto utilizando VSCode

Si no tenemos ningún repositorio remoto disponible, podemos utilizar VS Code para conectar un repositorio local con un repositorio remoto. Este proceso implica los siguientes pasos:

  1. Creamos un nuevo repositorio en GitHub, BitBucket u otro servicio similar; generalmente esto se puede hacer directamente desde la interfaz web de la plataforma.
    • Accede a tu cuenta de Github
    • Haz clic en “New” o “Nuevo repositorio”
    • Introduce el nombre de tu repositorio y, de forma opcional, una descripción
    • Elige la visibilidad del repositorio (público o privado).
    • No agregues ningún archivo README ni un .gitignore, lo haremos después
    • Finalmente, haz clic en “Create repository” ó “Crear repositorio”.
  2. Inicializamos un repositorio Git desde VS Code
    • Abre tu proyecto en VS Code
    • En la barra lateral, busca el icono de “Control de código fuente” o “Source control” (parece un par de ramas entrelazadas).
    • Haz clic en “Initialize Repository”. Esto creará un nuevo repositorio Git en tu proyecto, similar a usar git init en la terminal.
  1. Seleccionamos los archivos que queramos para hacer commit; podemos agregar archivos a la staging area seleccionándolos y haciendo clic en el símbolo de “más” (+). Esto es equivalente a usar git add en el terminal.


  1. Creamos y confirmamos el primer mensaje de commit
    • En la parte superior de la pestaña de “Control de código fuente”, hay un campo para escribir un mensaje de commit.
    • Una vez escrito el mensaje, haz clic en el ícono de “check” o “confirmación” para realizar el commit. Esto es similar a hacer git commit -m "mensaje" en el terminal.
  2. Conectamos con un repositorio remoto y hacemos push
    • Agregar un repositorio remoto: esto usualmente se hace una vez. Puedes hacerlo en la terminal con: git remote add origin URL_DEL_REPOSITORIO, ya que esta operación específica no tiene una interfaz directa en VS Code.
    • Hacer push de los cambios: en la pestaña de “Source Control”, haz clic sobre “Publicar branch” (subir cambios a la rama principal del repositorio remoto). Esto hará un git push, enviando tus cambios locales a la rama remota que acabas de crear.
  3. Incluir los archivos README.md y .gitignore
    • En tu proyecto local de VS Code crea un fichero README.md con el nombre del proyecto y una breve descripción. Por ejemplo:

Para cualquier nueva modificación que se realice en el proyecto local, es importante seguir un proceso sistemático para asegurarse de que los cambios se registren y se sincronicen correctamente con el repositorio remoto:

4.3. Acceso por cliente SFTP para subir/bajar archivos

Una segunda vía de acceso, aprovechando la conexión SSH citada anteriormente, consiste en utilizar un cliente gráfico que permita conectar con los parámetros anteriores, y ver de forma gráfica el sistema de archivos y carpetas remoto. De esta forma, podremos navegar hasta cualquier carpeta y subir archivos a ella o descargar información.

Uno de los clientes más útiles y cómodos de utilizar para este fin, y que también puede usarse como cliente FTP es FileZilla. Es un cliente multiplataforma que puede descargarse desde su web oficial.

Con el botón de la esquina superior izquierda (Gestor de sitios) podemos configurar una nueva conexión, estableciendo los parámetros. Deberemos indicar el nombre de dominio o servidor al que conectar, y el puerto y protocolo. En nuestro caso, utilizaremos SFTP por SSH, al puerto 22. Indicaremos además nuestro usuario (root) y contraseña de acceso.

Al conectar, veremos en el panel derecho el sistema de archivos del servidor, y en el izquierdo el nuestro local. De esta forma es sencillo subir y descargar archivos.

Podemos emplear esta opción para, por ejemplo, subir el contenido de un proyecto web a su carpeta en el servidor. Aunque no es una opción muy recomendable, porque deja al servidor muy vulnerable. El usuario con que conectamos es root, y por lo tanto tenemos permiso para alterar cualquier carpeta, con el consiguiente riesgo que eso supone.

4.4. Acceso por FTP

Para intentar paliar los problemas de seguridad de la anterior opción, una alternativa consiste en instalar un servidor FTP en nuestro servidor VPS, crear usuarios virtuales con permisos restringidos a una serie de carpetas concretas, y conectar desde un cliente FTP (como el mismo FileZilla, por ejemplo), utilizando esos usuarios.

Como servidor FTP podemos elegir entre varios. Uno de los más habituales, y que no requiere interfaz gráfica para configurarse es vsftpd.

Instalación y puesta en marcha de vsftpd

Para instalar vsftpd, accedemos por SSH (terminal) al VPS. Desde ese terminal SSH, escribimos el siguiente comando para instalar el servidor:

sudo apt-get install vsftpd

Tras la instalación, podemos iniciar y detener el servidor con el correspondiente comando:

sudo /etc/init.d/vsftpd start
sudo /etc/init.d/vsftpd stop
sudo /etc/init.d/vsftpd restart

Configuración básica

Para editar la configuración del servidor, debemos editar el archivo /etc/vsftpd.conf. Conviene hacer una copia de seguridad del archivo original, por si editamos algo que deje inservible el servidor.

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.original

Después, ya podemos editar la configuración

sudo nano /etc/vsftpd.conf

Algunas opciones de configuración interesantes:

Gestión de usuarios

Veamos ahora cómo añadir usuarios con sus respectivas contraseñas, para que puedan conectar por FTP a su carpeta personal.

Paso 1: crear grupo de usuarios. Para identificar mejor a los usuarios que creemos para acceder por FTP, podemos crear un grupo de usuarios a tal efecto. Llamaremos al grupo, por ejemplo, ftp:

sudo groupadd ftp

Paso 2: evitar el acceso por consola al servidor. Para no permitir que estos usuarios encuentren la forma de entrar por terminal al servidor, y acceder así a otras carpetas, creamos lo que se denomina un “shell fantasma”:

sudo mkdir /bin/ftp

Después, editamos el archivo /etc/shells (nano /etc/shells), y añadimos esta línea, referenciando el shell recién creado.

/bin/ftp

Paso 3: evitar el acceso por SSH al servidor. Por defecto, cualquier usuario del sistema puede acceder por SSH al servidor, y de este modo navegar por la estructura de carpetas y archivos. Para evitar esto, editamos el archivo /etc/ssh/ssh_config, y añadimos esta línea (al final, por ejemplo), para dar permiso sólo al usuario root:

AllowUsers root

Después, reiniciamos el servicio SSH:

/etc/init.d/ssh restart

Paso 4: crear al usuario del grupo. Para crear a un usuario que pertenezca a este grupo, en primer lugar le creamos su carpeta de inicio. Si por ejemplo se va a llamar usuarioftp1, lo haríamos así:

mkdir -p /home/ftp/usuarioftp1
chmod -R 777 /home/ftp/usuarioftp1

Después creamos el usuario propiamente dicho:

sudo useradd -g ftp -d /home/ftp/usuarioftp1 -c "FTP 1" usuarioftp1

donde el parámetro -g ftp indica el grupo al que pertenece el usuario, el parámetro -d /home/ftp/usuarioftp1 indica la carpeta que tiene asignada, el parámetro -c "FTP 1" es el nombre del usuario, y finalmente indicamos el login del usuario.

Finalmente, creamos la contraseña del usuario:

sudo passwd usuarioftp1

Conexión desde el cliente

Para conectar desde el cliente a este servidor FTP, utilizamos el cliente FileZilla comentado anteriormente. En este caso, desde el Gestor de sitios creamos una nueva conexión FTP, con el usuario virtual que hayamos añadido previamente.

Al conectar, veremos que estamos restringidos a la carpeta que se ha asignado a dicho usuario.

Esta forma de acceder y subir archivos es más segura, al no poder alterar el contenido de carpetas externas a la indicada en la configuración. Podemos emplear este método para subir archivos como imágenes, vídeos, etc.