Introdução
Segundo plone.org, o Plone 4, é a versão mais rápida, poderosa e bela, o Estado da Arte 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 http://cmsmatrix.org/matrix/cms-matrix/plone.
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 a 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 software, que podem ser agregadas a 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?
Criar sites facilmente;
Gerenciar todo o conteúdo do site através de uma interface amigável;
Delegar sub-tarefas em áreas especificas do sítio sem comprometer a escalabilidade e a segurança;
Criar e organizar conteúdo de forma colaborativa através de um fluxo de trabalho;
Personalizar do aspecto visual básico do site através de interface intuitiva;
Divulgar notícias, feed, eventos e links;
Publicar fotos, arquivos e vídeos;
Organizar hierarquicamente seu conteúdo através de menus de navegação;
QUAIS RECURSOS SÃO OFERECIDOS PELO PLONE?
Criação e manutenção de conteúdo;
Todo gerenciamento de conteúdo realizado através do navegador Web;
Gerenciamento de usuários com níveis hierárquicos;
Fluxo de publicação colaborativa de conteúdo (workflow);
Geração automática de infra-estrutura de navegação;
Mecanismo de busca avançada;
Possibilidade de criação de portais de Internet ou Intranet;
Criação de blog corporativo;
Ferramentas colaborativas para groupware;
Repositório de conteúdos como imagens, documentos e vídeos;
Agendamento e divulgação de eventos;
Galeria de imagens;
Área integrada de notícias;
Segurança e integridade dos dados;
Suporte a internacionalização;
ESCOPO
O escopo de customização está limitado ao seguinte Ambiente:Sistema Operacional Linux
http://distrowatch.com/
Plone-4.1.6-UnifiedInstaller
https://launchpad.net/plone/4.1/4.1.6/+download/Plone-4.1.6-UnifiedInstaller-20120708.tgz
plone.app.blob
plone.app.blob-1.5.2 via buildout em modo ZEO
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:
- packages/buildout-cache.tar.bz2
- packages/distribute-0.6.19.tar.gz
- packages/issue12012-sslv2.txt
- packages/issue9670-v2.txt
- packages/jpegsrc.v8c.tar.bz2
- packages/multiarch-patch.txt
- packages/Python-2.6.8.tar.bz2
- packages/readline-6.2.tar.bz2
- packages/virtualenv-1.6.1.tar.bz2
- packages/zlib-1.2.5.tar.bz2
Dependências
Considerando que o sistema operacional esteja instalado e configurado corretamente, execute:Debian Like
sudo aptitude install build-essential libssl-dev;
RedHat Like
sudo yum install gcc cpp gcc-c++ make openssl-devel;
INSTALAÇÃO DO PZP
Nesta etapa cria-se o invólucro completamente independente do Sistema Operacional, para que o ambiente não sofra quebra de configuração devido a 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
- tar xvzf ~/Downloads/Plone-4.1.6-UnifiedInstaller-20120708.tgz -C /tmp/
- cd /tmp/Plone-4.1.6-UnifiedInstaller
- ./install.sh zeo --zlib=local --jpeg=local \
--user=admin --password=admin --target=/opt/p416 --clients=4 --instance=modelo
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.
Virtualenv
Nesta etapa Instala-se o Ambiente Virtual, do inglês Virtual Environment, sob acronimo 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/
- ./Python-2.6/bin/easy_install virtualenv
Buildout
Buildout é uma ferramenta open source de construção de software, 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:
- modelo/bootstrap.py
- modelo/base.cfg
- modelo/buildout.cfg
- modelo/develop.cfg
- modelo/lxml_static.cfg
- modelo/versions.cfg
- modelo/zopeapp-versions.cfg
- modelo/zope-versions.cfg
- modelo/ztk-versions.cfg
Configuração
- cd app/env001/
- vim buildout.cfg
base.cfg
. 98 [chown-zeo]
99 # This recipe is used to set permissions for root mode installs
100 # For options see http://pypi.python.org/pypi/plone.recipe.command
101 recipe = plone.recipe.command
102 command =
103 echo Dummy references to force this to execute after referenced parts
104 echo ${backup:location} ${unifiedinstaller:sudo-command}
105 chmod 600 .installed.cfg
106 touch ${buildout:directory}/var/zeoserver/zeoserver.log
107 find ${buildout:directory}/var -type d -exec chmod 700 {} \;
108 chmod 744 ${buildout:directory}/bin/*
109 update-command = ${chown-zeo:command}
Acrescente o trecho que compreende as linas 109 a 111, como abaixo: 98 [chown-zeo]
[..]
108 chmod 744 ${buildout:directory}/bin/*
109 chmod 755 ${buildout:directory}/bin/python
110 mkdir -pm 755 ${buildout:directory}/{products,src}
111 chown -R ${buildout:effective-user} ${buildout:directory}/var
112 update-command = ${chown-zeo:command}
Instalação
Considerando que esteja no diretório /opt/p416/app/env001/
, execute os comandos abaixo: - mkdir -pv ../buildout-cache/{eggs,downloads};
- export http_proxy=http://10.1.101.101:8080; [Se houver proxy na rede, coloque o IP e porta do proxy]
- ./bin/python bootstrap.py;
- cp -va /opt/p416/buildout-cache/ /opt/p416; ou
- ln -sv /opt/p416/buildout-cache/ /opt/p416
Faz-se necessário executar o comando ./bin/buildout para cada atualização realizada no ambiente.
- -v — Incrementa o nível de detalhamento;
- -t 30 — Define o timeout em 30s para cada repositório;
Mount Point
O Moint Point não necessita de instaçã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 multiplas 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.
- letras minusculas (caixa baixa);
- não utilizar caracteres especiais;
- não utilizar traço(-);
Vantagens
Como toda solução há vantagens e desvantagens. A vantagem em relação a 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;Desvantagens
Realizar o backup individual em cada arquivo.Configuração
Diferentemente 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 arquivobase.cfg
. vim base.cfg No trecho do [zeoserver], aproximadamente na linha 81, como segue abaixo: 81 [zeoserver]
82 # Use this section to install and configure a Zope
83 # Enterprise Objects server.
84 # For options see http://pypi.python.org/pypi/plone.recipe.zeoserver
85 recipe = plone.recipe.zeoserver
86 zeo-address = ${buildout:zeo-address}
87 # if we try to start as root, Zope will switch to the user below
88 effective-user = ${buildout:effective-user}
89 # Put the log, pid and socket files in var/zeoserver
90 zeo-log = ${buildout:directory}/var/zeoserver/zeoserver.log
91 pid-file = ${buildout:directory}/var/zeoserver/zeoserver.pid
92 socket-name = ${buildout:directory}/var/zeoserver/zeo.zdsock
93 blob-storage = ${buildout:directory}/var/blobstorage
94 # You may also control the environment variables for the zeoserver.
95 environment-vars = ${buildout:environment-vars}
96
Acrescenta-se a diretiva zeo-conf-additional
ao final da sessão, para incrementar o filestorage do ZEO, como abaixo. 81 [zeoserver]
[...]
96 eggs = tempstorage
97
98 zeo-conf-additional =
99 <filestorage mp001bd>
100 path ${buildout:directory}/var/filestorage/mp001BD.fs
101 </filestorage>
102
103 <filestorage mp002bd>
104 path ${buildout:directory}/var/filestorage/mp002BD.fs
105 </filestorage>
106
107 <filestorage mp003bd>
108 path ${buildout:directory}/var/filestorage/mp003BD.fs
109 </filestorage>
110
111 %import tempstorage
112 <temporarystorage temp>
113 name temporary storage for sessioning
114 </temporarystorage>
115
No trecho do [client1], aproximadamente na linha 129, como segue abaixo: 132 [client1]
133 # Use this section to install and configure a Zope
134 # client instance.
135 # For options see http://pypi.python.org/pypi/plone.recipe.zope2instance
136 # Additional clients are a
137 recipe = plone.recipe.zope2instance
138 zeo-client = true
139 zeo-address = ${zeoserver:zeo-address}
140 # The line below sets only the initial password. It will not change an
141 # existing password.
142 user = ${buildout:user}
143 # if we try to start as root, Zope will switch to the user below
144 effective-user = ${buildout:effective-user}
145 http-address = ${buildout:http-address}
146 blob-storage = ${zeoserver:blob-storage}
147 shared-blob = on
148 # change debug-mode to "on" to run in development mode
149 debug-mode = ${buildout:debug-mode}
150 # change verbose-security to "on" for detailed security
151 # errors while developing
152 verbose-security = ${buildout:verbose-security}
153 deprecation-warnings = ${buildout:deprecation-warnings}
154 # Put the log, pid, lock files in var/client1
155 event-log = ${buildout:directory}/var/client1/event.log
156 z2-log = ${buildout:directory}/var/client1/Z2.log
157 pid-file = ${buildout:directory}/var/client1/client1.pid
158 lock-file = ${buildout:directory}/var/client1/client1.lock
159
160 # If you want Zope to know about any additional eggs, list them here.
161 # e.g. eggs = ${buildout:eggs} my.package
162 eggs = ${buildout:eggs}
163
164 # If you want to register ZCML slugs for any packages, list them here.
165 # e.g. zcml = my.package my.other.package
166 zcml = ${buildout:zcml}
167
168 products = ${buildout:directory}/products
169
170 # You may also control the environment variables for the instance.
171 environment-vars = ${buildout:environment-vars}
172
Acrescenta-se a diretiva zope-conf-additional
ao final da sessão, para incrementar o filestorage do ZEO, como abaixo. 132 [client1]
[...]
192
193 zope-conf-additional =
194 <zodb_db mp001bd>
195 mount-point /mp001bd
196 cache-size 5000
197 <zeoclient>
198 name mp001bd
199 server ${buildout:zeo-address}
200 storage mp001bd
201 var ${buildout:directory}/var
202 </zeoclient>
203 </zodb_db>
204
205 <zodb_db mp002bd>
206 mount-point /mp002bd
207 cache-size 5000
208 <zeoclient>
209 name mp002bd
210 server ${buildout:zeo-address}
211 storage mp001bd
212 var ${buildout:directory}/var
213 </zeoclient>
214 </zodb_db>
215
216 <zodb_db mp003bd>
217 mount-point /mp003bd
218 cache-size 5000
219 <zeoclient>
220 name mp003bd
221 server ${buildout:zeo-address}
222 storage mp003bd
223 var ${buildout:directory}/var
224 </zeoclient>
225 </zodb_db>
226
227 zodb-temporary-storage =
228 <zodb_db temporary>
229 <zeoclient>
230 server ${buildout:zeo-address}
231 storage temp
232 name zeostorage
233 var ${buildout:directory}/var
234 </zeoclient>
235 mount-point /temp_folder
236 container-class Products.TemporaryFolder.TemporaryContainer
237 </zodb_db>
238
Salve feche o arquivo, e execute o buildout novamente, e a sequencia seguinte. - ./bin/buildout -v -t 30;
- ./bin/buildout -v -t 30;
- ./bin/plonectl stop;
- ./bin/plonectl start;
- Agora no navegador acesse
http://ip.do.serv:8101/manage
;
- Entre com o usuário e senha (admin e admin);
- Localize a combobox com o texto ATContentTipes tool;
- Nesta combobox selecione
ZODB Mount Point
;
- Na página seguinte
Add ZODB Mount Points
, selecione os mount points desejados e clique no botãoCreate selected mount points
;
- Com esta ação será criado um diretório na raiz do ambiente, o qual mapeia a estrutura configurada anteriormente.
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 pacoteplone.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ção
A instalação através do buildout, é bem simples, basta acrescentar o pacoteplone.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ção
O 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: 119 [chown-zeo] 120 # This recipe is used to set permissions for root mode installs 121 # For options see http://pypi.python.org/pypi/plone.recipe.command 122 recipe = plone.recipe.command 123 command = 124 echo Dummy references to force this to execute after referenced parts 125 echo ${backup:location} ${unifiedinstaller:sudo-command} 126 chmod 600 .installed.cfg 127 touch ${buildout:directory}/var/zeoserver/zeoserver.log 128 find ${buildout:directory}/var -type d -exec chmod 700 {} \; 129 chmod 744 ${buildout:directory}/bin/* 130 chmod 755 ${buildout:directory}/bin/python 131 mkdir -pm 755 ${buildout:directory}/{products,src} 132 chown -R ${buildout:effective-user} ${buildout:directory}/var 133 update-command = ${chown-zeo:command} Altere o trecho, acrescentando as linhas 116 e 117, como abaixo: 119 [chown-zeo] [..] 129 chmod 744 ${buildout:directory}/bin/* 130 chmod 755 ${buildout:directory}/bin/python 131 mkdir -pm 755 ${buildout:directory}/{products,src} 132 133 mkdir -pm 755 ${buildout:directory}/var/blobstorage/mp00{1,2,3}bd/tmp 134 chown -R ${buildout:effective-user} ${buildout:directory}/var 135 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 /opt/p416/app/env001/var/blobstorage/mp001bd, /opt/p416/app/env001/var/blobstorage/mp002bd e /opt/p416/app/env001/var/blobstorage/mp003bd
, 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: 97 zeo-conf-additional =
98 <filestorage mp001bd>
99 path ${buildout:directory}/var/filestorage/mp001BD.fs
100 </filestorage>
Acrescente a linha 100, conforme abaixo, referenciando o diretório do blobstorage acrescentado na sessão [chown-zeo]. 97 zeo-conf-additional =
98 <filestorage mp001bd>
99 path ${buildout:directory}/var/filestorage/mp001BD.fs
100 blob-dir ${buildout:directory}/var/blobstorage/mp001bd
101 </filestorage>
Na sessão zope-conf-additional
, localize o trecho: 132 [client1]
[...]
192
193 zope-conf-additional =
194 <zodb_db mp001bd>
195 mount-point /mp001bd
196 cache-size 5000
197 <zeoclient>
198 name mp001bd
199 server ${buildout:zeo-address}
200 storage mp001bd
201 var ${buildout:directory}/var
202 </zeoclient>
203 </zodb_db>
Altere o trecho para: 193 zope-conf-additional =
194 <zodb_db mp001bd>
195 mount-point /mp001bd
196 cache-size 5000
197 <zeoclient>
198 blob-dir ${buildout:directory}/var/blobstorage/mp001bd
199 shared-blob-dir on
200 name mp001bd
201 server ${buildout:zeo-address}
202 storage mp001bd
203 var ${buildout:directory}/var
204 </zeoclient>
205 </zodb_db>
189
Salve, feche e execute novamente os comandos abaixo novamente. - ./bin/buildout -v -t 30;
- ./bin/buildout -v -t 30;
- ./bin/plonectl stop;
- ./bin/plonectl start;
Unicode UTF-8
O unicode UTF-8 serve para evitar erros de codificação na língua portuguesa. Para implementa-lo basta adicionar o trecho abaixo nobase.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
Agora para conclusão de todo o processo, acesse a Zope Manage Interface (ZMI), em seu navegador preferido, no IP da maquina e a porta, em que o Plone foi configurado. No exemplo deste artigo, 8101 e 8102, para as instâncias, client1 e client2 respectivamente. http://iphost:8101/manage; ou http://iphost:8102/manage; Exemplo: http://192.168.0.2:8102/manage; buildout.cfg completo: base.cfg completo:Referências
http://brito.blog.incolume.com.br/2012/05/plone-335-buildout-virtualenv-mount.htmlhttp://brito.blog.incolume.com.br/2011/10/instalacao-plone-255-com-modulos.html
http://pt.wikipedia.org/wiki/Buildout
http://brito.blog.incolume.com.br/2012/05/plone-335-buildout-virtualenv-mount.html
http://brito.blog.incolume.com.br/2012/05/total-de-vulnerabilidades-por-cms.html
http://brito.blog.incolume.com.br/2012/06/como-definir-unicode-em-ambiente-plone.html
Comentários