Configurando repositório pypi na rede interna

Introdução

O repositório pypi, é conhecido entre seus usuários por ficar varias vezes e muito tempo indisponível. Para solucionar este problema, foi criado este artigo.

Escopo

  • Debian Linux Like ou Red Hat Linux Like
  • Python-2.7
  • devpi-server
  • devpi-web
  • devpi-client
  • nginx
  • supervisor 

Requisitos

Red-Hat Like:

# yum groupinstall "Development tools"
# yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

Debian Like:
# aptitude install build-essential zlib1g-dev zlibc libncurses5-dev libsqlite0-dev libreadline-dev tk-dev

Python-2.7:



Configuração

Partido do pressuposto que o sistema operacional Linux, esteja completamente configurado e funcional, dividimos a configuração em 5 etapas:
  1. devpi-server
  2. devpi-web
  3. nginx
  4. supervisor
  5. cliente



devpi-server

  • #virtualenv-2.7 /opt/env-buildout/prod/devpi-server/py27
  • #/opt/env-buildout/prod/devpi-server/py27/bin/activate
  • #pip install -qU devpi-server
  • #devpi-server --version
Para iniciá-lo em foreground, execute:
#devpi-server
Para iniciá-lo em background, execute:
#devpi-server --start
Para verificação de status, execute:
#devpi-server --status
Para finalizá-lo, execute:
#devpi-server --stop
Iniciá-lo com acesso remoto e diretório para armazenamento, execute:
#devpi-server --port 3141 --host 0.0.0.0 --serverdir=/storage/devpi/



devpi-web

  • #source /opt/env-buildout/prod/devpi-server/py27/bin/activate
  • #pip install -qU devpi-web
Iniciá-lo em modo web predefinindo o diretório para armazenamento, execute:
#devpi-server --port 3141 --host 0.0.0.0 --serverdir=/storage/devpi/
A partir deste ponto poderá ser testado na URL definida, em qualquer navegador.
http://localhost:3141
http://192.168.25.224:3141
http://mirror.incolume.com.br:3141



nginx

  • # virtualenv-2.7 /opt/env-buildout/prod/nginx/py27
  • # cd /opt/env-buildout/prod/nginx/
  • # source py27/bin/activate
  • # pip install zc.buildout
  • # cd /opt/env-buildout/prod/nginx/
  • # mkdir -pv cache-buildout/downloads sites-available sites-enabled templates /storage/devpi
  • # buildout buildout:develop-eggs-directory=cache-buildout/develop-eggs buildout:download-cache=cache-buildout/downloads buildout:eggs-directory=cache-buildout/eggs buildout:extends-cache=cache-buildout/extends buildout:fake-eggs-directory=cache-buildout/fake-eggs buildout:zope-directory=cache-buildout/zope init
  • # wget http://pastebin.com/raw.php?i=gyAE67GC -O buildout-nginx.cfg
  • # wget http://pastebin.com/raw.php?i=r1ae5LeY -O sites-available/devpi.conf.in
  • # wget http://pastebin.com/raw.php?i=VCMw7XYU -O templates/nginx.conf.in
  • # wget http://pastebin.com/raw.php?i=L0q7kriY -O templates/nginx-ctl.in
  • # ./bin/buildout -vNc buildout-nginx.cfg
  • # ./bin/buildout -vNc buildout-nginx.cfg




supervisor

  • # virtualenv-2.7 /opt/env-buildout/prod/supervisor/py27
  • # cd /opt/env-buildout/prod/supervisor/
  • # mkdir -pv cache-buildout/downloads
  • # source py27/bin/activate
  • # pip install zc.buildout
  • # wget http://pastebin.com/raw.php?i=uBM0JqMH -O supervisor-nginx.cfg
  • # buildout buildout:develop-eggs-directory=cache-buildout/develop-eggs buildout:download-cache=cache-buildout/downloads buildout:eggs-directory=cache-buildout/eggs buildout:extends-cache=cache-buildout/extends buildout:fake-eggs-directory=cache-buildout/fake-eggs buildout:zope-directory=cache-buildout/zope init
  • # ./bin/buildout -vNc supervisor-nginx.cfg
  • # ./bin/buildout -Nc supervisor-nginx.cfg
  • # ./bin/supervisord
  • #sudo wget http://pastebin.com/raw.php?i=qwFyVxW7 -O /etc/init.d/supervisord.sh


Para iniciá-lo, execute:
#./bin/supervisord

Para verificação de status, execute:
#./bin/supervisorctl status

Para finalizá-lo, execute:
#./bin/supervisorctl shutdown

Cliente

Para o cliente há duas formas de realizar a configuração.

Configuração manual dos cliente

Para configuração manual dos clientes há dois modos distintos:
  1. Altere os arquivos sugeridos no artigo Brito:Configuração personalizada para repositórios pypi; ou
  2. inserir a diretiva ( index = http://mirror.incolume.com.br/root/pypi/+simple/ ) nos arquivos de buildout, inserir o index nos pip e easey_install (ex.: pip install -i http://mirror.incolume.com.br/root/pypi/+simple/ )



Configuração automática dos cliente

  • # virtualenv-2.7 /tmp/py27
  • # cd /tmp/py27
  • # source py27/bin/activate
  • # pip install --pre -Uq devpi-client
  • #
  • # devpi use intranet/dev --always-set-cfg=yes



Conclusão

Esta é uma excelente solução para o problema e de quebra, ainda pode ser usada para agregar pacotes de desenvolvimento próprios, e ainda antes de incorporar os fontes, é feito automaticamente uma auditoria de código.


Referências

Como instalar um pypi em um servidor Local.


Comentários