Curso de servidores linux
Creando el servidor
La idea será crear un servidor web que, cuando alguien acceda, muestre:
- 📅 Fecha actual
- ⏰ Hora actual
- 🌅 Momento del día: mañana, tarde o noche
Voy a hacerlo con Node.js + Express, que encaja genial con lo que ya sueles trabajar.
Idea general (qué vamos a construir)
Arquitectura mental sencilla:
Navegador ──► Servidor Node.js ──► Calcula fecha y hora ──► Respuesta HTML/JSON
El servidor:
- obtiene la hora del sistema
- decide si es mañana / tarde / noche
- responde al navegador con esa info
Requisitos previos
En tu máquina (Linux Mint, Windows o VM):
1node -v 2npm -v
Si no están:
1sudo apt install nodejs npm # en Linux
Crear el proyecto
1mkdir servidor-fecha-hora 2cd servidor-fecha-hora 3npm init -y 4npm install express
Estructura mínima:
servidor-fecha-hora/
├── index.js
├── package.json
Código del servidor básico
📄 index.js
1import express from "express"; 2 3const app = express(); 4const PORT = 3000; 5 6app.get("/", (req, res) => { 7 const now = new Date(); 8 9 const fecha = now.toLocaleDateString("es-ES"); 10 const hora = now.toLocaleTimeString("es-ES"); 11 12 const horas = now.getHours(); 13 let momento; 14 15 if (horas >= 6 && horas < 14) { 16 momento = "☀️ Mañana"; 17 } else if (horas >= 14 && horas < 20) { 18 momento = "🌇 Tarde"; 19 } else { 20 momento = "🌙 Noche"; 21 } 22 23 res.send(` 24 <h1>🖥️ Servidor de Fecha y Hora</h1> 25 <p><strong>Fecha:</strong> ${fecha}</p> 26 <p><strong>Hora:</strong> ${hora}</p> 27 <p><strong>Momento del día:</strong> ${momento}</p> 28 `); 29}); 30 31app.listen(PORT, () => { 32 console.log(`Servidor funcionando en http://localhost:${PORT}`); 33});
⚠️ Si usas "type": "module" en package.json (como prefieres), este código es correcto.
Si no, dime y lo adaptamos a require.
Arrancar el servidor
1node index.js
Abre el navegador:
http://localhost:3000
🎉 ¡Ya tienes tu servidor funcionando!
Creando el servicio de sistema
Ahora vamos a hacer que este servidor se ejecute como un servicio de sistema en Linux, para que: * Se inicie automáticamente al arrancar el ordenador * Se ejecute en segundo plano * Permita acceso desde otras máquinas de la red (Windows)
- Ajustar el servidor para escuchar en red
- Crear un servicio systemd
- Hacer que se inicie al arrancar el ordenador
- Permitir acceso desde Windows
- Probar y depurar
Ajuste previo del servidor (MUY IMPORTANTE)
Por defecto Express escucha solo en localhost.
Para acceder desde otra máquina hay que escuchar en todas las interfaces.
📄 index.js (cambio clave 👇)
1app.listen(PORT, "0.0.0.0", () => { 2 console.log(`Servidor funcionando en http://0.0.0.0:${PORT}`); 3});
🔹 0.0.0.0 = acepta conexiones desde cualquier IP de la red
Decide dónde vivirá el servidor (buena práctica)
Vamos a moverlo a /opt, típico para servicios propios.
1sudo mkdir /opt/servidor-fecha-hora 2sudo cp -r servidor-fecha-hora/* /opt/servidor-fecha-hora 3sudo chown -R $USER:$USER /opt/servidor-fecha-hora
Instala dependencias ahí:
1cd /opt/servidor-fecha-hora 2npm install
Crear el servicio systemd
📄 /etc/systemd/system/fecha-hora.service
1sudo nano /etc/systemd/system/fecha-hora.service
Contenido completo:
1[Unit] 2Description=Servidor Fecha y Hora Node.js 3After=network.target 4 5[Service] 6ExecStart=/usr/bin/node index.js 7WorkingDirectory=/opt/servidor-fecha-hora 8Restart=always 9User=angel 10Environment=NODE_ENV=production 11 12[Install] 13WantedBy=multi-user.target
⚠️ Cambia User=angel si tu usuario es otro.
Activar el servicio
1sudo systemctl daemon-reload 2sudo systemctl enable fecha-hora 3sudo systemctl start fecha-hora
Comprueba estado:
1systemctl status fecha-hora
✔️ Debe aparecer como active (running)
Ver logs (fundamental para depurar)
1journalctl -u fecha-hora -f
Esto es oro cuando algo falla 👌
Permitir acceso desde la red
🔍 Averigua la IP del Linux
1ip a
Ejemplo:
192.168.1.50
Firewall (si está activo)
Comprueba:
1sudo ufw status
Si está activo, permite el puerto:
1sudo ufw allow 3000 2sudo ufw reload
Acceder desde Windows
Desde el navegador de Windows:
http://IP_DEL_LINUX:3000
Ejemplo:
http://192.168.1.50:3000
🎉 Si ves la fecha y hora → misión cumplida
Comprobación final (muy didáctica)
🔁 Reinicia el Linux:
1sudo reboot
Cuando arranque:
- NO ejecutes nada
- Desde Windows accede de nuevo
👉 Si funciona, el servicio está bien hecho ✅