Coding Frenzy

El blog de desarrollo web de Leandro Barone

Aplicación Node.js en GoDaddy (actualizado 2019)

Siguiendo estas instrucciones logré montar mi aplicación CodeCase hecha con Node.js y MySQL en un plan de hosting compartido de GoDaddy.

Los pasos son:

  1. Obtener acceso SSH al servidor
  2. Instalar y configurar NVM
  3. Configurar Apache
  4. Configurar Cron

Este tutorial asume que sabés usar un shell remoto de Linux y el cPanel.

1. Obtener acceso SSH al servidor

Primero tenemos que habilitar el acceso SSH desde el dashboard de GoDaddy (no el cPanel). Nos logueamos en el sitio de GoDaddy, vamos a la lista de planes de hosting contratados, tocamos "administrar", y en el apartado "settings", donde dice "SSH access", tocamos "manage" y activamos esta función.

¡Ojo! Incluso si esta opción ya está activada, es posible que tengas que desactivarla y volverla a activar. Antes de hacer eso me tiraba un error similar a "SSH disabled, contact your administrator" al intentar loguearme.

En este mismo dashboard podemos tomar nota de la IP del servidor y el nombre de usuario del cPanel, que también es nuestro usuario de SSH. También podemos cambiar la contraseña.

Con esta información accedemos via SSH a nuestra cuenta.

2. Instalar NVM

NVM es un administrador de versiones de Node.js que no necesita root.

Nos dirigimos al GitHub de NVM, y en "installation and update" copypasteamos y ejecutamos el comando cURL de instalación de la última versión, que se ve más o menos así:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

Cerramos la sesión SSH, la volvemos a abrir, y verificamos que NVM esté funcionando con:

nvm --version

GoDaddy usa una distribución vieja de Linux que tiene una versión desactualizada de glibc, así que no vamos a poder instalar la última versión de Node. Por suerte las versiones viejas todavía están soportadas. Vamos a instalar la última subversión de Node 8 con estos comandos:

nvm install --lts=carbon
nvm alias default node

Nuevamente cerramos y volvemos a abrir la sesión SSH y verificamos que Node esté instalado:

node -v

Luego copiamos nuestra aplicación al servidor con nuestro método favorito (GitHub, FTP, SSH, etc.), instalamos los módulos con npm install si corresponde, y la ejecutamos en modo background (atento al & al final)

nohup node [ruta del script] &

Para detenerla listamos los procesos con ps aux y lo matamos con kill [id de proceso].

3. Configurar Apache

Apuntamos nuestro dominio a un directorio público de manera normal, como si fuéramos a publicar un sitio estático HTML. En este directorio creamos un archivo .htaccess con las siguientes directivas:

DirectoryIndex disabled
RewriteEngine on
RewriteRule (.*) http://localhost:[puerto donde corre Node]/$1 [P,L]

¡Listo! Nuestra aplicación debería ser accesible.

4. Configurar Cron

Todavía no tuve oportunidad de probar esto porque mi cuenta de GoDaddy está en un servidor que tiene un año de uptime, pero si por alguna razón el servidor se cae, sería bueno que Node se ejecutara al inicio. Para esto utilizamos el siguiente comando:

crontab -e

E insertamos la siguiente tarea en una línea nueva:

@reboot nohup [ruta del ejecutable de Node] [ruta del script] &

(Usa la interfaz de VIM: i para insertar, :wq para guardar y salir.)

La ruta del ejecutable de Node es algo parecido a:

~/.nvm/versions/node/v8.16.0/bin/node

Edit 3/Jul/19: La tarea Cron necesita la ruta completa de Node.