L'ECM, un exemple avec Alfresco

Alfresco, un ECM Open Source

Alfresco est un ECM Open Source sous licence LGPL.

Historique et versions

Il utilise la technologie Java JEE. Fondé par John Newton, co-fondateur de Documentum qui est le logicel de référence dans le domaine de l'ECM (aussi le plus cher).

2 Versions sont disponibles : Dernière version :

L'installation sur un système comme Debian lenny (stable) est assez fastidieuse, voici comment installer Alfresco.

Installation d'Alfresco

Il est possible d'installer le package Alfresco avec son serveur Apache Tomcat, et tous les composants. Mais à long terme, ce type d'installation s'avère dur à maintenir car les mises à jour doivent se faire manuellement. Nous avons donc opté pour une installation composant par composant.

Installation de la base de données

Plusieurs bases de données peuvent être installées, les plus courantes sont MySQL et PostgreSQL.
Nous choisissons d'installer PostgreSQL.

alfresco:/home/alfresco# apt-get install postgresql

Création de l'utilisateur de la base de données (PostgreSQL) :

alfresco:/home/alfresco# su - posgres
postgres:/home/ postgres # psql
postgres=# create user alfresco with password 'alfresc0';
alfresco:/home/alfresco#  su postgres -c "createdb --owner alfresco --encoding UTF8 --lc-ctype fr_FR.UTF8 --lc-collate fr_FR.UTF8 --template template0 alfresco"

Rajouter dans le fichier /etc/apt/sources.list, non-free à la fin de chaque source pour pouvoir installer sun-java6-jdk sur Debian.

alfresco:/home/alfresco# vi /etc/apt/sources.list
# deb http://debian.mirror.inra.fr/debian/ lenny main

deb http://debian.mirror.inra.fr/debian/ lenny main non-free
deb-src http://debian.mirror.inra.fr/debian/ lenny main non-free

deb http://security.debian.org/ lenny/updates main non-free
deb-src http://security.debian.org/ lenny/updates main non-free

deb http://volatile.debian.org/debian-volatile lenny/volatile main
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main

Mettre à jour les sources aptitude :

alfresco:/opt/tomcat# apt-get update

Installation de SWFTools

SWFTools permet de générer directement dans le Share d'Alfresco des prévisualisations d'images, de documents OpenOffice.
Il n'est pas présent dans les dépôts Debian, il faut l'installer SWFTools à la main en le compilant :

alfresco:/home/alfresco/swftools-2011-01-23-1815# wget http://www.swftools.org/swftools-2011-01-23-1815.tar.gz
--2011-01-27 16:09:01--  http://www.swftools.org/swftools-2011-01-23-1815.tar.gz
Resolving www.swftools.org... 212.112.241.67
Connecting to www.swftools.org|212.112.241.67|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2671198 (2.5M) [application/x-gzip]
Saving to: `swftools-2011-01-23-1815.tar.gz'

16% [==========>                                                           ] 447,809      351K/s         
alfresco:/home/alfresco/swftools-2011-01-23-1815# tar –xvf swftools-2011-01-23-1815.tar.gz

Dépendances nécessaires à la compilation de SWFTools :

alfresco:/home/alfresco/swftools-2011-01-23-1815# apt-get install make g++ zlib1g-dev libfreetype6-dev libgif-dev libjpeg62-dev libpg-java unzip
…
Setting up make (3.81-5) ...
Setting up linux-libc-dev (2.6.26-26lenny1) ...
Setting up libc6-dev (2.7-18lenny7) ...
Setting up g++-4.3 (4.3.2-1.1) ...
Setting up libstdc++6-4.3-dev (4.3.2-1.1) ...
Setting up g++ (4:4.3.2-2) ...
Setting up zlib-bin (1:1.2.3.3.dfsg-12) ...
Setting up libfreetype6-dev (2.3.7-2+lenny4) ...
Setting up libgif4 (4.1.6-6) ...
Setting up libgif-dev (4.1.6-6) ...
Setting up libjpeg62-dev (6b-14) ...

alfresco:/home/alfresco/swftools-2011-01-23-1815# ./configure 
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu

alfresco:/home/alfresco/swftools-2011-01-23-1815# make
making all in m4...
cd m4;make all
make[1]: Entering directory `/home/alfresco/swftools-2011-01-23-1815/m4'
make[1]: Leaving directory `/home/alfresco/swftools-2011-01-23-1815/m4'
making all in lib...
cd lib;make all
make[1]: Entering directory `/home/alfresco/swftools-2011-01-23-1815/lib'


alfresco:/home/alfresco/swftools-2011-01-23-1815# make install
making install in m4...
cd m4;make install
make[1]: Entering directory `/home/alfresco/swftools-2011-01-23-1815/m4'
make[1]: Nothing to be done for `install'.
make[1]: Leaving directory `/home/alfresco/swftools-2011-01-23-1815/m4'
making install in lib...

Nettoyage, les binaires sont installés sur le système :

alfresco:/home/alfresco/swftools-2011-01-23-1815# cd ..
alfresco:/home/alfresco# rm -r swftools-2011-01-23-1815

Openoffice.org 3.2

Pour que la prévisualisation fonctionne dans Share pour les documents Word, Powerpoint, Excel, etc ... Il faut installer
Openoffice.org en version 3.2 au minimum.
Dans sources.list rajouter à la suite du fichier /etc/apt/sources.list, la source suivante :

alfresco:/home/alfresco# cat >> /etc/apt/sources.list
deb http://www.backports.org/debian lenny-backports main contrib non-free
CTRL+D

alfresco:/home/alfresco# apt-get -t lenny-backports install

Ensuite, on installe tous les composants d'OpenOffice.org avec sun-java6-jdk :

alfresco:/home/alfresco# apt-get install sun-java6-jdk openoffice.org-core openoffice.org-java-common openoffice.org-writer openoffice.org-impress openoffice.org-calc imagemagick xvfb
Reading package lists... Done
...

Installation d'Apache Tomcat

alfresco:/opt/# cd /opt

alfresco:/opt/# wget http://mir2.ovh.net/ftp.apache.org/dist/tomcat/tomcat-6/v6.0.30/bin/apache-tomcat-6.0.30.tar.gz
alfresco:/opt/# tar -xvf apache-tomcat-6.0.30.tar.gz
alfresco:/opt/# mv apache-tomcat-6.0.30 /opt/tomcat

Il ne faut pas oublier d'ajouter la ligne shared.loader au fichier /opt/tomcat/conf/catalina.properties car sinon, le serveur ne retrouvera pas certaines librairies d'Alfresco (livrée avec l'application web d'Alfresco).

alfresco:/opt/tomcat# vi conf/catalina.properties 
shared.loader=${catalina.base}/shared/classes,${catalina.base}/shared/lib/*.jar

Il est possible que la librairie pour l'accès à la base de données ne soit pas présente, il faut la copier :

alfresco:/opt/tomcat# cp /usr/share/java/postgresql-jdbc3-8.2.jar lib/

S'il est impossible de trouver le fichier /usr/share/java/postgresql-jdbc3-8.2.jar, c'est que le package libpg-java n'est pas installé.

alfresco:/opt/tomcat# apt-get install libpg-java

Voici les lignes à rajouter dans /opt/tomcat/bin/catalina.sh ou dans le fichier de lancement du serveur. On peut le personnaliser en fonction de nos besoins, si le serveur possède beaucoup de mémoire vive, il est possible d'augmenter ces valeurs pour autoriser l'utilisation de plus de mémoire :

JAVA_OPTS="-Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m"

Installation de l'application web Alfresco

La version finale est disponible sur plusieurs plateformes. Pour une installation propre, les fichiers d'installation sont disponibles ici (en version 3.4c). Il est possible qu'il y ait une mise à jour d'ici là, pour être sûr d'avoir la dernière version, il suffira alors d'aller sur la page de téléchargement d'Alfresco et de choisir "Custom Installs & Optional Modules". Comme nous avons installé tous les composants manuellement, nous n'allons télécharger sur cette liste que les fichiers correspondants au .war d'Alfresco et le Share.

alfresco:/home/alfresco/Desktop# wget http://www.alfresco.com/elqNow/elqRedir.htm?ref=http://dl.alfresco.com/release/community/build-3335/alfresco-community-3.4.c.zip?dl_file=release/community/build-3335/alfresco-community-3.4.c.zip
alfresco:/home/alfresco/Desktop# unzip alfresco-community-3.4.c.zip 
Archive:  alfresco-community-3.4.c.zip
   creating: licenses/
   creating: licenses/3rd-party/
   creating: web-server/
   creating: web-server/conf/
   creating: web-server/lib/
   creating: web-server/shared/
   creating: web-server/shared/classes/
alfresco:/home/alfresco/Desktop# cd web-server/
alfresco:/home/alfresco/Desktop/web-server# mv * /opt/tomcat/

L'application web Alfresco peut s'installer sur un serveur d'applications Apache Tomcat ou encore Glassfish. Une fois la décompression terminée, la configuration de base de l'application web Alfresco est définie dans /opt/tomcat/shared/classes/alfresco-global.properties

Configuration d'Alfresco

Le fichier de configuration alfresco-global.properties contient les principaux paramètres de configuration d'Alfresco. Toute notre configuration qui va suivre va se faire dans ce fichier.

Par convention, nous ne devons modifier que les fichiers qui se situent dans cette arborescence :

Ils contiennent les différentes configurations du serveur ainsi que des exemples de configuration. Par exemple, les fichiers suivants

Un exemple de configuration est disponible ici.
À la base le fichier alfresco-global.properties.sample n'est pas utilisé, nous le renommons en retirant l'extension .sample pour qu'il soit utilisé.

alfresco:/opt/tomcat# mv shared/classes/alfresco-global.properties.sample shared/classes/alfresco-global.properties
# PostgreSQL
db.name=alfresco
db.username=alfresco
db.password=alfresc0
db.host=localhost
db.port=5432

# Sample custom content and index data location
dir.root=/opt/tomcat/alf_data

# PostgreSQL connection (requires postgresql-8.2-504.jdbc3.jar or equivalent)
db.driver=org.postgresql.Driver
db.url=jdbc:postgresql://${db.host}:${db.port}/${db.name}

# PostgreSQL dialect
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
hibernate.query.substitutions=true TRUE, false FALSE

#
# External locations
#-------------
ooo.exe=/usr/bin/soffice
jodconverter.officeHome=/usr/lib/openoffice
ooo.enabled=true
swf.exe=/usr/local/bin/pdf2swf
img.exe=/usr/bin/convert
img.dyn=/usr/lib
img.root=/usr

S'il y a une erreur Context initialization failed, c'est à cause des restes de la base de données Apache Derby (générée automatiquement au lancement si aucune base de données n'est configurée dans la ligne hibernate.dialectt du fichier fichier alfresco-global.properties). Pour afficher les logs et voir les erreurs, le fichier situé dans /opt/tomcat/logs/catalina.out.

Pour y remédier, il faut supprimer le dossier ./alf_data, dropper la base de données et la recréer :

alfresco:/opt/tomcat# su - posgres
postgres=# DROP DATABASE alfresco;
DROP DATABASE
postgres=# CREATE DATABASE alfresco;
CREATE DATABASE

Démarrage d'Alfresco

alfresco: /opt/tomcat# bin/startup.sh
Règle iptable pour acceder au serveur sur le port 80 (HTTP) et sur le port 8080
iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

Il est possible d'utiliser un script init.d pour le lancer automatiquement Alfresco au démarrage du serveur (/etc/init.d/alfresco) :

#! /bin/sh
# Start/Stop Script
case "$1" in
 start)
   iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
   /opt/tomcat/bin/startup.sh
   ;;
 stop)
   /opt/tomcat/bin/shutdown.sh
   ;;
 *)  
   echo "Usage: /etc/init.d/alfresco {start|stop}"
   exit 1
   ;;
esac  

exit 0

Lancer automatiquement Alfresco au démarrage du serveur

alfresco:/opt/tomcat# chmod +x /etc/init.d/alfresco
alfresco:/opt/tomcat# update-rd.d /etc/init.d/alfresco defaults

Les technologies utilisées dans la mise en oeuvre d'une architecture simple, puis répliquée

L'architecture simple

Le serveur est pour l'instant configuré en mono-serveur comme ci-dessous :

Architecture simple

Figure 2 : Architecture simple

Cette solution présente quelques inconvénients en termes de disponibilité. Il est possible que le serveur tombe en panne, il n'y a alors pas de secours. Alfresco possède une solution de haute disponibilité où l'on peut redonder chacun des composants dans le schéma ci-dessus.

On arrive donc à une solution plus disponible mais qui est plus chère et plus complexe à configurer.

L'architecture répliquée

Architecture répliquée

Figure 3 : Architecture répliquée

L'architecture répliquée est utilisée lorsque le nombre d'utilisateur augmente grandement et qu'on a besoin de monter en charge.

Voici les éléments clés dans une architecture répliquée :

Au final, nous obtenons le fichier alfresco.global.properties ci-dessous :

# Il faut absolument qu'il y ait un nom pour que le service de cluster demarre (a declarer pour chaque noeuds du cluster)
alfresco.cluster.name=noeud2

# Pour l'acces a la base de donnees a distance
db.host=noeud1

alfresco.jgroups.defaultProtocol=TCP
alfresco.tcp.initial_hosts=noeud1[7800],noeud2[7800]

# Dossier local qui stocke les index de recherche Lucene
dir.root=/opt/tomcat/alf_data

# Chemin du contenu des fichiers (/data est le chemin vers le partage NFS du serveur de fichiers)
dir.contentstore=/data/alfresco/alf_data/contentstore
dir.contentstore.deleted=/data/alfresco/alf_data/contentstore.deleted
dir.auditcontentstore=/data/alfresco/alf_data/audit.contentstore

Valid XHTML 1.1