Datosfera Lab/Toolforge Tutorial
Apariencia
Despliegue de proyectos Node.js en Toolforge
[editar]Preparación según tu flujo
[editar]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>