Plone

per Victor Carceler darrera modificació 2020-03-25T16:35:30+02:00

Plone es un excelente gestor de contenidos que permite mantener la web de un centro educativo. Plone es un producto para el servidor de aplicaciones Zope, que a su vez está implementado en Python. Aunque Zope incorpora su propio servidor web, si se van a publicar contenidos en Internet es muy recomendable utilizar un servidor Apache que reciba las peticiones desde Internet y las redirija a Zope.

En la XEiLL se instalarán las versiones escogidas de Python, Zope y Plone desde el código fuente. Es muy importante asegurarse, mediante la documentación de los respectivos productos, de que las versiones escogidas son estables y se integran sin problemas.

Componentes a instalar:

ComponenteFunción
Descarga
Python Intérprete necesario para ejecutar Zope http://www.python.org/ftp/python/2.3.5/Python-2.3.5.tgz
PIL
Biblioteca de funciones gráficas para Python http://effbot.org/downloads/Imaging-1.1.5.tar.gz
Zope Servidor de aplicaciones que permite ejecutar Plone
http://www.zope.org/Products/Zope/2.8.6
Plone CMS que dará forma a la web del centro educativo
http://plone.org/products/plone/releases/2.1.2
Apache
Servidor web que actúa como proxy para Plone
Versión estable empaquetada con la distribución
apache-mpm-prefork-2.0.54-13mdk

Python

Python es un lenguaje muy popular por lo que probablemente nuestro sistema ya tenga instalado un intérprete de Python a partir de los paquetes precompilados de la distribución de GNU/Linux utilizada. Como para ejecutar Zope necesitamos una versión concreta de Python, con la que la estabilidad está comprobada, instalaremos un segundo intérprete de Python a partir del código fuente. Después se podrá utilizar una u otra versión según convenga.

  1. Descargamos el código fuente de Python 2.3.5 en el directorio /opt/src, lo desarchivamos y cambiamos al directorio que contiene el código fuente.
    [root@localhost ~]# cd /opt/src
    [root@localhost src]# wget http://www.python.org/ftp/python/2.3.5/Python-2.3.5.tgz --11:18:05-- http://www.python.org/ftp/python/2.3.5/Python-2.3.5.tgz
    => `Python-2.3.5.tgz'
    Resolviendo www.python.org... 82.94.237.218
    Connecting to www.python.org|82.94.237.218|:80... conectado.
    Petición HTTP enviada, esperando respuesta... 200 OK
    Longitud: 8,535,749 (8.1M) [application/x-tar]

    100%[===============================================================================================================>] 8,535,749 240.05K/s ETA 00:00

    11:18:40 (237.28 KB/s) - `Python-2.3.5.tgz' saved [8535749/8535749]

    [root@localhost src]# tar -xzf Python-2.3.5.tgz
    [root@localhost src]# cd Py
    Python-2.3.5/ Python-2.3.5.tgz
    [root@localhost src]# cd Python-2.3.5
    [root@localhost Python-2.3.5]#
  2. Compilamos e instalamos el intérprete de Python. Es muy importante indicar el directorio en el que queremos que se instale la versión que estamos construyendo a partir del código fuente.
    ./configure --prefix="/opt/python2.3.5"
    make
    make install

    La salida en la consola es: ./configure --prefix="/opt/python2.3.5", make, make install

  3. Ya tenemos instalado el intérprete de Python 2.3.5, los ejecutables se encuentran en /opt/python2.3.5/bin

 

 

PIL - Python Imaging Library

PIL es un componente para Python que permite manipular imágenes. Si está disponible al instalar Zope, Plone podrá realizar miniaturas de las imágenes además de permitir otras operaciones como rotaciones y reescalados.

  1. Descargamos el código fuente de PIL 1.1.5 en /opt/src, lo desarchivamos y cambiamos al directorio que contiene el código fuente
    [root@localhost bin]# cd /opt/src/
    [root@localhost src]# wget http://effbot.org/downloads/Imaging-1.1.5.tar.gz
    --11:50:09-- http://effbot.org/downloads/Imaging-1.1.5.tar.gz
    => `Imaging-1.1.5.tar.gz'
    Resolviendo effbot.org... 85.112.160.12
    Connecting to effbot.org|85.112.160.12|:80... conectado.
    Petición HTTP enviada, esperando respuesta... 200 OK
    Longitud: 429,570 (420K) [application/x-tar]

    100%[===============================================================================================================>] 429,570 220.22K/s

    11:50:13 (219.66 KB/s) - `Imaging-1.1.5.tar.gz' saved [429570/429570]

    [root@localhost src]# tar -xzf Imaging-1.1.5.tar.gz
    [root@localhost src]# cd Im
    Imaging-1.1.5/ Imaging-1.1.5.tar.gz
    [root@localhost src]# cd Imaging-1.1.5
    [root@localhost Imaging-1.1.5]#
  2. La instalación de PIL es sencilla, sólo hay que ejecutar el script setup.py con el intérprete de Python adecuado (el que hemos instalado en el punto anterior). Hay que fijarse en la salida que proporciona la instalación para comprobar el soporte de formatos de imagen.
    [root@localhost Imaging-1.1.5]# /opt/python2.3.5/bin/python setup.py install
    running install
    running build
    running build_py
    creating build
    :
    --------------------------------------------------------------------
    PIL 1.1.5 BUILD SUMMARY
    --------------------------------------------------------------------
    version 1.1.5
    platform linux2 2.3.5 (#1, Apr 16 2006, 11:37:12)
    [GCC 4.0.1 (4.0.1-5mdk for Mandriva Linux release 2006.0)]
    --------------------------------------------------------------------
    --- TKINTER support ok
    --- JPEG support ok
    --- ZLIB (PNG/ZIP) support ok
    --- FREETYPE2 support ok

    --------------------------------------------------------------------
    To check the build, run the selftest.py script.
    :
    changing mode of /opt/python2.3.5/bin/pilconvert.py to 755
    changing mode of /opt/python2.3.5/bin/pildriver.py to 755
    changing mode of /opt/python2.3.5/bin/pilfile.py to 755
    changing mode of /opt/python2.3.5/bin/pilfont.py to 775
    changing mode of /opt/python2.3.5/bin/pilprint.py to 755
    creating /opt/python2.3.5/lib/python2.3/site-packages/PIL.pth
    [root@localhost Imaging-1.1.5]#

 

Instalación de Zope

Zope es el servidor de aplicaciones que va a ejecutar Plone, incluye su propia base de datos orientada a objetos ZODB y el servidor web.

  1. Descargamos el código fuente de Zope 2.8.6 en /opt/src, lo desarchivamos y cambiamos al directorio que contiene el código fuente
    [root@localhost Imaging-1.1.5]# cd /opt/src/
    [root@localhost src]# wget http://www.zope.org/Products/Zope/2.8.6/Zope-2.8.6-final.tgz
    --12:09:16-- http://www.zope.org/Products/Zope/2.8.6/Zope-2.8.6-final.tgz
    => `Zope-2.8.6-final.tgz'
    Resolviendo www.zope.org... 63.240.213.171
    Connecting to www.zope.org|63.240.213.171|:80... conectado.
    Petición HTTP enviada, esperando respuesta... 200 OK
    Longitud: 5,378,968 (5.1M) [application/x-gzip]

    100%[===============================================================================================================>] 5,378,968 240.83K/s ETA 00:00

    12:09:38 (236.49 KB/s) - `Zope-2.8.6-final.tgz' saved [5378968/5378968]

    [root@localhost src]# tar -xzf Zope-2.8.6-final.tgz
    [root@localhost src]# cd Zo
    Zope-2.8.6-final/ Zope-2.8.6-final.tgz
    [root@localhost src]# cd Zope-2.8.6-final
    [root@localhost Zope-2.8.6-final]#
  2. Compilamos e instalamos Zope. Es muy importante indicar el intérprete de Python a utilizar (la versión que hemos instalado anteriormente) y el directorio de instalación de Zope
    ./configure --prefix="/opt/zope2.8.6" --with-python="/opt/python2.3.5/bin/python"
    make
    make install

    Es importante fijarse en la salida para detectar posibles errores: ./configure, make, make install

  3. Creamos una instancia de Zope. Cada instancia es un servidor que podemos utilizar de forma independiente.
    [root@localhost opt]# /opt/zope2.8.6/bin/mkzopeinstance.py
    Please choose a directory in which you'd like to install
    Zope "instance home" files such as database files, configuration
    files, etc.

    Directory: /opt/zope_ceiprafaelcasanova
    Please choose a username and password for the initial user.
    These will be the credentials you use to initially manage
    your new Zope instance.

    Username: admin_zope
    Password:
    Verify password:
    [root@localhost opt]#

    El usuario y contraseña especificados corresponden al administrador de la instancia.

  4. Editamos el fichero de configuración /opt/zope_ceiprafaelcasanova/etc/zope.conf para indicar mediante la directiva effective-user zope que 'zope' será el usuario bajo el que se ejecutarán los procesos de esta instancia. También es necesario utilizar la directiva address en la sección <http-server> para indicar que el servidor escuchará en el puerto 8082, recuerde que el puerto 8080 está ocupado por Squid.
  5. Creamos una nueva cuenta para el usuario zope, bloqueamos la cuenta a logins interactivos y cambiamos el dueño/grupo de los ficheros de la instancia.
    [root@localhost etc]# useradd zope
    [root@localhost etc]# passwd -l zope
    Locking password for user zope.
    passwd: Success
    [root@localhost etc]# chown -R zope.zope /opt/zope_ceiprafaelcasanova/
    [root@localhost etc]#
  6. Con el fin de automatizar el arranque y parada de la instancia Zope con el arranque/parada del sistema, es necesario utilizar un script de control que se colocará en /etc/init.d/zope_ceiprafaelcasanova. En dicho script hay que actualizar la variable zopectl para que apunte al programa de la instancia a controlar. Después utilizando la herramienta de administración de servicios, se puede marcar zope_ceiprafaelcasanova para que se lance automáticamente en cada arranque de la máquina. No olvide que el script debe tener permiso de ejecución.
  7. Como se ha instalado Zope desde el código fuente, no se ha configurado de manera automática el demonio logrotate para que rote los ficheros de registro de Zope. Si no se realiza de forma periódica la rotación de ficheros de registro estos crecerán de forma continuada, agotando el espacio de almacenamiento. Para indicar a logrotate que rote los ficheros de registro de Zope, debemos añadir al fichero de configuración /etc/logrotate.conf las siguietnes líneas:
    # Rotación de los ficheros de Zope
    /opt/zope_ceiprafaelcasanova/log/event.log {
    monthly
    create 0644 zope zope
    rotate 4
    compress
    }

    /opt/zope_ceiprafaelcasanova/log/Z2.log {
    monthly
    create 0644 zope zope
    rotate 4
    compress
    }

Instalación de Plone

  1. Desarchivamos el código fuente de Plone en el interior de /opt/src
    [root@localhost etc]# cd /opt/src/
    [root@localhost src]# mv /home/vcarceler/Desktop/Plone-2.1.2.tar.gz .
    [root@localhost src]# tar -xzf Plone-2.1.2.tar.gz
  2. Copiamos todos los productos de Plone al directorio /opt/zope_ceiprafaelcasanova/Products y cambiamos el usuario/grupo de dichos ficheros
    [root@localhost src]# cp -r /opt/src/Plone-2.1.2/* /opt/zope_ceiprafaelcasanova/Products/
    cp: ¿sobreescribir «/opt/zope_ceiprafaelcasanova/Products/README.txt»? (s/n) s
    [root@localhost src]# chown -R zope.zope /opt/zope_ceiprafaelcasanova/Products/
  3. A partir de ahora, ya tenemos la instalación básica de Plone realizada. Queda pendiente arrancar el servicio, iniciar sesión en la interfaz de administración de Zope y crear un objeto Plone Site con id ceiprafaelcasanova

 

Apache

Aunque Zope incluye su propio servidor web, si se van a recibir peticiones desde Internet, resulta aconsejable configurar un servidor Apache que actúe como proxy de Zope.

Para esta función, no es necesario más que configurar un VirtualHost en Apache para el dominio ceiprafaelcasanova.xeill.net.

En el directorio /etc/httpd/conf/vhosts.d añadimos el fichero ceiprafaelcasanova.conf con el siguiente contenido:

NameVirtualHost *:80
<VirtualHost *:80>
ServerName ceiprafaelcasanova.xeill.net

RewriteEngine On
RewriteRule ^/(.*) http://raca.ceiprafaelcasanova.xeill.net:8082/VirtualHostBase/http/ceiprafaelcasanova.xeill.net:80/ceiprafaelcasanova/VirtualHostRoot/$1 [L,P]
</VirtualHost>

La configuración del VirtualHost anterior utiliza los módulos mod_rewrite y mod_proxy. El primero se instala por defecto con el paquete apache-modules, el segundo si no está instalado hay que instalarlo con el paquete apache-mod_proxy-2.0.54-13mdk.

Una vez instalado mod_proxy, hay que modificar el fichero de configuración /etc/httpd/modules.d/30_mod_proxy.conf para permitir el uso del proxy en modo reverse.

<IfDefine HAVE_PROXY>
<IfModule !mod_proxy.c>
LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
</IfModule>
</IfDefine>

<IfModule mod_proxy.c>

#
# Proxy Server directives. Uncomment the following lines to
# enable the proxy server:
#

# Solo utilizamos un reverse proxy para las rewrite rules [P] no es necesario
# tener activado ProxyRequests On
# OJO: Activar ProxyRequests te puede llevar a un proxy abierto !!!

ProxyRequests Off

<Proxy *>
Order deny,allow
Allow from all
</Proxy>


#
# Enable/disable the handling of HTTP/1.1 "Via:" headers.
# ("Full" adds the server version; "Block" removes all outgoing Via: headers)
# Set to one of: Off | On | Full | Block
#

ProxyVia On

# End of proxy directives.

</IfModule>


También es importante modificar la configuración de /etc/httpd/modules.d/55_mod_cache.conf para que Apache no haga de caché y guarde contenidos antiguos del gestor de contenidos. Si no se desactiva la caché se pueden encontrar problemas con las hojas de estilo del CMS o con versiones antiguas de los contenidos.

<IfDefine HAVE_CACHE>
<IfModule !mod_cache.c>
LoadModule cache_module modules/mod_cache.so
</IfModule>
</IfDefine>


<IfModule mod_cache.c>

#CacheDisable /admin
# Desactivamos la caché desde la raíz
CacheDisable /


# requires mod_mem_cache
# CacheEnable mem /manual
# CacheEnable fd /images

# requires mod_disk_cache
# CacheEnable disk /

# CacheForceCompletion 80
# CacheIgnoreCacheControl On
# CacheIgnoreNoLastMod On
# CacheLastModifiedFactor 0.5

CacheMaxExpire 604800

</IfModule>

Copias de seguridad de Zope mediante repozo

Con la distribución de Zope se incluye un script de nombre repozo.py que permite hacer una copia de seguridad de la base de datos de objetos Zope (ZODB) sin necesidad de detener Zope. Cuando repozo se pone a trabajar, comprueba el momento en el que se hizo la última copia, y si es posible, realiza una copia diferencial que incluya los cambios realizados. Si no es posible realiza una copia íntegra. De este modo es posible programar una tarea periodica para que cada día se haga una copia de seguridad de los cambios que han ocurrido en la ZODB.

A repozo hay que indicarle:

  • El directorio en el que se guardará el backup, en nuestro caso /store/backup/zope_ceiprafaelcasanova/zope_ceiprafaelcasanova. Hay que crear estos directorios antes de utilizar repozo por primera vez
  • El fichero que proporciona persistencia a la ZODB, en nuestro caso /opt/zope_ceiprafaelcasanova/var/Data.fs
  • Las opciones de archivado


Si se quiere realizar un backup al día, la manera más sencilla es incluir el script repozo_zope_ceiprafaelcasanova en el directorio /etc/cron.daily. El script guarda los datos en /store/backup/zope_ceiprafaelcasanova/zope_ceiprafaelcasanova y deja un registro de sus acciones en /store/backup/zope_ceiprafaelcasanova/backup_repozo.log

 

Nuevo administrador para Zope

Durante la instalación de Zope se creó el usuario administrador admin_zope. Este usuario y su contraseña se guardarán como último recurso. Para la adminstración del sitio Plone, se creará un nuevo usuario 'admin' que se incluirá en el grupo administradores de Plone.

  1. Iniciamos sesión en Plone con el usuario admin_zope
  2. En la sección Preferencias -> Administración de usuarios y grupos creamos un nuevo usuario 'admin'
  3. Agregamos el usuario admin al grupo Administrators. A partir de ahora, se utilizará el usuario admin como administrador de la instancia Plone.