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.
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:
En primer lugar, debemos contar con alguna ubicación pública (accesible desde cualquier lugar) donde instalar el servidor y la(s) web(s). Dependiendo de las características del proyecto en sí, y de las posibilidades económicas de la empresa, existen varias opciones, que veremos a continuación.
En segundo lugar, debemos disponer de algún mecanismo para enviar y descargar información de esa ubicación, como por ejemplo una conexión SSH y/o una conexión FTP. De esta forma, podremos, entre otras cosas, subir el contenido de la web al alojamiento, o los cambios que vayamos realizando en un futuro, y por SSH instalar el software que necesitemos (servidores web, SGBD, FTP, etc.)
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.
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.
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.
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.
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.
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).
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:
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.
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.
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.
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:
git
, si no lo hemos hecho ya:sudo apt install git
git config --global user.email tu_email@dominio.com
git config --global user.name tu_nick_en_github
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.
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:
git init
en la terminal.git add
en el terminal.git commit -m "mensaje"
en el terminal.git remote add origin URL_DEL_REPOSITORIO
, ya que esta operación específica no tiene una interfaz directa en VS Code.git push
, enviando tus cambios locales a la rama remota que acabas de crear.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:
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.
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:
listen=YES
. Si esta línea está configurada como NO, el servidor no se iniciará automáticamente con el sistema al arrancar. Si lo ponemos a YES, sí lo hará, pero en este caso, debemos dejar comentada esta otra línea para que no haya conflicto:. #listen_ipv6=YES
anonymous_enable=NO
. Esta opción conviene dejarla así, y sin comentar, para evitar un acceso anónimo (sin cuenta de usuario) al FTPlocal_enable=YES
y write_enable=YES
. Estas dos líneas permiten que los usuarios locales del sistema puedan acceder con su cuenta al servidor FTP, y modificar la estructura de carpetas y archivos de forma remota, respectivamente. Podemos dejar las líneas así, sin comentar, y luego restringir a cada usuario a su carpeta para que no altere el sistema de archivos general.pam_service_name=vsftpd
. Esta opción establece el servicio que se utilizará para autenticar a los usuarios. En nuestro caso no va a depender de vsftpd, ya que son usuarios locales. Podemos cambiarlo por esto: pam_service_name=ftp
chroot_local_user=YES
. Esta opción limita el acceso de los usuarios a su carpeta de inicio, no pudiendo acceder al resto del sistema. Es una opción recomendable para evitar problemas de alteración de archivos y carpetas no deseados. En caso de ponerla, también conviene añadir esta otra, para que luego al conectar al servidor nos deje modificar la carpeta y sus contenidos (de lo contrario puede dar error al conectar): allow_writeable_chroot=YES
. Existen otras opciones relacionadas con ésta, que permiten tener una lista de usuarios que sí pueden acceder a todo el sistema, pero en general no es buena idea hacer eso. El usuario root siempre puede acceder por SSH a todo el sistema, y el resto no tiene por qué hacerlo. Así que nos debemos asegurar de que estas dos líneas estén comentadas para que no tengan efecto: #chroot_list_enable=YES
y
#chroot_list_file= (un nombre de archivo)
.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.