Introdução – Escopo – Dependências
Segundo plone.org, o Plone 4 é a versão mais rápida, poderosa e bela. O state-of-the-art do CMS Plone.
O Plone, também conhecido por PZP – Python/Zope/Plone – Assim chamado pela formação do ambiente que envolve a linguagem de programação interpretada Python, o framework para desenvolvimento Web Zope e o CMS – Content Management System – Plone. O Plone está entre os CMS com menor índice de falhas de segurança, possui várias funcionalidades técnicas que podem ser comparadas com outros CMS na URL: E de acordo com a pesquisa apresentada pela IBM, em Manyeyes, foi o CMS que apresentou menos vulnerabilidades. Trata-se de uma plataforma para gerenciamento de diversos tipos de conteúdo sem que sejam necessários conhecimentos técnicos em relação à estrutura codificada da plataforma. Com o CMS Plone, pode-se construir um site completo, com diversas funcionalidades, sem a necessidade da construção de códigos complexos em linguagem de programação. O Plone abre espaço para customização de sua aparência e estrutura de navegação, além de possibilitar personalização do site através da escolha de cores, imagens e posicionamentos de diversos componentes, que agora incluem Gadgets. Em um nível mais avançado, a utilização do Plone dá conta da implementação de novas funcionalidades por parte de desenvolvedores de softwares, que podem ser agregadas à estrutura já existente, como sistemas de diretórios (AD/LDAP), Samba, e outros recursos estruturais. O que é o Plone? O Plone, classificado como um Sistema Gerenciador de Conteúdo, ou popularmente chamado pelo acrônimo em Inglês CMS – Content Management System – é um software livre e de código aberto. Possui incorporado, um sistema de workflow, diretivas de segurança e funções pré-configuradas, metadados para tipos conteúdo e suporte para múltiplos idiomas. Além disto, desenvolvedores e testadores de todo o mundo contribuem com a sua construção e melhoria. O que pode ser feito com o Plone?
Quais recursos são oferecidos pelo Plone?
EscopoO escopo de customização está limitado ao seguinte ambiente:
O Plone 4.1.6, é a ultima revisão estável da versão 4.1, e possui os seguintes pacotes incorporados e respectivas versões:
DependênciasConsiderando que, o sistema operacional esteja instalado e configurado corretamente, execute: Debian Like: $ sudo aptitude install build-essential libssl-dev Red Hat Like: $ sudo yum install gcc cpp gcc-c++ make openssl-devel |
|||
PZP – Virtualenv – Buildout
Instalação do PZPNesta etapa, cria-se o invólucro completamente independente do sistema operacional, para que o ambiente não sofra quebra de configuração devido às atualizações de segurança, ou afins. O invólucro “/opt/p416”, conterá todos os programas necessários para funcionamento do ambiente PZP, incluindo zlib, JPEG, Python e as demais dependências. Baixe e descompacte, primeiramente, o Plone-4.1.6-UnifiedInstaller: # wget https://launchpad.net/plone/4.1/4.1.6/+download/Plone-4.1.6-UnifiedInstaller-20120708.tgz As opções do comando install.sh, informam que a instalação é modo zeo, sendo que as bibliotecas “zlib” e “jpeg”, serão locais, o usuário admin e senha admin, no diretório “/opt/p416”, com 4 clientes zope e o nome do cluster modelo. VirtualenvNesta etapa, instala-se o ambiente virtual, do inglês Virtual Environment, sob acrônimo Virtualenv. O Virtualenv possibilita a utilização de um encapsulamento de subinstâncias Python, que permite a total personalização, sem a modificação da instalação principal. O ambiente Plone a partir da versão 3, já vem disponibilizado o easy_install, que é instalador para módulos Python, o qual será usado neste artigo. # cd /opt/p416/ Para melhor entendimento, com a finalidade de organização, o diretório app (applications), conterá todos os ambientes criados. Agora, cria-se o ambiente virtual, da seguinte forma: # ./Python-2.6/bin/virtualenv app/env001 BuildoutBuildout é uma ferramenta Open Source de construção de softwares, desenvolvida utilizando-se da linguagem de programação Python, para fornecer suporte à criação de instâncias de aplicações, principalmente àquelas escritas em Python. O Buildout fornece ferramentas para criação de aplicações através segmentos, denominados parts, que podem ser módulos Python, servidores Web, servidores de aplicação e qualquer elemento de aplicação para infraestrutura. Há como configurar o buildout para utilizar os arquivos de configuração diretamente pela Web, mas deste artigo, usaremos o modelo da própria estrutura do invólucro. # cp -vf modelo/*.{py,cfg} app/env001/ Os seguintes arquivos serão copiados:
Configuração:# cd app/env001/ Para personalizar as portas, localize o trecho a seguir, no arquivo buildout.cfg:
E modifique para as portas desejadas, tal como exemplo, zeo aceitando apenas conexões locais na porta 8100, e os clientes zope, rodando nas portas 8101 e 8102 respectivamente. # Ports
# —– # Specify the ports on which your Zope installation # will listen. # ZEO Server zeo-address = 127.0.0.1:8100 # Zope client 1 http-address = 8101 # Additional clients: client2-address = 8102 No Plone 4, também faz-se necessário modificar algumas permissões, e criar alguns diretórios para o bom funcionamento do ambiente. Façamos pelo buildout, no arquivo base.cfg. [chown-zeo]
# This recipe is used to set permissions for root mode installs # For options see http://pypi.python.org/pypi/plone.recipe.command recipe = plone.recipe.command command = echo Dummy references to force this to execute after referenced parts echo ${backup:location} ${unifiedinstaller:sudo-command} chmod 600 .installed.cfg touch ${buildout:directory}/var/zeoserver/zeoserver.log find ${buildout:directory}/var -type d -exec chmod 700 {} \; chmod 744 ${buildout:directory}/bin/* update-command = ${chown-zeo:command} Acrescente o trecho que compreende as linhas 109 a 111, como abaixo: [chown-zeo]
chmod 744 ${buildout:directory}/bin/* InstalaçãoConsiderando que esteja no diretório /opt/p416/app/env001/, execute os comandos abaixo: # mkdir -pv ../buildout-cache/{eggs,downloads} Obs.: Se houver proxy na rede, coloque o IP e porta do proxy # ./bin/python bootstrap.py A etapa três pode ser substituída por: # cp -va /opt/p416/buildout-cache/ /opt/p416 Ou: # ln -sv /opt/p416/buildout-cache/ /opt/p416 O objetivo desta substituição, é simplificar o processo de download dos módulos eggs, que já foram baixados quando o modelo foi criado. * Lembrando que, é opcional a substituição, restando para tanto, o novo downloads dos módulos eggs. # ./bin/buildout -v -t 30 Onde:
Faz-se necessário executar o comando: # ./bin/buildout …Para cada atualização realizada no ambiente. |
|||
Mount point
O Moint Point não necessita de instalação, pois é apenas um recurso de configuração do ZODB (Zope Object Data Base), em modo ZEO (Zope Enterprise Objects), que permite utilização de múltiplos arquivos “.fs”, na mesma instância.
O ZEO com Mount Point ativado, funciona como um SGBD (Sistema Gerenciador de Banco de Dados), que gerencia acessos concorrentes, a múltiplas bases de dados em um SGBD relacional, tais como PostgreSQL, Oracle, MySQL e MSSQL Server. No artigo: Brito: Plone 3.3.5 + buildout + mount point, destaquei onde deve ser modificado no arquivo buildout.cfg, e algumas premissas que deve ser contempladas, ou melhor tomadas por regras. Entre as premissas, destaca-se usar algo que identifique a aplicação adequadamente, e nomes com as regras abaixo, que funcionam com louvor.
VantagensComo toda solução, há vantagens e desvantagens. A vantagem em relação à configuração sem Mount Point, está na hora de recuperar o backup de apenas uma das aplicações, que neste caso, é pontual, e bastante facilitada com o repozo, aplicação que já compõe a estrutura. Minimiza o tempo de ociosidade dos processos PZP, pois uma instancia serve vários Plone sites. DesvantagensRealizar o backup individual em cada arquivo. ConfiguraçãoDiferentemente do Plone 3, o Plone 4 possui uma gama de novos arquivos, e uma nova estrutura de configuração, e as alterações para Mount Point ZEO, deverão ser realizadas no arquivo “base.cfg”. # vim base.cfg No trecho do [zeoserver], aproximadamente na linha 81, como segue abaixo: [zeoserver]
# Use this section to install and configure a Zope # Enterprise Objects server. # For options see http://pypi.python.org/pypi/plone.recipe.zeoserver recipe = plone.recipe.zeoserver zeo-address = ${buildout:zeo-address} # if we try to start as root, Zope will switch to the user below effective-user = ${buildout:effective-user} # Put the log, pid and socket files in var/zeoserver zeo-log = ${buildout:directory}/var/zeoserver/zeoserver.log pid-file = ${buildout:directory}/var/zeoserver/zeoserver.pid socket-name = ${buildout:directory}/var/zeoserver/zeo.zdsock blob-storage = ${buildout:directory}/var/blobstorage # You may also control the environment variables for the zeoserver. environment-vars = ${buildout:environment-vars} Acrescenta-se a diretiva “zeo-conf-additional” ao final da sessão, para incrementar o filestorage do ZEO, como abaixo. [zeoserver]
eggs = tempstorage zeo-conf-additional = path ${buildout:directory}/var/filestorage/mp001BD.fs path ${buildout:directory}/var/filestorage/mp002BD.fs path ${buildout:directory}/var/filestorage/mp003BD.fs %import tempstorage name temporary storage for sessioning No trecho do [client1], aproximadamente na linha 129, como segue abaixo: [client1]
# Use this section to install and configure a Zope # client instance. # For options see http://pypi.python.org/pypi/plone.recipe.zope2instance # Additional clients are a recipe = plone.recipe.zope2instance zeo-client = true zeo-address = ${zeoserver:zeo-address} # The line below sets only the initial password. It will not change an # existing password. user = ${buildout:user} # if we try to start as root, Zope will switch to the user below effective-user = ${buildout:effective-user} \ http-address = ${buildout:http-address} blob-storage = ${zeoserver:blob-storage} shared-blob = on # change debug-mode to “on” to run in development mode debug-mode = ${buildout:debug-mode} # change verbose-security to “on” for detailed security # errors while developing verbose-security = ${buildout:verbose-security} deprecation-warnings = ${buildout:deprecation-warnings} # Put the log, pid, lock files in var/client1 event-log = ${buildout:directory}/var/client1/event.log z2-log = ${buildout:directory}/var/client1/Z2.log pid-file = ${buildout:directory}/var/client1/client1.pid lock-file = ${buildout:directory}/var/client1/client1.lock # If you want Zope to know about any additional eggs, list them here. # If you want to register ZCML slugs for any packages, list them here. products = ${buildout:directory}/products # You may also control the environment variables for the instance. Acrescenta-se a diretiva “zope-conf-additional” ao final da sessão, para incrementar o filestorage do ZEO, como abaixo.
Salve feche o arquivo, e execute o buildout novamente, e a sequência seguinte: # ./bin/buildout -v -t 30 Agora, no navegador:
Obs.: A opção restart, pode não funcionar adequadamente, por esta razão, recomendo executar o stop e start, nos passos 3 e 4. Se por ventura não aplicar a mudança, ou demorar demasiadamente, suba uma das instancias em modo foreground: ./bin/client1 fg |
|||
BLOB Storage
O Binary Large OBject, identificado por seu acrônimo, BLOB, são tipicamente identificados por imagens, áudio ou outros objetos multimídia de grande volume.
Usualmente, as Base de Dados não suportam BLOBs. Este pacote é um complemento para o Plone, a partir da release Plone 3.0.4, que permite a integração de BLOB com ZODB 3,8; possibilitando que os dados binários sejam geridos pelo ZODB, mas separadamente do seu habitual FileStorage (Data.fs) de armazenamento para o banco de dados. Isto tem várias vantagens, sobretudo, uma redução real do FileStorage (Data.fs) e melhor desempenho tanto das CPU’s, quanto em otimização de memória RAM. O Zope trabalha com BLOB’s, através do pacote plone.app.blob, este pacote substitui a função executada pelo FileSystemStorage (FSS), configurado pelo buildout em plone 3, através do “recipe=iw.recipe.fss”, descontinuado na versão 4 do Plone. InstalaçãoA instalação através do buildout, é bem simples, basta acrescentar o pacote plone.app.blob, nas sessões “eggs” e “zcml” da diretiva buildout, como abaixo: [buildout]
[..] eggs = Plone plone.app.blob [..] zcml = plone.app.blob Este procedimento não é necessário a partir do Plone 4.1.4, que já vem com o plone.app.blob-1.5.1, instalado e necessitando apenas a sua configuração pertinente. ConfiguraçãoO BLOB Storage, também possui duas modalidades de configuração, Stand Alone(Single) e ZEO. Seguindo o Escopo, abaixo a configuração para o modo ZEO. No arquivo base.cfg, localize o trecho abaixo:
Altere o trecho, acrescentando as linhas 116 e 117, como abaixo: [chown-zeo]
[..] chmod 744 ${buildout:directory}/bin/* chmod 755 ${buildout:directory}/bin/python mkdir -pm 755 ${buildout:directory}/{products,src} mkdir -pm 755 ${buildout:directory}/var/blobstorage/mp00{1,2,3}bd/tmp chown -R ${buildout:effective-user} ${buildout:directory}/var update-command = ${chown-zeo:command} Esta modificação neste trecho, tem a finalidade de gerar os diretórios ao executar o buildout.cfg, criando os respectivos diretórios, para os 3 Mount Points que serão criados:
Agora, para configurar o blobstorage, é necessário alterar tanto a configuração do Zope Server, quanto do Zope Client. Na sessão zeo-conf-additional, localize o trecho:
Acrescente a linha 100, conforme abaixo, referenciando o diretório do blobstorage acrescentado na sessão [chown-zeo]. zeo-conf-additional =
path ${buildout:directory}/var/filestorage/mp001BD.fs Na sessão zope-conf-additional, localize o trecho:
Altere o trecho para:
Salve, feche e execute novamente os comandos abaixo novamente. # ./bin/buildout -v -t 30 Unicode UTF-8O Unicode UTF-8 serve para evitar erros de codificação na língua portuguesa. Para implementá-lo, basta adicionar o trecho abaixo no base.cfg. [unicode]
recipe = plone.recipe.command update-command = ${unicode:command} command = cat > ${buildout:directory}/lib/python2.6/site-packages/sitecustomize.py << EOF import sys sys.setdefaultencoding(‘utf-8’) EOF Salve, feche e execute novamente o buildout. # ./bin/buildout -v -t 30 |
|||
Desfecho, arquivos fontes e referências
Agora, para conclusão de todo o processo, acesse a Zope Manage Interface (ZMI), em seu navegador preferido, no IP da máquina e a porta, em que o Plone foi configurado.
No exemplo deste artigo, 8101 e 8102, para as instâncias, client1 e client2, respectivamente.
Exemplo: http://192.168.0.2:8102/manage Este artigo, pode ser lido também em meu blog: http://brito.blog.incolume.com.br, e futuramente disponibilizarei a versão em PDF. Abraço a todos. 🙂 Buildout.cfg Completo
Base.cfg Completo
|