Date de publication: le dimanche 10 juin 2007 Ă 01h51
Dernière modification: par Pascal BOYER le samedi 25 avril 2009 à 10h32
« Article précédent: eZ Publish : installer JW Desktop Player (lecteur flash video avec liste de lecture)
» Article suivant: eZ Publish : utiliser les brouillons
kézako un multi-site
Créer un multi-site c’est créer/héberger, à partir d’une même et seule version installée de eZ publish , plusieurs sites pouvant, ou non, ne rien avoir en commun les uns avec les autres.
avant-propos
Cet article condense les multiples informations que j’ai trouvées sur le net (beaucoup proviennent du site officiel de eZ publish , forums, documentation etc...) et de mon expérience personnelle.
Si vous souhaitez apporter votre pierre à l’édifice (remarques, précisions, corrections etc...) surtout ne vous gênez pas !
Les doc en français ne sont pas légions. Aussi, faites profiter les autres de vos connaissances.
deux sites
Dans la suite de l’article nous allons créer deux sites:
- site_1 qui sera considéré comme le site installé lors de l’installation de eZ publish
- site_2 qui sera le deuxième site.
une base de données pour chaque site
Chaque site doit disposer de sa propre base de données.
Le premier site, site_1 , la possède déjà puisqu’elle a été créée lors de l’installation de eZ publish .
Nous allons donc créer la base de données du deuxième site. Pour cela, commençons par nous connecter au serveur MySQL:
mysql -u root -p
Enter password: On tape le mot de passe de l’admin de MySQL mysql>
Puis on crée une base de données:
mysql> CREATE DATABASE bd_site_2;
Query OK, 1 row affected (0.02 sec)
On crée ensuite un utilisateur (toto) et son mot de passe (totopwd) et on lui affecte les privilèges d’administrateur (GRANT ALL) pour cette nouvelle base de données (bd_site_2.*):
On évite ainsi qu’un administrateur d’un site puisse effectuer une quelconque opération dans la base de données d’un site dont il n’a pas l’administration.
mysql> GRANT ALL ON bd_site_2.* TO toto@localhost IDENTIFIED BY ’totopwd’;
Query OK, 0 rows affected (0.00 sec)
Et on ferme la connexion:
mysql> QUIT;
Bye
Les scripts kernel_schema.sql et cleandata.sql
Maintenant que la nouvelle base de données est créée, il faut l’ initialiser à l’aide des deux scripts suivants:
- kernel/sql/mysql/ kernel_schema.sql
- kernel/sql/mysql/ cleandata.sql
~# cd kernel/sql/mysql/
Puis on se connecte au serveur MySQL avec l’utilisateur toto:
~# mysql -u toto -p
Enter password: On tape le mot de passe de toto mysql>
On sélectionne le base de données que l’on vient de créer:
mysql> USE bd_site_2;
Database changed
...et on lance d’abord ce script pour créer les 95 tables que contient toute base de données sous eZ publish :
mysql> SOURCE kernel_schema.sql;
.. .. Query OK, 0 rows affected (0.01 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) mysql>
On poursuit avec le deuxième script:
mysql> SOURCE cleandata.sql;
... ... Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0 Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0 Query OK, 1 row affected (0.00 sec) Query OK, 1 row affected (0.00 sec) Query OK, 1 row affected (0.00 sec) mysql>
Et on ferme la connexion:
mysql> QUIT;
Bye
Création des répertoires des siteaccess
On commence par créer le nouveau siteaccess du nouveau site site_2 .
cd ../../../settings/siteaccess/
...où l’on crée le siteaccess du site public:
cp -pR site_1/ site_2
...puis le siteaccess de la partie interface d’administration du site:
cp -pR site_1_admin/ site_2_admin
ls -la site_2/
total 64 drwxrwxrwx 2 www-data www-data 4096 2006-01-03 01:44 . drwxrwxr-x 8 www-data www-data 4096 2006-01-02 18:18 .. -rw-rw-rw- 1 www-data www-data 231 2006-01-02 02:47 content.ini.append.php -rw-rw-rw- 1 www-data www-data 250 2006-01-02 02:47 design.ini.append.php -rw-rw-rw- 1 www-data www-data 646 2006-01-02 02:47 fetchalias.ini.append.php -rw-rw-rw- 1 www-data www-data 79 2006-01-02 02:47 forum.ini.append.php -rw-rw-rw- 1 www-data www-data 1018 2006-01-02 02:47 image.ini.append.php -rw-rw-rw- 1 www-data www-data 652 2006-01-02 02:47 menu.ini.append.php -rw-rw-rw- 1 www-data www-data 11499 2006-01-02 02:47 override.ini.append.php -rw-rw-rw- 1 www-data www-data 735 2006-01-03 01:44 site.ini.append.php -rw-rw-rw- 1 www-data www-data 235 2006-01-02 02:47 toolbar.ini.append.php -rw-rw-rw- 1 www-data www-data 87 2006-01-02 02:47 viewcache.ini.append.php
ls -la site_2_admin/
total 32 drwxr-xr-x 2 root root 4096 2006-01-02 23:13 . drwxrwxr-x 8 www-data www-data 4096 2006-01-02 18:18 .. -rw-rw-rw- 1 www-data www-data 203 2006-01-02 02:47 content.ini.append.php -rw-rw-rw- 1 www-data www-data 90 2006-01-02 02:47 icon.ini.append.php -rw-rw-rw- 1 www-data www-data 3338 2006-01-02 02:47 override.ini.append.php -rw-rw-rw- 1 www-data www-data 1337 2006-01-02 22:07 site.ini.append.php -rw-rw-rw- 1 www-data www-data 1247 2006-01-02 02:47 toolbar.ini.append.php -rw-rw-rw- 1 www-data www-data 87 2006-01-02 02:47 viewcache.ini.append.php
Création des siteaccess
Editons à présent le fichier suivant:
vi site_2/site.ini.append.php
1 <?php /* #?ini charset="iso-8859-1"? 2 3 [DatabaseSettings] 4 DatabaseImplementation=ezmysql 5 Server=localhost 6 User=toto <============ MODIFIÉ !!! 7 Password=totopwd <============ MODIFIÉ !!! 8 Database=bd_site_2 <============ MODIFIÉ !!! 9 Charset= 10 Socket=disabled 11 12 [InformationCollectionSettings] 13 EmailReceiver= 14 15 [SiteSettings] 16 SiteName=Site 2 <============ MODIFIÉ !!! 17 SiteURL=www.linuxorable.net/monsite/index.php/site_2 <============ MODIFIÉ !!! 18 LoginPage=embedded 19 20 [UserSettings] 21 RegistrationEmail= 22 23 [SiteAccessSettings] 24 RequireUserLogin=false 25 ShowHiddenNodes=false 26 27 [DesignSettings] 28 SiteDesign=site_2 <============ MODIFIÉ !!! 29 AdditionalSiteDesignList[]=site_2_base <============ MODIFIÉ !!! 30 31 [RegionalSettings] 32 Locale=fre-FR 33 ContentObjectLocale=fre-FR 34 TextTranslation=enabled 35 36 [FileSettings] 37 VarDir=var/site_2 <============ MODIFIÉ !!! 38 39 [ContentSettings] 40 TranslationList=eng-GB;por-BR 41 42 [MailSettings] 43 AdminEmail=pascal@linuxorable.net 44 EmailSender= 45 */ ?>
cadre 1
Puis également celui-ci:
vi ../override/site.ini.append.php
...pour y ajouter ces lignes:
10 [SiteSettings] 11 DefaultAccess=site_1 12 SiteList[] 13 SiteList[]=site_1 16 17 [SiteAccessSettings] 18 CheckValidity=false 19 AvailableSiteAccessList[] 20 AvailableSiteAccessList[]=site_1 21 AvailableSiteAccessList[]=site_1_admin 22 AvailableSiteAccessList[]=site_2 <============ AJOUTÉE !!! 23 AvailableSiteAccessList[]=site_2_admin <============ AJOUTÉE !!!
cadre 2
Et on termine avec:
vi site_2_admin/site.ini.append.php
1 <?php /* #?ini charset="iso-8859-1"?
2
3 [DatabaseSettings]
4 DatabaseImplementation=ezmysql
5 Server=localhost
6 User=toto <=========== MODIFIÉ !!!
7 Password=totopwd <=========== MODIFIÉ !!!
8 Database=bd_site_2 <=========== MODIFIÉ !!!
9 Charset=
10 Socket=disabled
11
12 [InformationCollectionSettings]
13 EmailReceiver=
14
15 [SiteSettings]
16 SiteName=Site 2 admin <=========== MODIFIÉ !!!
17 SiteURL=www.linuxorable.net/monsite/index.php/site_2_admin <=========== MODIFIÉ !!!
18 LoginPage=custom
19
20 [UserSettings]
21 RegistrationEmail=
22
23 [SiteAccessSettings]
24 RequireUserLogin=true
25 ShowHiddenNodes=true
26
27 [DesignSettings]
28 SiteDesign=admin
29
30 [RegionalSettings]
31 Locale=fre-FR
32 ContentObjectLocale=fre-FR
33 TextTranslation=enabled
34
35 [FileSettings]
36 VarDir=var/site_2 <=========== MODIFIÉ !!!
37
38 [ContentSettings]
39 CachedViewPreferences[full]=admin_navigation_content=0;admin_navigation_details=0;admin_navigation_languages=0;admin_navigation_locations=0;
admin_navigation_relations=0;admin_navigation_roles=0;admin_navigation_policies=0;admin_navigation_content=0;admin_navigation_translations=0;
admin_children_viewmode=list;admin_list_limit=1;admin_edit_show_locations=0;admin_leftmenu_width=10;admin_url_list_limit=10;
admin_url_view_limit10;admin_section_list_limit=1;admin_orderlist_sortfield=user_name;admin_orderlist_sortorder=desc;admin_search_stats_limit=1;
admin_treemenu=1;admin_bookmarkmenu=1;admin_left_menu_width=13
40 TranslationList=eng-GB;por-BR
41
42 [MailSettings]
43 AdminEmail=pascal@linuxorable.net
44 EmailSender=
45 */ ?> cadre 3
Création du répertoire de design
Puisque nous créons un siteaccess il est intéressant que celui-ci ait aussi ses propres templates voires ses propres templates de surcharge.
Par défaut, le fichier settings/siteaccess/site_1/ site.ini.append.php mentionne ceci:
27 [DesignSettings] 28 SiteDesign=plain 29 AdditionalSiteDesignList[]=base
Si décidément, le système ne trouve pas son bonheur dans ce dernier répertoire, alors en dernier recours, c’est le répertoire design/standard/ qui sera parcouru.
Partant, on peut en déduire que l’on peut créer, pour site_2 , deux répertoires design ainsi:
On se place dans le répertoire design :
cd ../../design/
...pour y créer les deux designs suivants (voir les modifs du cadre 1):
cp -pR plain/ site_2
cp -pR base/ site_2_base
On peut contrôler la provenance des templates utilisés en paramétrant le mode debug (voir Le mode debug ).
Création des répertoires de cache
cd ../var
...où l’on crée les trois sous-répertoires suivants:
mkdir site_2
mkdir site_2/storage
mkdir site_2/cache
à savoir Le sous-répertoire site_2/ storage/ contiendra les fichiers multimédia (voir le paragraphe LES REPERTOIRES DE STOCKAGE de l’article Quelques notions de base pour plus d’information).
Et on n’oublie pas d’affecter les droits requis:
chown -R www-data:www-data site_2/
On tape dans Firefox l’URI suivante:
http://www.linuxorable.net/monsite/index.php/site_2
...et on obtient ce message d’erreur:
IMAGE
Fig. 1: Erreur / kernel (3) - Objet non disponible
Bof... pas terrible comme résultat pour tout ce travail !
Pas de panique.
Problème lié au choix de la langue
En lisant les forums on découvre que cette erreur est due à un problème de langue engendré par le script cleandata.sql .
En effet, ce script initialise l’anglais comme langue d’environnement. Or, si lors de l’installation de eZ publish une autre langue par défaut est choisie (voir figure 5 de l’article Installer eZ publish ) alors on est gratifié du joli message d’erreur présenté par la figure 1 ci-dessus.
Pour remédier à ce problème, toujours en lisant les forums et les docs, on apprend qu’il faut lancer deux commandes MySQL.
On se connecte au serveur MySQL:
mysql -u toto -p
Enter password: On tape le mot de passe de toto mysql>
Puis on sélectionne le base de données que l’on vient de créer:
mysql> USE bd_site_2;
Database changed
...et on lance cette commande absconse:
mysql> UPDATE ezcontentobject_name SET content_translation=’fre-FR’,real_translation=’fre-FR’ WHERE content_translation=’eng-GB’ OR real_translation=’eng-GB’;
Query OK, 19 rows affected (0.10 sec) Rows matched: 19 Changed: 19 Warnings: 0
...qui "initialise" le français dans la table ezcontentobject_name à la place de l’anglais.
Puis on lance cette deuxième commande:
mysql> UPDATE ezcontentobject_attribute SET language_code=’fre-FR’ WHERE language_code=’eng-GB’;
Query OK, 75 rows affected (0.11 sec) Rows matched: 75 Changed: 75 Warnings: 0
...et on se déconnecte du serveur MySQL:
mysql> QUIT;
Bye
Si on réactualise la page http://www.linuxorable.net/monsite/index.php/site_2 on obtient cette fois-ci:
IMAGE
Fig. 2: Affichage du site après application des deux commandes MySQL ci-dessus
important Pour se loguer en tant qu’admin sur la page http://www.linuxorable.net/monsite/index.php/ site_2_admin :
login: admin password: publish
Ce que l’on remarque en premier lieu sur les figures 1 et 2 c’est l’absence de menu. Et c’est normal.
Lors d’une installation graphique, un menu et du contenu de démonstration ou d’exemple sont crées et insérés dans la base de données. Ce qui n’est pas le cas ici. Il faut donc créer de toute pièce un menu et son contenu via l’interface d’administration.
Séparer les répertoires de fichiers et de cache
La documentation officielle de eZ publish 3.6 est très claire:
Dans le cas d’un multi-site basé sur le siteaccess il est préférable de séparer les répertoires de cache et de stockage des fichiers. Ceci rend l’administration des sites moins "bordélique" et donc plus aisée. Or par défaut, eZ publish stocke les caches et les fichiers de tous les sites dans un même répertoire. Ceci pose problème si l’on souhaite, par exemple, migrer, dans le futur, un site sur un autre serveur. (traduction par moi-même ;-) )
La solution proposée est alors d’ajouter aux fichiers settings/sitaccess/ site_2 /site.ini.append.php et settings/sitaccess/ site_2_admin /site.ini.append.php , par exemple, les deux lignes suivantes:
[FileSettings] StorageDir=site_2/storage CacheDir=site_2/cache
important La doc officielle de eZ publish 3.6 insiste sur le fait qu’il est important que les parties publique et d’administration d’un même site stockent leurs fichiers dans les mêmes répertoires.
Cependant, et quoi qu’en dise la documentation officielle, à la fin d’une installation de eZ publish on peut remarquer que la section [FileSettings] du fichier monsite/site.ini.append.php ne contient pas ces deux lignes mais celle-ci:
[FileSettings] VarDir=var/plain
Et pourtant, le répertoire var/plain/ contient les deux sous-répertoires cache et storage qui ne sont pas vides !
Il semble donc que l’on puisse opter pour l’une ou l’autre syntaxe, les deux ayant le même effet: placer les bons fichiers dans les bon répertoires.
Gestion du cache
IMAGE
Fig. 3: Le module Vider le cache dans l’interface d’administration
...n’affecte que le cache relatif au siteaccess utilisé.
Pour s’en convaincre, il suffit d’afficher dans son navigateur deux pages d’accueil de deux sites différents puis, à partir d’une interface d’administration, de vider tous les caches.
Ensuite, dans une console, on se place dans le répertoire var/ et on lance cette commande:
grep -R "SiteName" *
On remarque alors que parmi tous les fichiers cache retournés par la commande aucun ne correspond au site dont on vient de vider tous les caches. Et bien sûr, les fichiers cache des autres sites sont encore présents.
Commentaires













