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)

  1. Ajustar el servidor para escuchar en red
  2. Crear un servicio systemd
  3. Hacer que se inicie al arrancar el ordenador
  4. Permitir acceso desde Windows
  5. 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 ✅