Ambiente Plone 2.5.5 + virtualenv


Introdução

Como já deve ser de conhecimento de todos, o plone.org, descontinuou o Plone 2.5.5, e recomenda, se possível, a atualização para uma versão mais recente.

Mas como em muitos casos, não é possível a atualização, e faz-se necessário uma nova instância. Isto por vários motivos, pode ser para aplicar uma modificação pontual no ambiente, ou apenas um produto conflitante zope, ou plone, ou algo estrutural como produtos python, ou simplesmente para manter o legado.

O virtualenv possibilita a utilização de um encapsulamento, do tipo instancia python, que permite a total personalização e independência, sem dano ou modificação da instalação principal. Permitindo assim a criação de um envolucro hermético isolado, sem comprometimento ou conflito, inclusive entre os componentes compartilhados da estrutura.

descrição

Sera criado 2 clusters com 3 instancias cada, sendo 1 zope-server e 2 zope-cliente; com o objetivo de balancear o processamento.


O primeiro cluster (env001) rodará com as porta 8100(server), 8101(client1) e 8102(client2);


O segundo cluster (env002) rodará com as porta 8200(server), 8201(client1) e 8202(client2);


ESCOPO

O escopo de customização está limitado ao seguinte Ambiente:
Sistema Operacional Linux
http://distrowatch.com/

Plone-2.5.5-UnifiedInstaller
https://launchpad.net/plone/2.5/2.5.5/+download/Plone-2.5.5-UnifiedInstaller.tgz

Virtualenv
http://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.7.1.2.tar.gz


  • O sistema Operacional poderá ser qualquer um Linux, não será abordado instalação em outro sistema operacional neste artigo;
  • O Plone 2.5.5 é a ultima revisão estável da versão 2, e possui os seguintes pacotes incorporados e respectivas versões:
    Plone-2.5.5-UnifiedInstaller/packages/elementtree-1.2.6-20050316.tar.gz
    Plone-2.5.5-UnifiedInstaller/packages/HelperScripts.tgz
    Plone-2.5.5-UnifiedInstaller/packages/Imaging-1.1.6.tar.bz2
    Plone-2.5.5-UnifiedInstaller/packages/jpeg-6b.tar.bz2
    Plone-2.5.5-UnifiedInstaller/packages/libxml2-2.6.30.tar.bz2
    Plone-2.5.5-UnifiedInstaller/packages/libxml2-python-2.6.21.tar.bz2
    Plone-2.5.5-UnifiedInstaller/packages/libxslt-1.1.22.tar.bz2
    Plone-2.5.5-UnifiedInstaller/packages/Plone-2.5.5.tar.bz2
    Plone-2.5.5-UnifiedInstaller/packages/Python-2.4.4.tar.bz2
    Plone-2.5.5-UnifiedInstaller/packages/python-openid-2.0.1.tar.bz2
    Plone-2.5.5-UnifiedInstaller/packages/PyXML-0.8.4.tar.bz2
    Plone-2.5.5-UnifiedInstaller/packages/reportlab_2_0.tar.bz2
    Plone-2.5.5-UnifiedInstaller/packages/setuptools-0.6c7-py2.4.tgz
    Plone-2.5.5-UnifiedInstaller/packages/TextIndexNG-3.1.16.tar.bz2
    Plone-2.5.5-UnifiedInstaller/packages/zlib-1.2.3.tar.bz2
    Plone-2.5.5-UnifiedInstaller/packages/Zope-2.9.8-final.tar.bz2

Pré-requisitos

Considerando que o sistema operacional esteja instalado e configurado corretamente, execute:
Debian Like sudo aptitude install build-essential;
RedHat Like sudo yum install gcc gcc-c++ cpp make;

INSTALAÇÃO DO PZP

Baixe e descompacte primeiramente o Plone-2.5.5-UnifiedInstaller.
  1. wget https://launchpad.net/plone/2.5/2.5.5/+download/Plone-2.5.5-UnifiedInstaller.tgz
  2. tar xvzf Plone-2.5.5-UnifiedInstaller.tgz -C /tmp
  3. cd /tmp/Plone-2.5.5-UnifiedInstaller
Em seguida edite o contendo do arquivo install.sh, PLONE_HOME, com o local de instalação desejado. Salve e feche o arquivo ([esc] :qw);
vim install.sh
#!/bin/sh
#
# Unified Plone installer build script
# Author: Kamal Gill (kamalgill at mac.com)
#
# Note: this script must be run as root
#
# Configure Plone installation options
PLONE_HOME=/opt/Plone-2.5.5
LOCAL_HOME=$PLONE_HOME
#
Agora execute o script de instalação:
./install.sh; ou su ; ./install.sh
Nesta fase, será compilado um ambiente isolado do sistema operacional, no diretório escolhido para ser instalado, onde todos os componentes necessários para o ambiente, estarão contidos.

INSTALAÇÃO DO Virtualenv

Nesta etapa utilize o python do ambiente criado, não utilize o python do sistema operacional; isto implica na impossibilidade de instalação via apt, yum, aptitude ou outro gerenciador de pacotes.
Se está usando os fontes do virtualenv:
  1. $wget http://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.7.1.2.tar.gz

  2. $tar xvzf virtualenv-1.6.4.tar.gz -C /tmp/
  3. $/opt/p255/Python-2.4/bin/python setup.py install
Se está usando o modulo python easy_install: $/opt/p335/Python-2.4/bin/easy_install virtualenv

Preparação do ambiente compartilhado

Nesta etapa, será preparado todos os elementos de compartilhamento do ambiente, os quais são comuns entre as instancias. Estas etapas compreendem o isolamento dos produtos do CMS Plone versão 2.5.5 dos outros produtos, para facilitação de manutenção; a criação do diretório de produtos compartilhados; criação dos ambientes através do virtualenv para isolamento das instancias; criação das instancias zope-client/zope-server; criação de links para sincronia de ambientes; e permissões necessárias. Para proceder basta executar os comandos abaixo, no diretório de instalação do plone, neste caso /opt/p255:
# cd /opt/p255
  1. Isolar os produtos do CMS Plone versão 2.5.5
    # mv ./zeocluster/Products/ ./plone_2.5.5
  2. Criar diretório de produtos compartilhados
    # mkdir ./Products
  3. Criar o ambiente através do virtualenv
    # ./Python-2.4.4/bin/virtualenv _app/env001

    Se houver a necessidade de isolamento total, ou seja não herdar o site-packages global, acrescente a opção --no-site-packages
    # ./Python-2.4.4/bin/virtualenv --no-site-packages ./_app/env001









  4. Criar os arquivos para o novo ambiente:
    Pode ser individual para cada arquivo:
    sed 's;#!/opt/p255/Python-2.4.4/bin/python;#!/opt/p255/_app/env001/bin/python;' bin/mkzeoinstance.py >> _app/env001/bin/mkzeoinstance.py

    sed 's;#!/opt/p255/Python-2.4.4/bin/python;#!/opt/p255/_app/env002/bin/python;' bin/mkzeoinstance.py >> _app/env002/bin/mkzeoinstance.py
    sed 's;#!/opt/p255/Python-2.4.4/bin/python;#!/opt/p255/_app/env001/bin/python;' bin/mkzopeinstance.py >> _app/env001/bin/mkzopeinstance.py

    sed 's;#!/opt/p255/Python-2.4.4/bin/python;#!/opt/p255/_app/env002/bin/python;' bin/mkzopeinstance.py >> _app/env002/bin/mkzopeinstance.py

    ou em lote:
    find /opt/plone255/bin/*.py -printf '%p %h %f\n'|while read p h f; 
      do 
      echo $p $h $f; 
      sed 's#//Python-2.4.4/#/app/env001/#' $p > ./bin/$f; 
      chmod +x ./bin/$f; 
      done
    









  5. Tornar os novos scripts criados executáveis
    Se foi executado o script em lote a linha chmod +x ./bin/$f;, já realizou esta tarefa, se não execute o comando abaixo:
    find _app/env00?/bin/mkz*.py -exec chmod -v +x {} \;









  6. Instalar o easy_install nos ambientes virtuias:
    cd /tmp/Plone-2.5.5-UnifiedInstaller/packages/

    tar xvzf setuptools-0.6c7-py2.4.tgz

    /opt/p255/_app/env001/bin/python ez_setup.py -U setuptools
    /opt/p255/_app/env002/bin/python ez_setup.py -U setuptools











  7. Copiar as bibliotecas python já instaladas para o ambiente virtual:
    cp -vap /opt/p255/Python-2.4.4/lib/python2.4/site-packages/ /opt/p255/_app/env001/lib/python2.4/

    cp /opt/p255/bin/copyzopeskel.py /opt/p255/_app/env001/bin/

    cp -vap /opt/p255/Python-2.4.4/lib/python2.4/site-packages/ /opt/p255/_app/env002/lib/python2.4/

    cp /opt/p255/bin/copyzopeskel.py /opt/p255/_app/env002/bin/










  8. Criar as instancias zope-server;
    # ./bin/mkzeoinstance.py /opt/p255/_app/env001/server 8110

    # ./bin/mkzeoinstance.py /opt/p255/_app/env001/server 8120


  9. Criar as instancias zope-client;
    # for ((i=1;i<=2;i++)); do ./bin/mkzopeinstance.py -d ./_app/env001/client${j} -u admin:admin -s ./skel/ done # for ((i=1;i<=2;i++)); do ./bin/mkzopeinstance.py -d ./_app/env002/client${j} -u admin:admin -s ./skel/ done











    Este comando cria as duas instancias zope-client necessárias para este artigo. Para criar apenas umas instancia execute

    /opt/p255/_app/env001/bin/mkzopeinstance.py -d /opt/p255/_app/env001/client1 -u admin:admin -s /opt/p255/skel/

    Onde o -d diretório de instalação, -u usuário e senha e -s estrutura inicial (esqueleto).

  10. Criar links de sincronia
    # find _app/env00?/client? -maxdepth 2 -mindepth 1 -type d -name Products -printf '%h %f\n'|while read p f; do a="./"$p"/"$f; rm -frv $a; ln -sv `pwd`/Products $p;done

    Se houver a necessidade de isolamento total, não execute esta etapa.

  11. Conceder permissões necessárias
    # chown plone -Rv ./*
Também pode ser gerado tudo com o script shell abaixo:
for ((i=1;i<=2;i++)); 
  do 
    ./bin/mkzeoinstance.py zeocluster${i}/server 8${i}00; 
    for ((j=0;j<=1;j++)); 
      do 
        ./bin/mkzopeinstance.py -d ./zeocluster${i}/client${j} -u admin:123456 -s ./skel/; 
      done;
  done

Configuração

Agora vem a ultima parte antes de ativar e começar a utilizar o ambiente. Habilitar CMS O ambientes criados ainda não possuem o CMS ativado, pois estão apontando para o Products vazio e o plone se encontra no diretório plone_2.5.5, então proceda da seguinte forma:
# ln -sv `pwd`/plone_2.5.5/* ./Products/
Definições no zope-server Cada instancia funcionará em uma porta especifica. O zope-server entretanto já foi definida sua porta na instalação, necessitando o minimo de configuração neste momento. Apenas defina o usuário autorizado a gerenciar os processos do ZODB, que no caso será o usuário plone.
sed -i 's; # user zope; user plone;g' zeocluster?/server/etc/zeo.conf
O comando acima edita os arquivos ./zeocluster1/server/etc/zeo.conf e ./zeocluster2/server/etc/zeo.conf Definições no zope-server Defina o usuário autorizado a gerenciar os processos do zope-client, que no caso também será o usuário plone.
sed -i 's;# effective-user chrism; effective-user plone;g' ./zeocluster?/client?/etc/zope.conf
zeocluster?/client?/etc/zope.conf
903 <http-server>
 904   # valid keys are "address" and "force-connection-close"
 905   address 8080
 906   # force-connection-close on
 907 </http-server>
..
 938 #  <icp-server>
 939 #    # valid key is "address"
 940 #    address 888
 941 #  </icp-server>

para cada instancia há uma configuração específica.
  • Em ./zeocluster1/client0/etc/zope.conf: Altere a linha 905 para 8101, e se o servidor cache for um squid, descomente as linhas 938 a 941 e altere a linha 940 para 8101;
  • Em ./zeocluster1/client1/etc/zope.conf: Altere a linha 905 para 8102, e se o servidor cache for um squid, descomente as linhas 938 a 941 e altere a linha 940 para 8102;
  • Em ./zeocluster2/client0/etc/zope.conf: Altere a linha 905 para 8201, e se o servidor cache for um squid, descomente as linhas 938 a 941 e altere a linha 940 para 8201;
  • Em ./zeocluster2/client0/etc/zope.conf: Altere a linha 905 para 8202, e se o servidor cache for um squid, descomente as linhas 938 a 941 e altere a linha 940 para 8202;
Obs: O Servidor cache livre pode ser um squid ou um varnish, sendo que no varnish não é necessário habilitar (descomentar) o icp-server do zope.
Scripts de controle O cluster criado na compilação, já vem o scripts de controle para as instancias, o que permite de forma ágil e fácil, o start, stop e restart de todas as instancias, do cluster.
  • Para facilitar apenas copie-os para os locais devidos;
    cp -fv ./zeocluster/bin/*.sh ./zeocluster1/bin/

    cp -fv ./zeocluster/bin/*.sh ./zeocluster2/bin/
  • e altere-os conforme a necessidade.
    $sed -i 's#/opt/p255/zeocluster#/opt/p255/zeocluster1#; s#client1#client0#; s#client2#client1#;' zeocluster2/bin/*.sh
    $sed -i 's#/opt/p255/zeocluster#/opt/p255/zeocluster2#; s#client1#client0#; s#client2#client1#;' zeocluster2/bin/*.sh

Links Relacionados

Brito: Instalação Plone 2.5.5 com módulos customizados

Brito: Virtualenv Python - Encapsulamento de mudanças

Brito: Criando instancias zope via buildout

Veja também: Brito:PLONE 2.5.5 + VIRTUALENV (Simplificado)

Comentários