Installare Zope e Plone 3
Note: Return to tutorial view.
Introduzione
1.1 Architettura Zope
-
Zope è una piattaforma
Zope sgrava lo sviluppatore da gran parte dei dettagli onerosi tipici dello sviluppo di un’applicazione Web, come la persistenza dei dati, l’integrità ed il controllo degli accessi, permettendo quindi di concentrarsi sul problema in sé. L’utilizzo degli strumenti messi a disposizione, inoltre, è reso molto più veloce rispetto ad altri linguaggi o piattaforme. Zope consente di scrivere la logica dell’applicazione web in linguaggio Python, e fornisce il supporto aggiuntivo per il linguaggio Perl. Zope offre anche due soluzioni alternative che permettono di strutturare il testo, XML e HTML: il Document Template Markup Language (DTML), e le ZPT (Zope Page Templates, modelli di pagina).
-
Zope è orientato agli oggetti
A differenza dei comuni sistemi Web basati su file, come ASP o PHP, Zope è una piattaforma di sviluppo fortemente “orientata agli oggetti”. L’orientamento ad oggetti è un concetto condiviso da molti linguaggi di programmazione, compreso Python, con il quale Zope è implementato. Se siete dei programmatori abituati ai linguaggi procedurali, tipicamente usati per la programmazione web, come Perl o PHP, tale idea potrebbe richiedere del tempo per essere assimilata.
-
Componenti fondamentali di Zope
-
ZServer
Zope è distribuito con un web server integrato che fornisce i contenuti per sé e per i propri utenti. Questo web server fornisce contenuti anche via FTP, WebDAV, e XML-RPC (servizio web per la chiamata di procedure da remoto).
-
Web Server
Probabilmente avrai già un web server, come Apache o Microsoft IIS e potresti non volere usare quello di Zope. Zope funziona anche con questi e tutti gli altri web server che supportano la Common Gateway Interface (CGI).
-
Zope Core
E' il meccanismo che coordina tutto, gestendo l’interfaccia web ed il database ad oggetti.
-
Object Database
Quando usi Zope, solitamente lavori con oggetti memorizzati nel database ad oggetti di Zope.
Zope è costituito da molti componenti che lavorano insieme per aiutarti a costruire un’applicazione web. I componenti fondamentali di Zope sono mostrati nella figura sotto, e spiegati di seguito.
-
-
Relational Database
Se non si intende memorizzare le proprie informazioni nel database ad oggetti di Zope, puoi usare altri database relazionali come Oracle, PostgreSQL, Sybase, MySQL ed altri.
-
File System
Zope può naturalmente utilizzare documenti ed altri file memorizzati sul filesystem del proprio server.
-
Zclasses
Zope consente agli amministratori del sito di aggiungere nuovi tipi di oggetto attraverso l’interfaccia Web. Questi tipi di oggetto sono denominati Zclasses.
-
Products
L’aggiunta di nuovi tipi di oggetto è possibile anche attraverso l’installazione di “Prodotti” nel filesystem del server di Zope.
1.2 Cenni su hardware ed ottimizzazione
-
Requisiti hardware
L'architettura Zope/Plone richiede almeno 512Mb di ram per funzionare correttamente ma è consigliato almeno 1Gb per servizi in produzione.
1.3 Scelta del sistema operativo
La maggior parte delle distribuzioni GNU/linux si presta molto bene per ospitare un ambiente Zope/Plone ma per limitare al massimo imprevisti e/o incompatibilità offerte da Zope raccomandiamo un ambiente basato su Debian.
1.4 Riferimenti web
-
Installazione di un sistema di produzione:
http://plone.org/documentation/tutorial/robust-installation/tutorial-all-pages
-
Installazione di Zope Plone su Fedora Core 5
Python
2.1 Perchè installare tutto da sorgenti?
Con un installer Windows e Mac OS X disponibile su plone.org, oltre all'integrazione di pacchetti nella maggior parte delle distribuzioni Linux e dei BSD ports systems, ci si potrebbe chiedere che senso abbia installare Zope e Plone dal sorgente. La risposta è semplice e può essere espressa in una parola: Controllo. Usando un pacchetto o una porta si rinuncia a una parte di controllo sulla gestione del layout delle direcotory, delle dipendenze e delle versioni. Alcune distribuzioni includono solo versioni obsolete di Zope e Plone, mentre altre includono l'ultima distribuzione appena questa è stata rilasciata, spesso quindi non controllata da un'adeguata serie di test. Tutto ciò può costituire un problema se si ha bisogno di fare un upgrade di una dipendenza e il package manager insiste con voler fare l'upgrade di Zope o Plone con una versione che non si ha ancora testato con la propria applicazione.
Riguardo ai OS packaging systems, molti pensano che siano utili per installare tutte quelle funzioni e applicazioni che semplificano il lavoro, ma preferiscono installare tutti i servizi fondamentali e che costituiscono punti critici di un progetto dal sorgente, per avere maggior controllo sul ciclo di upgrade. Nel mondo di Zope questo modo di pensare è particolarmente adatto, perché è un'operazione veloce che non comporta grossi problemi se si possiede la giusta versione di Python.
2.2 Strumenti per lo sviluppo necessari
Per eseguire le seguenti operazioni, si dovrebbe essere autenticati come root. Se si deve cominciare da zero, si può provare ad installare tutti gli strumenti per lo sviluppo, specialmente il GNU C compiler gcc. Se invece si ha già installato Fedora Core 5 e non si sa se gcc è installato, si può provare ad eseguire il comando: gcc oppure rpm -qa | grep gcc e controllare se gcc è già presente, o ci si può aiutare con Python install, che controllerà se esiste un gcc valido disponibile. Se non è presente nessun gcc, si può provare con 'yum install gcc' dall'account root o scaricare il gcc rpm e installarlo con il comando 'rpm -i filename'. Il gcc installato su my FC 5 è gcc-4.1.0-3. Tutte le operazioni seguenti vanno eseguite dalla root.
2.3 Preconfigurazione ed Installazione
Potrebbe già essere preinstallato su FC 5. Potrebbe non essere Python 2.4.4. Si può provare inserendo semplicemente 'python' nella finestra terminale o 'rpm -qa | grep python' e controllare quale versione è già presente o meno. Se non è installata alcuna versione, si può provare 'yum install python'. Python 2.4 è caratterizzato da un aumento delle prestazioni del 5% o anche superiore rispetto alle versioni precedenti ed è necessario per lavorare con Zope 2.9.8, quindi è con esso che lavoreremo. Per installare dalla sorgente, si scarica il 'compressed source tarball' di Python 2.4.4 dal sito http://www.python.org
Ecco i passi che servono per installarlo nella directory /opt/zope:
tar-zxvf Python-2.4.4.tgz
cd Python-2.4.4
./configure --prefix=/opt/zope/python-2.4.4
make
make install
2.4 Componenti aggiuntivi necessari
-
Python Imaging Library (PIL)
Una serie di oggetti, come gli album fotografici, richiedono l'installazione della Python Imaging Library (PIL), che si può trovare al seguente indirizzo: http://www.pythonware.com/products/pil/
Per compilare queste librerie ci si appoggerà anche ad alcune librerie dipendenti dal sistema operativo tra cui libjpeg-dev e libpng-dev libfreetype-dev.
tar-zxvf Imaging-1.1.6.tar.gz
cd Imaging-1.1.6
Si può dare un'occhiata al file README per istruzioni su come compilare e installare il file, ma comunque il comando sarà di questo genere, utilizzando l'interprete python appena compilato:
/opt/zope/python-2.4.4/bin/python setup.py build
/opt/zope/python-2.4.4/bin/python setup.py setup.py install
Così facendo avremo le PIL installate correttamente nel nostro interprete python.
Zope
3.1 Zope - Preconfigurazione ed Installazione
Con queste istruzioni installeremo Zope in /opt/zope/zope-2.9.8, in modo da poter liberamente installare differenti versioni di Zope senza troppe difficoltà. Per esempio, si potrebbe già avere /opt/zope/zope-2.8.7 e /opt/zope/zope-2.9.3 con cui è possibile fermare un server e inizializzarne un altro per eseguire una migrazione verso una nuova versione, o avere la possibilità di eseguire versioni più vecchie nel caso accada qualcosa ad una più nuova.
Si scarica il file sorgente Zope-2.9.8 tgz da http://www.zope.org, lo si decomprime in una directory con il comando:
tar -zxvf Zope-2.9.8.tgz
cd Zope-2.9.8
I comandi seguenti installeranno Zope in /opt/zope/zope-2.9.8 usando il nostro interprete python:
./configure –prefix=/opt/zope/zope-2.9.8 --with-python=/opt/zope/python-2.4.4/bin/python
make
make install
3.2 Creazione e configurazione di un'istanza
Ora lavoriamo nella directory dove abbiamo installato zope e creiamo una nuova istanza con:
cd /opt/zope/2.9.3/bin
./mkzopeinstance.py
Il programma suggerirà la “install directory”, l'account di administrator e la password, che in quest'esempio saranno:
Directory: /opt/zope/istanza
Username: admin
Password: adminpassword
Verify password: adminpassword
3.3 Configurazione
Ora attraverso il file zope.conf, con l'editor che si preferisce, come pico, nano, vi, vim o emacs. definire 'effective-user' appena sotto il testo di commento all'effective-user:
effective-user zope
Questo permette all'istanza si acquisire i diritti dell'utente zope.
Ci sono molte altre direttive che possono essere personalizzate attraverso zope.conf, come ad esempio la porta di ascolto del servizio o lo ZODB da utilizzare ma che si preferisce rimandare ad una fase di personalizzazione successiva all'installazione.
Ora si salva e si chiudi il file zope.conf file, poi si inserisce:
cd /opt/zope/
chown -R zope:zope *
Questi comandi cambieranno la proprietà di questa istanza Zope in modo che venga eseguita come user id zope.
3.4 Test di funzionamento
Ora avviamo il server Zope eseguendo il comando dalla cartella /bin dell'istanza creata:
./zopectl start
e per vedere se è ancora in esecuzione:
./zopectl status
All'indirizzo http://localhost:8080 per vedere se lo start screen di Zope è disponibile. Se qualcosa non funziona o sembra non funzionare nel modo corretto, si inserisce:
./zopectl stop
per essere sicuri che non è più in esecuzione si può fare il debug con
./zopectl fg
ed esaminare i messaggi che appariranno sullo schermo.
Se non ci sono problemi, si inserisce nel browser http://localhost:8080/manage e si potrà visualizzare il pannello di controllo dalla root subdirectory.
Plone
4.1 Plone - Installazione
-
Download dei sorgenti
Si utilizza Plone 2.5.4 scaricandolo liberamente dal sito www.plone.org
-
Installazione da sorgenti
Ora si decomprime Plone 2.5.4 usando il comando:
tar -zxvf Plone-2.5.4tar.gz
cp -R Plone-2.5.4/* /opt/zope/zope-2.9.8/Products
chown -R zope:zope /opt/zope/zope-2.9.8/Products
Poi si riavvia il server con il comando:
/opt/zope/2.9.3/bin/zopectl restart
Nel browser attraverso l'indirizzo http://localhost:8080/manage, introducendo id utente e password di amministratore, si accederà alla ZMI. Successivamente nel menù a scorrimento Add: cercheremo 'Plone Site' e lo selezioneremo. Daremo al sito Plone un nome, tipo 'test', e all'indirizzo http://localhost:8080/test dovrebbe apparire la schermata principale di Plone, in cui si sarà già autenticati con il ruolo di Amministratore. Su Preferenze, poi Utenti e Gruppi, si potrà aggiungere il primo utente, tipo 'webmaster', poi con il tasto “tutti gli utenti” si potrà assegnare al webmaster tutti i permessi e i privilegi per gestire l'intero sito. D'ora in avanti si dovrà usare il ruolo di webmaster per lavorare su quell'istanza Plone, invece di usare l'account 'admin' usato inizialmente.
4.2 Aggiunta nuovi prodotti
Tutti i nuovi prodotti dovranno essere decompressi e visibili nella directory /opt/zope/istanza/Products
cd /opt/zope/istanza/Products
wget http://sito/prodotto_nuovo.tar.gz
tar zxf prodotto_nuovo.tar.gz
/opt/zope/istanza/bin/zopectl restart
Apache
5.1 Installazione di Apache e moduli necessari
-
Prerequisiti
-
Apache 2 installato e in esecuzione;
-
I seguenti moduli di Apache 2 installati (dovrebbero essere trasferiti con Apache 2)
-
mod_cache
-
mod_deflate
-
mod_disk_cache
-
mod_headers
-
mod_mime_magic
-
mod_proxy
-
mod_proxy_http
- mod_rewrite
-
Zope installato e funzionante;
-
Scenario
Abbiamo un server Apache 2 che lavora con richieste sia http sia https, su tutte le interfacce. Il sito http://example.org/ è uno zope con http://www.example.org/ come alias. Ogni richiesta ad un url viene riscritta in https://secure.example.org/ per un accesso sicuro. Il server zope http gira sulla porta 10080 in localhost ed il sito è immagazzinato in /example_org/.
5.2 Configurazione di una virtualhost
-
Introduzione
Virtual hosting significa servire più di un dominio da un singolo indirizzo ip. Il webserver Apache 2 sa a quale dominio ci si riferisce usando il nome di dominio inviato dal browser.
-
Configurazione Apache
Si controlla il file /etc/apache2/ports.conf e ci si assicura che Apache 2 sia in ascolto sulla porta di default per http:
Listen 80
Se s vuole usare SSL, si deve essere in ascolto anche sulla porta di default per https:
Listen 80
<IfModule mod_ssl.c>
Listen 443
</IfModule>
Se si hanno dispositivi di rete e/o indirizzi ip multipli si può legare Apache ad un singolo indirizzo:
Listen 192.168.7.1:80
Si deve poi configurare Apache 2 in modo che usi il cosiddetto NameVirtualHost per virtual hosting. Questa è la configurazione più facile perché l'unica cosa che si deve fare è fornire il nome del server e l'indirizzo/porta in ogni sezione di configurazione del virtual domain. Si cambia il file /etc/apache2/conf.d/namevirtualhost.conf e si aggiungi questa riga:
NameVirtualHost *:80
<IfModule mod_ssl.c>
NameVirtualHost *:443
</IfModule>
Le varie voci devono apparire come quelle in ports.conf ma con un * anteriore: se Apache 2 è in ascolto su ogni indirizzo.
Si riavvia Apache 2 e si controlla se si può navigare fino al server.
-
Creazione di un Virtualhost
Un esempio molto semplice:
<VirtualHost *:80>
ServerAlias www.example.org
ServerAdmin webmaster@example.org
ServerSignature On
CustomLog /var/log/apache2/example.org-access.log combined
ErrorLog /var/log/apache2/example.org-error.log
LogLevel warn
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^/(.*) \
http://localhost:10080/VirtualHostBase/http/%{SERVER_NAME}:80/example_org/VirtualHostRoot/$1 [L,P]
</IfModule>
</VirtualHost
-
Un esempio di server Zope di produzione:
<VirtualHost *:80>
ServerAlias www.example.org
ServerAdmin webmaster@example.org
ServerSignature On
# we don't need a DocumentRoot for a zope only sites
#DocumentRoot /var/www/example.org
CustomLog /var/log/apache2/example.org-access.log combined
ErrorLog /var/log/apache2/example.org-error.log
LogLevel warn
# log the deflate compression rate to a file
#CustomLog /var/log/apache2/deflate_log deflate
<IfModule mod_rewrite.c>
RewriteEngine On
# use RewriteLog to debug problems with your rewrite rules
# disable it after you found the error our your harddisk will be filled *very fast*
# RewriteLog "/var/log/apache2/rewrite_log"
# RewriteLogLevel 2
# serving icons from apache 2 server
RewriteRule ^/icons/ - [L]
# rewrite any access to manage to a secure server
RewriteRule ^/(.*)/manage(.*) \
https://secure.example.org/zope/example_instance/example_org/$1/manage$2 [NC,R=301,L]
RewriteRule ^/manage(.*) \
https://secure.example.org/zope/example_instance/example_org/manage$1 [NC,R=301,L]
# rewrite any other access to the zope server using a proxy [P] and add the VMH magic keywords
# use %{SERVER_NAME} instead of example.com to avoid busting the ServerAlias
# %{HTTP_HOST} is bad because it may contain the port
RewriteRule ^/(.*) \
http://localhost:10080/VirtualHostBase/http/%{SERVER_NAME}:80/example_org/VirtualHostRoot/$1 [L,P]
</IfModule>
<IfModule mod_proxy.c>
ProxyVia On
# prevent the webserver from beeing used as proxy
<LocationMatch "^[^/]">
Deny from all
</LocationMatch>
</IfModule>
# caching (disabled)
# this caches every file with the correct caching informations starting at /
<IfModule mod_disk_cache.c>
#CacheEnable disk /
</IfModule>
# compression (disabled)
<IfModule mod_deflate.c>
#SetOutputFilter DEFLATE
</IfModule>
</VirtualHost>
Effettuare il reload di apache ogni volta che si crea/modifica un virtualhost.
Backup
6.1 Panoramica sui backup
-
Su cosa eseguire il backup?
Si dovrebbe eseguire il backup almeno per:
-
I contenuti. Si trovano in genere nel file del database Zope chiamato, nella directory /var della tua istanza Zope.
-
Personalizzazioni che sono state effettuate sul file system.
-
Tutti i prodotti che sono stati installati. Sono necessari per rigenerare il sito in un nuova installazione di Plone. Si esegue il backup dell'intera directory Products dell'istanza Zope, comprese tutte le directory che contengono elementi ai quali possono essere connessi link presenti in Products. Non c'è bisogno di salvare prodotti che si possono recuperare da archivi su internet (come il SVN di Plone). Tuttavia, quando si ha bisogno di recuperare elementi da un backup, si avrà bisogno delle stesse versioni dei prodotti che vengono usati nel tuo sito web e sui quali è stato eseguito il backup. Fare una copia di riserva dei prodotti è una sicurezza intrinseca, indipendente da archivi esterni. Altri metodi “esterni” nella directory Extensions dell'istanza Zope.
-
Il file di configurazione di Zope (in genere zope.conf nella directory /etc dell'istanza Zope).
-
I files translation files (in genere nella directory i18n dell'istanza Zope).
La maggior parte di questi files possono essere semplicemente copiati in un backup server o medium (per esempio, attraverso un rsync giornaliero dell'istanza Zope). Il file di database Data.fs costituisce però un'eccezione.
Dovrebbe essere prestata particolare attenzione nel copiare Data.fs, dato che questo file può essere modificato quando Plone è in esecuzione durante l'operazione di backup. Anche se Plone (in realtà Zope) può in genere recuperare il file di database in questa situazione, esistono alcune eccezioni a questa regola (per esempio nel caso in cui sia in atto un'operazione di decompressione o di compressione durante il backup). Raccomandiamo quindi vivamente di fare il backup di Data.fs in uno dei seguenti modi:
-
Usare Repozo
La maniera raccomandata di eseguire il backup del database è usare lo script repozo.py di Zope. In questo modo si può eseguire un backup sicuro e automatico mentre Plone è in esecuzione, senza effetti collaterali sui dati. Questa è generalmente considerata la pratica migliore per eseguire un backup per Zope/Plone in un ambiente di produzione.
Repozo può essere usato per creare un backup completo del database. Dato che Plone immagazzina i suoi dati in un ampio file binario, creare un backup completo giornaliero potrebbe occupare troppa memoria e troppe risorse di rete. In questo caso, si può anche usare Repozo per creare un backup incrementale del database.
Si possono trovare ulteriori informazioni su Repozo in Backing up FileStorage files sul sito web di Zope. Si può trovare lo script repozo.py nella directory /bin del software per l'installazione di Zope. Contiene un docstring informativo sulle opzioni del terminale.
-
Arresto di Zope e backup del database
Il modo più semplice di eseguire il backup del database è di fermare Zope, copiare Data.fs e riavviare Zope. Questa modalità è facile e sicura, ma ha lo svantaggio di obbligare a bloccare i propri siti se pur per un breve periodo.
-
Compressione del database e backup della copia pre-compressa
Un altro modo per eseguire in sicurezza il backup di Data.fs senza bloccare i siti è comprimere il database nella Zope management interface (ZMI): Control panel > Database management > Main > Pack. Ciò mantiene un file Data.fs.old con i contenuti precedenti del database. Dato che Plone non lavore più con quel file dopo la compressione, è sicuro fare il backup del file dopo la compressione mentre Plone continua ad essere in esecuzione. Assicurarsi di fare il backup di Data.fs.old e non di Data.fs.
-
Comprimere il database significa ridurre le sue dimensioni eliminando versioni archiviate di oggetti, più vecchi di una specifica data. Dopo la compressione, non sarà più possibile tornare a queste vecchie versioni.
Un prodotto che può tornare molto utile è PloneMaintenance. Può essere usato per comprimere automaticamente il database a intervalli regolari. Lo si può configurare, per esempio, in modo che comprima il database ogni notte prima che il system backup script vada in esecuzione sul server. In questo modo, si otterrà un backup sicuro e giornaliero del database (assumendo che il system backup sia configurato per essere eseguito dopo che il database è stato compresso).
ZEO
7.1 Perché usare ZEO?
ZEO è conosciuto soprattutto per le sue funzioni di clustering – che permettono di distribuire il carico del tuo sito su CPUs multiple. Tuttavia, ci sono diverse ragioni per usare ZEO anche se si sta utilizzando solo una singola macchina:
-
Si può dedicare un client per il sito pubblico e avere un secondo client che gestisca una serie di compiti come compattare ZODB e re-indicizzare il catalogo
-
Si può eseguire il debug del sito pubblico via
zopectl debug– possono eventualmente sorgere dei problemi con un esecuzione di tipo production-level -
Si sta proteggendo il prorpio sito dal giorno in cui si avrà davvero bisogno di un cluster di macchine
7.2 Quanti ZEO Clients?
Il server ZEO è critico per I/O, mentre gli ZEO clients sono critici per CPU e RAM. Si raccomanda di creare un ZEO client accessibile pubblicamente per ogni CPU disponibile, se si hanno almeno 256MB di RAM (preferibilmente 512MB+) ciascuno.
Sistema
8.1 Schedulazione dei processi di backup
-
I tool di backup repozo.py e zeopack possono ovviamente essere schedulati per essere avviati in orari programmati attraverso il file crontab di sistema:
Un esempio di script potrebbe essere:
#!/bin/sh
PYTHONPATH=/opt/zope/python-2.4.4/
export PYTHONPATH
REPOZOPATH=/opt/zope/istanza/bin/repozo.py
PYTHON=/opt/zope/python-2.4.4/bin/python
BACKUP=/opt/zope/backups
echo
echo "backup starting"
date
$PYTHON $REPOZOPATH -B -v -z -r $BACKUP -f
/opt/zope/istanza/var/Data.fs >>
/opt/zope/istanza/log/repozobackups.log 2>&1
echo "backup finished"
che potrebbe essere schedulato attraverso un crontab:
crontab -e
e aggiungendo la riga:
10-30-50 * * * * /opt/zope/mk_backup.sh 2>&1
Per assicurare che il servizio Zope parta al boot del sistema potremo fare un link simbolico in /etc/init.d/
cd /etc/init.d/
ln -s /opt/zope/istanza/bin/zopectl zopectl
e successivamente attraverso i tool specifici della distribuzione selezionare i runlevel in cui avviarlo, 2 3 4 5 sono generalmente quelli utilizzati.
Credits
Questo documento è stato realizzato da:
- Alice Narduzzo
- Matteo Sorba
Fonti e contributi:
Parti di questo documento sono costituite da
- libere traduzioni dal testo originale Basic Install of Python/Zope/Plone server on Fedora Core 5.
- libere traduzioni dal testo originale Setting up Plone and Zope from source
- libere traduzioni dal testo originale Create, configure, and maintain a robust Plone and Zope installation
