Montar servidor node en virtualBox
Tags: node, spanish
Published: 2020-12-08 04:29:41

> Un pequeño resumen desde cero para crear y utilizar una máquina virtualbox con ubuntu y montar un servidor node. 
> _* Créditos para el [tutorial de digital ocean](https://www.digitalocean.com/community/tutorials/como-configurar-una-aplicacion-de-node-js-para-produccion-en-ubuntu-18-04-es), en el cual me basé y completé lo necesario._

# Instalación Virtualbox

Ir a la [sección de descargas de virtual box](https://www.virtualbox.org/wiki/Download_Old_Builds_6_0) y encontrar la adecuada para tu sistema operativo. 

Para instalar Ubuntu puedes seguir cualquier tutorial de los muchos que hay en internet. [Un ejemplo ](https://osl.ugr.es/2020/09/29/como-instalar-ubuntu-en-virtual-box/)

> Mi configuración fue de 1 gb de ram y 4 de disco. Podría ser menos. Probaré con menos

Para mi caso particular configuré el adaptador de puente para la red. De esta forma me da acceso un poco más real a lo que sería un servidor físico (según lo que recuerdo [y la poca investigación que hice)](https://www.adictosaltrabajo.com/2010/05/11/virtualbox/)

Con esto listo ya podemos hacer un simple _ifcongif _en la máquina virtual y te mostrará la Ip asignada.

# Conexion por ssh

Para mi caso particular tengo instalado ubuntu en mi máquina windows. De esta forma puedo entrar en visual studio code, abrir un terminal ubuntu y conectarme por ssh con:

```
ssh nombreusuario@ip_maquina
```

[Puedes seguir un tutorial como este para tener linux en windows](https://www.xataka.com/basics/como-instalar-linux-a-windows-10-ordenador)


# Servir con node

Si seguimos el [tutorial de digital ocean ](https://www.digitalocean.com/community/tutorials/como-configurar-una-aplicacion-de-node-js-para-produccion-en-ubuntu-18-04-es)hay que instalar node


```
sudo apt install nodejs
```


Para luego crear un nuevo archivo con nano y ejecutar node. Al hacer esto hay un pequeño error y no se puede conectar desde el computador físico

Para poder acceder desde el computador físico al server de la máquina virtual hay que modificar una línea de código solamente. 

Donde dice

```
server.listen(port, hostname, () => {

  console.log(`Server running at http://${hostname}:${port}/`);

});
```

Hay que remover la variable “hostname”

```
server.listen(port, () => {

  console.log(`Server running at http://${hostname}:${port}/`);

});
```

Aunque no tiene mucho sentido el mensaje es perfectamente funcional :)

# Convertir en servicio con ayuda

Hacer un servicio en linux (debian he hecho) es bien entretenido pero hay varios temas que tener en cuenta y etc. El tutorial muestra a Pm2 como administrador de procesos para hacer esto. Siguiendo las recomendaciones lo primero que veremos es este mensaje 

Como es una máquina 0 km no tiene instalado el gestor de paquetes npm. Hay que seguir las instrucciones (demora un poco dependiendo de la red que uno tenga). La instalación de pm2 también demora un poco.

Con esto ya podemos hacer 
```
pm2 start index.js
```
para correr el server como servicio (proceso aparte)

Si llegamos a modificar el archivo index.js y no se ven los cambios reflejados sólo hay que hacer 
```
pm2 restart all
```
para recargar el server (no es necesario indicar el all si se tiene claro cuál es el proceso que se quiere reiniciar, para saber el proceso hay que correr pm2 list_)


# Subiendo archivos

Algo no cubierto en el tutorial principal es cómo le hacemos para subir archivos a nuestro nuevo servidor. Para esto (solo en sistemas basados en unix) podemos utilizar el comando scp, que nos permite transferir archivos vía ssh. El siguiente comando permite copiar un archivo al servidor objetivo.

```
_scp -r ./archivo_1 ./archivo_2 _nombreusuario@ip_maquina
://ruta/directorio/objetivo
```

Si quieres mandar más de un archivo se puede hacer comprimir 

```
_tar -cvf nombreArchivoCompreso.tar ./directorioAComprimir_
```

Y luego enviar con scp…

En el servidor se puede descomprimir por ejemplo al directorio actual con:

```
_tar -xf nombreArchivoCompreso.tar -C ._
```

# Abrir Visual Studio Code remoto por ssh

Es posible utilizar Visual Studio code para conectarse directamente al servidor virtual y editar el código y acceder a una terminal.

Es necesario instalar la [extensión de ssh para visual studio](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh) y seguir las instrucciónes.

Básicamente es configurar un archivo para definir el server y luego conectarse a una carpeta remota particular.

# Aplicaciones Front-end

[siguiendo recomendaciones de react js](https://create-react-app.dev/docs/deployment/) podemos ver que se puede utilizar a http o serve para servir nuestra app front-end.

Si es necesario utilizar algo un poco más robusto que http para servir tu proyecto frontend  tendremos que utilizar por ejemplo express js. Hay que instalarlo con _sudo npm install -g express_

Se puede utilizar [el generador de aplicaciones express](https://expressjs.com/es/starter/generator.html) para rápidamente tener un esqueleto de una app, luego se puede subir todo el contenido de la app estática (front-end) y desplegarla con pm2.