Gustavo Huarcaya: Issohttps://gahd.net/tags/Isso2020-08-02T07:38:11.716691+00:00Latest posts in: IssoGustavo Huarcaya - https://gahd.netCrear sitios web estáticos con Python (Pelican + Isso)2014-10-20T03:34:12+00:002020-08-02T07:38:11.716691+00:00Gustavohttps://gahd.nethttps://gahd.net/python/crear-sitios-web-estaticos-con-python-pelican-isso/<p>Cuando empecé en el mundo blogueril, no tenía ni idea sobre que era un CMS, sólo quería escribir o hacer C&P, pues poco me importaba, en aquellos tiempos, desde donde publicar. Desde aquel entonces he probado uno que otro software para crear y mantener un blog: <a href="http://lifetype.net" title="LifeType">LifeType</a>, Blogger, Wordpress, MovableType, Drupal y Ghost.</p>
<p>De todos estos CMS, LyfeType y Wordpress fueron con los que use por más tiempo.</p>
<p>Inicialmente, cuando aún no tenía un dominio propio, use el servicio para blogs que ofrecían CJB.NET, luego LifeType en los servidores de PeruBlog.NET y posteriormente me aventuré a usar Wordpress, primero usando uno de los tantos subdominios y hosting gratis que existían por aquellos tiempos y luego sobre un servidor compartido y dominio propio.</p>
<p>En mi temporada con LifeType (PeruBlog.NET) sólo me encargaba de hacer C&P a todo lo que veía en la blogósfera y con algo de suerte lograba adaptar alguna plantilla de Wordpress al formato de LifeType.</p>
<p>Luego, como todo niño que crece, tuve que dejar el hogar para recorrer nuevos senderos, fue así como me hice con un servidor compartido y levanté un Wordpress; tampoco es que sea la gran cosa, pero... en fin. Tenía un Wordpress autohospedado por el cual gastaba algo de pasta cada cierto tiempo. Hasta aquí todo bien con Wordpress, el tema era con el servidor compartido que tenía, en el último año (2013) tenía pensado hacerme con un VPS por lo que renovar el servidor donde tenía el blog con Wordpress no tenía sentido alguno. Llegó el mes de renovar (febrero 2014) y solo hice un backup de los posts que tenia allí, para marzo ya no tenía blog y tampoco tenía el VPS que había planeado tener para esa fecha, entre el nuevo trabajo y mi mudanza a Lima no tuve el tiempo ni el dinero para el VPS y tampoco el ánimo suficiente para renovar el servidor compartido, así que el blog entro en modo offline.</p>
<p>Según lo planeado tendría que dejar Wordpress por un generador de blog estático o construir un blog desde cero, cualquiera de ellos iría sobre el VPS que planeaba tener, pero no fue así hasta que en agosto (2014) y en vista que el VPS aún no llegaría, decidí probar un generador de blog estático. De la lista de software que encontré en <a href="http://staticgen.com" title="StaticGen">StaticGen</a>, para hacer esta tarea, tenía lo siguientre:</p>
<ul>
<li>Jekyll (Ruby)</li>
<li>Pelican (Python)</li>
<li>Hakyll (Haskell)</li>
</ul>
<p>De estas tres opciones, Jekyll era del que había escuchado más pero como amo Python elegí Pelican para mi blog, aunque tengo planeado usar Hakyll para mi pagina personal y Jekyll para subir los archivos que tengo de la época de PeruBlog.NET y WordPress.</p>
<p>Bien, como ya tenía a Pelican para el blog era hora de levantar anclas e izar las velas. Aquí la receta:</p>
<h2>Pelican + GitHub Pages + Isso</h2>
<p>Esto es una pseudo-mini-guía de como tener un blog con Pelican alojarlo en GitHub Pages y gestionar los comentarios con <a href="http://posativ.org/isso" title="a commenting server similar to Disqus">Isso</a>.</p>
<h3>¿Qué es Pelican?</h3>
<blockquote><p>Pelican es un generador de sitios estáticos, escrito en Python, que no requiere una base de datos[...]</p>
</blockquote>
<p>Pues eso, no es un CMS como Wordpress sino un <em>parser</em> que convierte un fichero correctamente escrito (en uno de los formatos admitidos p.e <a href="http://daringfireball.net/projects/markdown" title="Daring Fireball: Markdown">Markdown</a>) a un archivo HTML.</p>
<p>Alguna de las características que incluye:</p>
<ul>
<li>Escribir contenido en los formatos reStructuredText, Markdown o AsciiDoc</li>
<li>Archivos estáticos y fáciles de almacenar en cualquier lugar (p.e GitHub Pages)</li>
<li>Personalizar la plantilla usando el formato <a href="http://jinja.pocoo.org" title="Jinja2 (The Python Template Engine)">Jinja</a></li>
<li>Publicar contenido en múltiples lenguajes</li>
<li>Feeds Atom/RSS</li>
<li>Resaltado de código</li>
<li>Importar desde WordPress, Dotclear, RSS y otros servicios a Pelican</li>
<li>Un sistema modular de plugins y su correspondiente repositorio.</li>
</ul>
<h3>¿Cómo funciona?</h3>
<p>Pelican funciona así: lo instalas en tu ordenador, generas una estructura de directorios y ficheros mediante el comando respectivo, guardas tus ficheros <em>Markdown</em> dentro del directorio de contenidos y ejecutas Pelican para que convierta los ficheros <em>Markdown</em> a archivos HTML</p>
<h3>Ingredientes</h3>
<p>Inicialmente estuve probando Pelican con Python 2 pero he actualizado para usarlo con Python 3, aquí los ingredientes para generar y mantener un blog estático con Pelican y alojarlo en GitHub Pages:</p>
<ul>
<li>ArchLinux, Slackware, FreeBSD (o el OS de tu preferencia)</li>
<li>Emacs (si prefieres un editor gráfico con previsualización de markdown, puedes usar <a href="https://github.com/cloose/CuteMarkEd" title="Qt Markdown Editor with live HTML preview">CuteMarkEd</a>)</li>
<li>Python 3.5.*</li>
<li>Pelican 3.6.3</li>
<li><a href="https://www.archlinux.org/packages/extra/any/python-virtualenv/" title="virtualenv">python-virtualenv</a></li>
<li>git</li>
<li><a href="https://github.com/davisp/ghp-import" title="ghp-import">ghp-import</a></li>
<li>Markdown</li>
</ul>
<p>Antes de empezar con la instalación de Pelican se deberá de instalar el paquete <code>python-virtualenv</code> para poder crear nuestro entorno virtual y <code>python-pip</code> para instalar Pelican:</p>
<p>Para distribuciones basadas en Arch Linux ya no es necesario instalar Python 3.*, esta ya viene instalada por default, para instalar virtualenv utilizaremos <code>pacman</code></p>
<pre><code># pacman -S python-virtualenv</code></pre>
<p>En Slackware si tenemos que instalar Python 3 y virtualenv vía SlackBuilds</p>
<pre><code>$ cd ~/Slackware
$ wget https://slackbuilds.org/slackbuilds/14.2/python/python3.tar.gz
$ tar -xvzf python3.tar.gz
$ cd python3
$ wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tar.xz
# ./python3.SlackBuild
...
# installpkg /tmp/python3-3.5.2-i486-1_SBo.tgz
$ cd ~/Slackware
$ wget https://slackbuilds.org/slackbuilds/14.2/python/virtualenv.tar.gz
$ tar -xvzf virtualenv.tar.gz
$ cd virtualenv
$ wget https://pypi.python.org/packages/8b/2c/c0d3e47709d0458816167002e1aa3d64d03bdeb2a9d57c5bd18448fd24cd/virtualenv-15.0.3.tar.gz
# ./virtualenv.SlackBuild
...
# installpkg /tmp/virtualenv-13.1.2-i486-1_SBo.tgz</code></pre>
<p>Asi mismo en FreeBSD instalamos Python 3 y virtualenv via <code>pkg</code></p>
<pre><code># pkg install python35
# pkg install python27-virtualenv</code></pre>
<p>Crear un repositorio en GitHub y clonar dentro del directorio <code>~/Projects</code></p>
<pre><code>$ mkdir ~/Projects && cd ~/Projects
$ git clone git@github.com:Diavolo/gnustav.org.git
$ cd ~/Projects/gnustav.org</code></pre>
<p>Con esto tendremos y estaremos dentro del directorio <code>~/Projects/gnustav.org</code> en donde estará el blog.</p>
<p>Al crear el entorno virtual se debe de tener en cuenta que la ruta donde se encuentra instalado Python 3 en FreeBSD no es la misma que en las distribuciones GNU/Linux.</p>
<pre><code>$ virtualenv -p /usr/bin/python3
Using base prefix '/usr'
New python executable in env/bin/python3
Also creating executable in env/bin/python
Installing setuptools, pip, wheel...done.</code></pre>
<p>Y activar el entorno virtual</p>
<pre><code>$ source env/bin/activate</code></pre>
<h3>Instalación de Pelican</h3>
<p>Luego de crear y activar el entorno virtual se procederá a instalar, usando <code>pip</code>, Pelican, Markdown, typogrify y ghp-import:</p>
<pre><code>(env)$ pip install pelican
(env)$ pip install markdown
(env)$ pip install typogrify
(env)$ pip install ghp-import</code></pre>
<p>Al momento de instalar Pelican se instalaran automáticamente una serie de dependencias que no viene al caso mencionarlas aquí.</p>
<h3>Generación de la estructura de nuestro sitio web</h3>
<p>Una vez que Pelican se encuentre instalado, ejecutamos el comando <code>pelican-quickstart</code> y al momento que solicite la ruta donde generar el árbol de directorios ingresaremos un punto (<code>.</code>) para que se genere dentro del directorio donde nos encontramos (<code>~/Projects/gnustav.org</code>), para el resto de opciones podemos seleccionar un valor específico o presionar enter si queremos mantener los parametros por defecto</p>
<pre><code>(env)$ pelican-quickstart
Welcome to pelican-quickstart v3.6.3.
This script will help you create a new Pelican-based website.
Please answer the following questions so this script can generate the files needed by Pelican.
> Where do you want to create your new web site? [.]
> What will be the title of this web site? Diavolo
> Who will be the author of this web site? Diavolo
> What will be the default language of this web site? [en] es
> Do you want to specify a URL prefix? e.g., http://example.com (Y/n)
> What is your URL prefix? (see above example; no trailing slash) http://diavolo.me
> Do you want to enable article pagination? (Y/n)
> How many articles per page do you want? [10]
> What is your time zone? [Europe/Paris] America/Lima
> Do you want to generate a Fabfile/Makefile to automate generation and publishing? (Y/n)
> Do you want an auto-reload & simpleHTTP script to assist with theme and site development? (Y/n)
> Do you want to upload your website using FTP? (y/N)
> Do you want to upload your website using SSH? (y/N)
> Do you want to upload your website using Dropbox? (y/N)
> Do you want to upload your website using S3? (y/N)
> Do you want to upload your website using Rackspace Cloud Files? (y/N)
> Do you want to upload your website using GitHub Pages? (y/N)
Done. Your new project is available at /home/diavolo/Projects/diavolo.me</code></pre>
<p>Terminado la configuración tendremos un árbol con el siguiente aspecto:</p>
<pre><code>gnustav.org
├── content/
├── develop_server.sh
├── fabfile.py
├── Makefile
├── output/
├── pelicanconf.py
└── publishconf.py</code></pre>
<p>En el directorio <code>content/</code> estarán los ficheros <em>Markdown</em> y en el directorio <code>output</code> estarán todos los archvos HTML que generá Pelican y el cual subiremos a GitHub Pages. Los ficheros <em>.py y </em>.sh contienen información de la configuración que se hizo a Pelican al momento de crear la estructura de directorios. Si adicionalmente se desea tocar algo a la configuración como cambiar la forma de los enlaces permanentes de las entradas, enlaces para los feeds, cambiar la plantilla, etc se tendrá que editar los ficheros <code>pelicanconf.py</code>y/o <code>publishconf.py</code>.</p>
<h3><code>pelicanconf.py</code> y <code>publishconf.py</code></h3>
<p>Generalmente la mayoría que configuración se hallará en <code>pelicanconf.py</code> y que podrá ser visualizado cuando se ejecute pelican en modo local. La configuración de <code>publishconf.py</code> (tal como la ruta del feed entre otros) será aplicada cuando queramos generar código HTML para subir al servidor.</p>
<p>El codigo HTML generado con la configuración del fichero <code>pelicanconf.py</code> puede ser subido a producción y el sitio funcionará sin problema, el detalle es que los URL son enlaces relativos mientras que el código generado con la configuración del fichero <code>publishconf.py</code> generará enlaces absolutos motivo por el cual se recomienda subir este último a producción.</p>
<h3>Escribiendo contenido</h3>
<p>Como comenté al inicio, Pelican acepta diferentes formatos para las entradas, en mi caso uso <em>Markdown</em>. Cada fichero <em>Markdown</em> es una entrada y tiene el siguiente formato:</p>
<div class="highlight"><pre><span></span>Title: I'm back... again!
Date: 2014-08-28 00:53
Category: me
Tags: pelican, python
Slug: i-am-back
Authors: Diavolo
Summary: I'm back... again!
I'm back... again!
</pre></div>
<p>Lo guardas dentro del directorio <code>content/</code> y ¡ya está! ahora solo queda ejecutar Pelican para que genere los archivos HTML</p>
<h3>Generación de tu sitio web con Pelican</h3>
<p>La manera por default para generar HTML es usando el comando <code>pelican</code>:</p>
<pre><code>pelican /path/to/your/content/ [-s path/to/your/settings.py]</code></pre>
<p>y luego ver el codigo HTML levantando un simple servidor web en Python</p>
<pre><code>(env)$ cd output
(env)$ python -m http.server</code></pre>
<p><strong>Nota:</strong> En Python 2 utilizar <code>SimpleHTTPServer</code> en lugar de <code>http.server</code>.</p>
<h3>Generación de tu sitio web con Pelican de manera automatizada</h3>
<p>Sin embargo, la generación de codigo HTML con el comando <code>pelican</code>, descrito lineas arriba, puede ser mejorado y automatizado siempre y cuando se haya seleccionado que sí se desea generar ficheros para la automatización de generación y publicación en pelican al momento de generar la estructurta de nuestro sitio con <code>pelican-quickstart</code></p>
<pre><code>> Do you want to generate a Fabfile/Makefile to automate generation and publishing? (Y/n)
</code></pre>
<p>En este caso utilizaremos <code>make</code>:</p>
<pre><code>(env)$ make clean
(env)$ make html
(env)$ make serve</code></pre>
<p><code>make clean</code> limpia el directorio <code>outpout</code>.</p>
<p><code>make html</code> genera el HTML aplicando la configuración del fichero <code>pelicanconf.py</code> (si se desea generar código HTML para producción usando configuración del fichero <code>publishconf.py</code> usar <code>make publish</code>).</p>
<p><code>make serve</code> levanta un servidor en modo local para poder previsualizar el sitio generado en nuestro ordenador.</p>
<p>Si se desea que Pelican automáticamente regenere el sitio (aplicando configuración del fichero <code>pelicanconf.py</code>) cada vez que detecte cambios se puede usar <code>make regenerate</code>.</p>
<p><code>make devserver</code> permite en un solo comando regenerar el sitio (<code>make regenerate</code>) y levantar un servidor local (<code>make serve</code>).</p>
<p>Si todo ha estado bien instalado, se observará que Pelican genera el sitio y nos dará una URL donde se podrá ver el sitio generado <a href="http://localhost:8000">http://localhost:8000</a> y eso es todo, cada vez que se escriba un post generas el HTML y levantas el servidor.</p>
<h3>Subir el blog generado por Pelican a GitHub Pages</h3>
<p>Para subir unicamente los archivos HTML que generó Pelican en el directorio <code>output</code> dentro del branch <code>gh-pages</code> de GitHub se usará <code>ghp-import</code>.</p>
<pre><code>(env)$ make clean
(env)$ pelican content -s publishconf.py
(env)$ ghp-import output
(env)$ git push origin gh-pages</code></pre>
<p>¡Y walá! el blog generado con Pelican ya se encuentra publicado en GitHub Pages.</p>
<p>Luego de esto, se sube los archivos fuente al branch principal, <code>master</code>:</p>
<pre><code>(env)$ git add .
(env)$ git commit -m "I'm back... again!"
(env)$ git push origin master</code></pre>
<h3>Comentarios con Isso</h3>
<p><a href="http://posativ.org/isso" title="a commenting server similar to Disqus">Isso</a> es un sistema para gestionar comentarios similar a Disqus pero Software Libre escrito en Python y que usa SQLite como base de datos. Tiene la opción de importar comentarios de WordPress y Disqus.</p>
<p>Desafortunadamente, <del>al no tener un servidor donde instalar Isso</del> esta parte quedará pendiente. <del>Mientras tanto (y aunque ya nadie comente en estos tiempos) se usará Disqus (aunque no tengamos el control total) con la esperanza de importar los comentarios de los 3 gatos a Isso en un futuro cercano.</del></p>
https://gahd.net/python/crear-sitios-web-estaticos-con-python-pelican-isso/Gustavo Huarcaya - https://gahd.net