Notxor tiene un blog

Defenestrando la vida


Montar un servidor http local para pruebas.

La necesidad

A vueltas con la nueva solución para mi blog estático, me encuentro que no es tan estático como debería ser. No sólo por haberle puesto algún script para gestionar los comentarios.

El problema que me he encontrado es que los paths que utiliza org-page para los enlaces a cosas internas, como las imágenes o los ficheros de otros artículos, comienzan todos por «/» y son, por tanto, absolutos dentro del servidor. No sé si eso se podría configurar, no encuentro ninguna opción que me lo permita. Con el sistema anterior, aún no teniendo un servidor en marcha, era capaz de navegar el blog. Con este sistema, una vez generados los ficheros del blog, no se pueden navegar, no funcionan los enlaces.

Al principio, utilizaba el mismo sistema de emacs: lanzaba desde el mismo emacs con M-x op/do-publication-and-preview-site el servidor interno y lo detenía con M-x httpd-stop. org-page generaba directamente una estructura de ficheros y cada artículo lo guarda en un fichero index.html dentro de un chorizo de directorios del estilo:

/tema/año/mes/día/título-del-artículo/

El sistema anterior generaba sólo un fichero con un nombre del estilo título-del-artículo.html y los guardaba todos en el mismo directorio. El problema que me encontré es que para org-page el directorio ./ para generar los enlaces de las imágenes, por ejemplo, es /tema/año/mes/día/. Sin embargo, para el resto de los servidores ese directorio es el mismo donde se encuentra el fichero index.html.

En resumen, si pongo la imagen donde se ve con el servidor de emacs no se verá en el servidor remoto cuando suba el blog. Si lo pongo donde se ve en el servidor remoto, en local no veo correctamente la página para hacerme una idea de cómo quedará, por si hubiera que hacer algún cambio antes de subirlo.

¿Cómo solucionar esto? Pues montando un servidor de pruebas.

Montando un servidor

Montar un servidor como Apache o cualquier otro me parecía una salvajada. En recursos y en quebraderos de cabeza. Así que me puse a recordar que había otros sistemas locales montados sobre algunos módulos o paquetes como Python o PHP, dos lenguajes que se utilizan para el desarrollo web. Supongo que habrá otros sistemas, pero me centraré en los que conozco y que he empezado a utilizar.

La opción de Python

Python es uno de mis lenguajes favoritos y el que más utilizo normalmente para mis cosas. Aunque en la actualidad estoy sufriendo una invasión en todos los ámbitos de emacs y éste trae de fábrica el Lisp. Supongo que si sigue con el rumbo actual, terminaré moviéndome más hacia elisp o incluso me estoy mirando seriamente guile como alternativa a mis scripts.

Pero vamos al tema: necesito un servidor de pruebas y me acordé del que viene instalado con el propio Python. Bueno, de los que vienen con dicho lenguaje según tengamos instalado una versión de Python u otra.

¿No sabes que versión tienes instalada? Pues teclea lo siguiente:

python -V

Y mira qué responde. Si la respuesta es del tipo 2.x o del tipo 3.x es importante pues el comando variará de una a otra versión:

python -m SimpleHTTPServer [puerto]      # Para Python 2.x
python -m http.server [puerto]           # Para Python 3.x

Hacerlo funcionar es muy sencillo: ir al directorio donde se ha hecho el deploy del blog y lanza el sistema con el comando correspondiente.

La opción PHP

En realidad, mi primera opción fue Python, pero también he probado con PHP, más con la esperanza de que el plugin de los comentarios, ya que utiliza este lenguaje para trabajar, funcionase. Si hubiera sido así, seguramente seguiría utilizándolo. El comando que se utiliza es:

php -S host:puerto

Y se emplea de forma similar a los de Python.

Conclusión

Mi forma de trabajar ha variado un poco para afinar todos esos detalles. Por ejemplo, antes guardaba todas las imágenes en un directorio images y tenía que arreglar problemas de colisión de nombres de basura que quedaba si eliminaba un artículo y no me preocupaba de qué ficheros enlazaba. Con el sistema actual, guardo en el mismo directorio el artículo y sus enlazados, como imágenes y otros ficheros adjuntos. Si borro un artículo, desaparecerá todo y no tendré que estar buscando en un directorio enorme una o dos imágenes. Además, si me apeteciera (que no es lo habitual), llamar a las imágenes imagen01.png, imagen02.png, estaré seguro de que no habrá ningún conflicto de nombres porque estos sólo tendrán sentido dentro de cada artículo.

También ha cambiado, en que lanzo el servidor desde una consola externa y la mantengo abierta:

notxor:~> cd ~/public_html
notxor:~/public_html> python http.server 8080
Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080) ...

Cuando hago cambios los subo al directorio public_html con el comando op/do-publication, abro el navegador, o si lo tengo abierto, refresco el contenido y así trabajo.


Comentarios

Debido a algunos ataques mailintencionados a través de la herramienta de comentarios, se ha decidido activar un filtro antispam y guardar las direcciones IP con el único objeto de añadir a la lista de bloqueos las que correspondan a spam y otras actividades maliciosas.

Disculpen las molestias.