29-11-2011 : Remettre dans le débat politique les principes du Conseil National de la Résistance
29-01-2012 : Parce que nous sommes un peuple debout, agissons pour rester dignes et responsables !
Logo de mon site
Logo de mon site
Faire un don

Luxpopuli / eZ Publish / Trucs & astuces / eZ Publish : créer un multi-site I





Right menu

Logo du site ez.no  Logo XHTML 1.O du W3C  Logo XHTML 1.O du W3C  Site francophone officiel de Firefox

eZ Publish : créer un multi-site I

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.*):

:
Il est important que chaque site ait une base de données avec son propre utilisateur et son propre mot de passe.

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)

:
Si vous copiez/collez les commandes MySQL, faites attention aux simples guillemets qui risquent fort d’être convertis en points d’interrogation lors du coller !

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

On commence donc par se placer dans le répertoire kernel/sql/ mysql/

~# 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.

Pour cela, on se place dans le répertoire siteaccess

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

Voici ce qui se trouve maintenant dans le répertoire settings/siteaccess/ site_2/

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

...et dans le répertoire settings/siteaccess/ site_2_admin/

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

C’est à dire que les templates qui gèrent le design du site seront d’abord recherchés dans design/plain/templates/ puis, s’ils ne sont pas trouvés, dans design/plain/ override/templates/ puis, s’ils ne sont toujours pas là, dans design/base/templates/ et enfin dans design/base/ override/templates/

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

On se place à présent dans le répertoire var

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/

Voilà. Voyons voir à quoi ressemble la page d’accueil du 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

...qui fait la même chose que la première commande mais dans la table ezcontentobject_attribute

...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

Ceci ayant pour effet de dire à eZ publish de stocker les fichiers de cache dans var/site_2/cache et les autres fichiers dans var/site_2/storage

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

Avec un multi-site, la gestion du cache depuis l’interface d’administration et via le module Vider le 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

  • La vue demandée est inaccessible

    Bonjour,

    Merci pour ce tuto très utile et bien expliqué. Cependant, je rencontre un souci vers la fin de la procédure, quand je veux m'inscrire via la console d'admin j'ai le message suivant kernel :

    La page demandée n'a pu être affichée. (22)
    La vue demandée est inaccessible.
    La vue <register> dans le module <user> étant désactivée elle est donc inaccessible.

    Que dois-je faire pour l'activer et avoir accès à l'outil d'admin nouvellement créé ?

    Par avance merci.

    Mega
    ;)