Ir al contenido

Datosfera Lab/Toolforge Tutorial

De Wikimedia Colombia

Despliegue de proyectos Node.js en Toolforge

[editar]

Preparación según tu flujo

[editar]
  1. Crear el repo en Toolforge.
  2. Subir el código a GitLab.

Convenciones oficiales

[editar]

Para que `toolforge webservice` funcione, el proyecto debe cumplir estas reglas.[1]

  • Debe existir `~/www/js/package.json`.
  • Ejecutar `npm start` en `~/www/js` debe levantar el servidor.
  • El servidor debe escuchar `process.env.PORT` (en Kubernetes es 8000).

Paso a paso

[editar]

1. Conectarse y convertirse en el tool

[editar]

Entra por SSH y usa `become` para trabajar con la cuenta del tool.

ssh -i ~/.ssh/id_ed25519 <USUARIO_SHELL>@<BASTION_HOST>
become <NOMBRE_DEL_TOOL>

2. Crear la carpeta de despliegue

[editar]

La raíz del proyecto debe quedar en `~/www/js`.

mkdir -p ~/www/js
cd ~/www/js

3. Clonar el repo en la ubicación correcta

[editar]

La doc oficial indica clonar el repo directamente en `~/www/js` para que el `package.json` quede ahí.

git clone <URL_DEL_REPO> .

4. Si ya clonaste en una subcarpeta, mover archivos

[editar]

Si el repo quedó en una carpeta interna, mueve todo al nivel de `~/www/js` para cumplir la convención de `package.json` en la raíz.

rsync -a <CARPETA_DEL_REPO>/ $HOME/www/js/

5. Configurar server.js

[editar]

El servidor debe usar `process.env.PORT` y vivir en `~/www/js/server.js`

// server.js
const http = require("http");
const next = require("next");

const port = Number.parseInt(process.env.PORT, 10);
const hostname = "0.0.0.0";

const app = next({ dev: false, hostname, port });
const handle = app.getRequestHandler();

app.prepare().then(() => {
  http.createServer((req, res) => handle(req, res))
    .listen(port, hostname, (err) => {
      if (err) {
        console.error("Failed to start server", err);
        process.exit(1);
      }
      console.log(`Server ready on http://${hostname}:${port}`);
    });
}).catch((err) => {
  console.error("Next.js failed to prepare:", err);
  process.exit(1);
});

6. Configurar package.json

[editar]

`npm start` debe iniciar el servidor. La forma más simple es apuntar a `server.js`.

{
  "scripts": {
    "start": "node server.js"
  }
}

Si necesitas build (por ejemplo Vite o Next), puedes incluirlo en el start.

{
  "scripts": {
    "start": "npm install && npm run build && node server.js"
  }
}

7. Instalar dependencias en el shell del webservice

[editar]

Usa el shell del webservice para tener una versión moderna de Node.js.

toolforge webservice node20 shell
cd ~/www/js
npm install
exit

8. Iniciar el servicio y revisar logs

[editar]
toolforge webservice node20 start
toolforge webservice node20 logs


9. Reiniciar tras cambios

[editar]
toolforge webservice node20 restart


10. Depuración con Kubernetes

[editar]
kubectl get pods
kubectl logs -f <POD_NAME>


Referencias

[editar]
  1. Help:Toolforge/Node.js