PyPi no responde
Cuántas veces nos ha pasado que nos encontramos trabajando en un proyecto en el que necesitamos instalar paquetes de python y nos damos cuenta de que no podemos continuar porque PyPi está caida.
A mi personalmente me ha ocurrido ya en varias ocasiones, sobre todo realizando despliegues de aplicaciones web de forma automatizada, lo cual es bastante frustrante puesto que no puedes seguir avanzando en tu trabajo.
Hace no mucho conocí una receta de buildout llamada z3c.pypimirror [1] y se me encendió la bombilla. Esta receta nos permite crear un mirror completo o parcial de PyPi.
De modo que este pasado finde busqué un hueco y me puse a trabajar en una configuración buildout llamado pypi-mirror [2] que facilitara la creación de un mirror de PyPi :-)
Para construirnos nuestro propio mirror de PyPi solamente tendremos que seguir unos sencillos pasos:
1. Descargar el proyecto pypi-mirror
git clone git://github.com/mviera/pypi-mirror.git
2. Configurar el fichero buildout.cfg:
- mirror-base: directorio donde se almacenarán los paquetes del mirror.
- url: la URL que utilizaremos para acceder a nuestro mirror.
3. Resolver las dependencias del instalador.
- gcc
- GNU make
- libpcre3-dev
- libssl-dev
4. Ejecutar bootstrap.py para crear el entorno base
python2.6 bootstrap.py
5. Ejecutar la instalación
./bin/buildout
Al final, y si todo va bien, se nos mostrará las instrucciones a seguir tras finalizar la instalación. En resumen, solamente tendremos que ejecutar el siguiente comando para iniciar la sincronización de nuestro mirror con PyPi:
./bin/pypimirror -I -c -v etc/pypi/pypimirror.cfg
Bien, hora de irte de compras con tu novia, si, aunque no te guste, pero creeme esto va a tardar. Aprovecha para plantar un árbol, tomar unas cervezas con los amigos, etc. Actualmente son 17GB de puro python.
Además el instalador configura una tarea cron para mantener actualizado el mirror cada dos horas. Puedes ver la configuración de esta tarea cron de la siguiente forma:
crontab -l
Una vez finalizada la sincronización con el mirror. Solamente tendremos que publicar dicho contenido con un servidor web. Como no podria ser menos, el instalador ya ha compilado un servidor Nginx y lo ha configurado por ti. Solamente tendremos que levantar el servicio, y lo haremos de la siguiente forma:
./bin/supervisord
Con esto tendremos un servidor Nginx en el puerto 8080 y un servidor Supervisor en el puerto 9000.
Podremos controlar el servidor Nginx a través de la interfaz web de administración de Supervisor accesible en http://localhost:9000, permitiendo el arranque, parada y reinicio del mismo.
Para más información, consultar con la documentación [3] de pypi-mirror.
Espero que os sea de utilidad! Ahora no teneis escusa para crearos vuestro propio mirror de PyPi!
Enjoy!
[1] http://pypi.python.org/pypi/z3c.pypimirror
[2] http://github.com/mviera/pypi-mirror
[3] http://github.com/mviera/pypi-mirror/blob/master/README