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.
- Letras minúsculas (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 à 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 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.
# e.g. eggs = ${buildout:eggs} my.package
eggs = ${buildout:eggs}
# If you want to register ZCML slugs for any packages, list them here.
# e.g. zcml = my.package my.other.package
zcml = ${buildout:zcml}
products = ${buildout:directory}/products
# You may also control the environment variables for the instance.
environment-vars = ${buildout:environment-vars}
Acrescenta-se a diretiva "zope-conf-additional" ao final da sessão, para incrementar o filestorage do ZEO, como abaixo.
[client1]
zope-conf-additional =
mount-point /mp001bd
cache-size 5000
name mp001bd
server ${buildout:zeo-address}
storage mp001bd
var ${buildout:directory}/var
mount-point /mp002bd
cache-size 5000
name mp002bd
server ${buildout:zeo-address}
storage mp001bd
var ${buildout:directory}/var
mount-point /mp003bd
cache-size 5000
name mp003bd
server ${buildout:zeo-address}
storage mp003bd
var ${buildout:directory}/var
zodb-temporary-storage =
server ${buildout:zeo-address}
storage temp
name zeostorage
var ${buildout:directory}/var
mount-point /temp_folder
container-class Products.TemporaryFolder.TemporaryContainer
Salve feche o arquivo, e execute o
buildout novamente, e a sequência 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ão: Create selected mount points;
- Com esta ação será criado um diretório na raiz do ambiente, o qual mapeia a estrutura configurada anteriormente.
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