Projet

Général

Profil

Competences techniques apache et drupal » Historique » Version 26

Julien Enselme, 02/06/2013 19:30

1 1 Florent Torregrosa
{{toc}}
2
3 7 Julien Enselme
h1. Compétences techniques apache et drupal
4 1 Florent Torregrosa
5 7 Julien Enselme
h2. Différences majeures entre les distributions
6 1 Florent Torregrosa
7 8 Julien Enselme
Bien que parfois très semblables, les distributions GNU/Linux diffèrent dans leur fonctionnement. Afin de bien comprendre la suite de ce document et d’éviter quelques incompréhensions, nous proposons une liste des différences majeures et des points principaux à adapter. La liste de distribution donnée dans chaque type n’est aucunement exhaustive, tout comme la liste des points de différences.
8
9
h3. Le nom du service apache
10
11
* Pour les distribution basées sur Debian (Ubuntu, Linux Mint,…) : le service s’appelle apache2
12
* Pour les distributions typées RedHat (Fedora, CentOS,…) : le service s’appelle httpd
13
14
h3. Interaction avec les services
15
16
Historiquement les distributions utilisaient le service init pour démarrer et la commande <code>service</code> pour interragir avec les services de la façon suivante : <code>service apache2 restart</code>. Cela est toujours le cas sur Debian.
17
18
De plus en plus de distributions (Fedora, Mageia, OpenSUSE,…) utilisent de nos jours systemd qui gèrent aussi les services via la commande <code>systemctl</code> de la façon suivante : <code>systemctl restart httpd</code>. La commande <code>service</code> est dans la plupart des cas toujours opérationnelle pour des raisons de compatibilités.
19
20
h3. Activation des modules Apache
21
22
L’activation explicite des modules dépend de votre distributions.
23
24
h3. Emplacements des fichiers de configuration
25
26
Suivant votre distribution l’emplacement des fichiers de configuration peut varier. Il y a une constante toute fois : ils sont souvent dans /etc/NOM_DU_SERVICE.
27 1 Florent Torregrosa
28 7 Julien Enselme
h2. Installer et configurer Apache, phpmyadmin
29
30 9 Julien Enselme
* savoir installer un serveur apache et phpmyadmin (dépend de votre système)
31
* augmenter sa mémoire dédiée
32
* avoir drush d'installer (peut-être présent dans les dépôts de votre distributions) et savoir où il est installé : which drush
33
* augmenter la taille maximale des fichiers pouvant être importés dans phpmyadmin (dans le(s) php.ini, la méthode suivante est basée sur les systèmes basés sur debian. À adapter pour votre système.). Il faut trouver et modifier les lignes suivantes dans /etc/php5/apache2/php.ini et /etc/php5/cli/php.ini
34 7 Julien Enselme
35 9 Julien Enselme
 * <code class="php">memory_limit = 512M;</code>
36
 * <code class="php">post_max_size = 32M;</code>
37
 * <code class="php">upload_max_filesize = 32M;</code>
38 12 Julien Enselme
 * redémarrer apache
39
* savoir recharger la configuration d’apache et le redémarrer : <code class="bash">service apache2 reload</code> et <code class="bash">service apache2 restart</code>
40 7 Julien Enselme
41 1 Florent Torregrosa
h2. Savoir ajouter/activer des modules pour le serveur apache (notamment le module pour les url-simplifiées)
42
43
* sudo a2enmod mod_rewrite
44 7 Julien Enselme
* sudo a2ensite NOM_DU_SITE
45 1 Florent Torregrosa
46 7 Julien Enselme
h2. Savoir installer drush et les bibliothèques php
47 1 Florent Torregrosa
48 20 Julien Enselme
* Si drush est fourni dans les dépôts de votre distribution, l’installer depuis ceux-ci. Si votre distribution fourni également drupal, il peut être intéressant de l’installer également pour avoir la liste des dépendances. L’installation de drupal via drush est la méthode recommandée.
49
* Savoir où est installé drush : @drush config@
50
* Dépendances supplémentaires utiles : @sudo apt-get install curl libcurl3 libcurl3-dev php5-curl@
51
52
Pour plus d’information sur Drush, consulter la [[Drush|page dédiée]].
53 1 Florent Torregrosa
54 3 Florent Torregrosa
h2. Pouvoir utiliser un nom de domaine en local
55 1 Florent Torregrosa
56 21 Julien Enselme
Quand je vais sur assos.centrale-marseille.fr, c’est mon site local que je veux voir et non pas celui de centrale. Il suffit de modifier le fichier hosts, situé dans /etc en ajoutant la ligne
57 7 Julien Enselme
<pre>127.0.0.1  assos.centrale-marseille.fr</pre>
58 11 Julien Enselme
59 21 Julien Enselme
Constater qu’en allant sur assos.centrale-marseille.fr on tombe sur la page par defaut de notre apache (la page sur laquelle on tombe dépend de la configuration d’apache). On peut vérifier avec le module Firefox _show ip_ qui donne l’IP du site sur lequel on est. Si l’IP affichée est 127.0.0.1, c’est bon.
60 7 Julien Enselme
61 22 Julien Enselme
h2. Pouvoir créer des vhost
62 1 Florent Torregrosa
63
Exemple : créer le domaine titi.local
64
65 22 Julien Enselme
h3. Pour les distributions basées sur Debian
66 7 Julien Enselme
67 22 Julien Enselme
* Dans /etc/apache2/sites-available/ créer un fichier titi. Le contenu de titi est :
68 7 Julien Enselme
69
<pre>
70
<VirtualHost *:80>
71
       ServerAdmin webmaster@localhost
72
       ServerName titi.local
73
       ServerAlias titi.local
74
75
       DocumentRoot /chemin/dossier_site
76
77
       <Directory /chemin/dossier_site/>
78
               Options Indexes FollowSymLinks MultiViews
79
               AllowOverride All
80
               Order allow,deny
81
               allow from all
82
       </Directory>
83
84
       ErrorLog ${APACHE_LOG_DIR}/titi.error.log
85
86 1 Florent Torregrosa
       # Possible values include: debug, info, notice, warn, error, crit,
87
       # alert, emerg.
88
       LogLevel warn
89
90 7 Julien Enselme
       CustomLog ${APACHE_LOG_DIR}/titi.access.log combined
91 1 Florent Torregrosa
</VirtualHost>
92
</pre>
93 7 Julien Enselme
94 22 Julien Enselme
* Créer le fichier test.html dans /chemin/dossier_site  et mettre dedans <pre><h1>TITI</h1></pre>
95
* Activer le site : @sudo a2ensite titi@
96
* *ou*
97
* Ajouter un lien symbolique dans /etc/apache2/sites-enabled qui pointe sur le fichiet titi qui est dans /etc/apache2/sites-available/ pour activer le site (méthode manulle)
98 1 Florent Torregrosa
99
 * <code>cd /etc/apache2/sites-enabled/</code>
100
 * <code>ln -s ../sites-available/titi .</code>
101 22 Julien Enselme
102
* Ajouter l’entrée titi.local dans le fichier /etc/hosts
103 1 Florent Torregrosa
<pre>
104
127.0.0.1        titi.local
105
</pre>
106
107
* Redémarrer apache : <code>sudo service apache2 restart</code>
108 22 Julien Enselme
* Consulter  titi.local/test.html
109
110
h3. Pour Mageia 3
111
112
TODO
113
114
h3. Pour Fedora et les distributions basées sur RHEL (CentOS, Scientific Linux…)
115
116
* Dans /etc/httpd/cond.d/ créer un fichier titi. Le contenu de titi est :
117
118
<pre>
119
<VirtualHost *:80>
120
       ServerAdmin webmaster@localhost
121
       ServerName titi.local
122
       ServerAlias titi.local
123
124
       DocumentRoot /chemin/dossier_site
125
126
       <Directory /chemin/dossier_site/>
127
               Options Indexes FollowSymLinks MultiViews
128
               AllowOverride All
129
               Order allow,deny
130
               allow from all
131
       </Directory>
132
133
       # Possible values include: debug, info, notice, warn, error, crit,
134
       # alert, emerg.
135
       LogLevel warn
136
137
</VirtualHost>
138
</pre>
139
140
* Créer le fichier test.html dans /chemin/dossier_site  et mettre dedans <pre><h1>TITI</h1></pre>
141
* Ajouter l’entrée titi.local dans le fichier /etc/hosts
142
<pre>
143
127.0.0.1        titi.local
144
</pre>
145
146
* Redémarrer apache :
147
148
 * Fedora >= 15 (basées sur systemd) : @systemctl restart httpd@
149
 * Fedora < 15, CentOS… <code>service httpd restart</code>
150 7 Julien Enselme
* Consulter  titi.local/test.html
151
152 1 Florent Torregrosa
h2. Pouvoir reproduire en local un site en particulier
153
154 23 Julien Enselme
Pouvoir télécharger en local juste le minimum de fichiers. Le minimum c’est :
155 1 Florent Torregrosa
156 23 Julien Enselme
* tout le htmltest sauf le dossier sites
157
* dans sites/ il faut ne prendre que le dossier default et le dossier du site qui nous concerne.
158
* pouvoir se démerder (script ou suite de ligne de commande ou …) pour pouvoir faire ça efficacement (une suite de commande scp ou rsync n’est pas une mauvaise idée). Jenselme avait commencé un script qui fonctionne presque pour la réplication des sites en local et possède des capacités de réplication sur le réseau. Idée donnée par dgeo à jenselme : utiliser drush avec entre autre @drush rsync@. À creuser.
159 1 Florent Torregrosa
160 23 Julien Enselme
 * sur sa machine : se faire un dossier d6 et un dossier d7
161
 * _Exemple pour le site des annales, à apapter_ :
162 14 Julien Enselme
<pre>
163
 <code>cd d6</code>
164
  <code>rsync -lr --exclude sites assos@sas1.centrale-marseille.fr:html/* .</code>
165
  <code>mkdir sites</code>
166
  <code>cd sites</code>
167
  <code>rsync -lr assos@sas1.centrale-marseille.fr:html/sites/default .</code>
168
  <code>rsync -lr assos@sas1.centrale-marseille.fr:html/sites/assos.centrale-marseille.fr.annales .</code> (étape longue)
169
</pre>
170 7 Julien Enselme
171 1 Florent Torregrosa
h2. Pouvoir télécharger la base de donnée d’un seul site en particulier
172 2 Florent Torregrosa
173 15 Julien Enselme
h3. Avec phpmyadmin
174 1 Florent Torregrosa
175 15 Julien Enselme
Dans phpmyadmin :
176
 * exporter
177
 * options personnalisées
178
 * choisir que les tables qui vous intéressent
179
 * laisser les autres options
180
 * enregistrer
181
 * ça enregistre dans votre dossier de téléchargements sur votre machine
182 1 Florent Torregrosa
183 15 Julien Enselme
h3. Avec drush
184 1 Florent Torregrosa
185 15 Julien Enselme
Indispensable car parfois le fichier téléchargé par phpmyadmin est trop gros et dépasse la limite autorisée.
186
187
# sur le sas, pour le site des annales par exemple :
188
<pre>
189
<code>dump_site annales</code>
190
<code>cd Desktop/dump_individuels</code>
191
</pre>
192
*ou si le site est dans une base de données séparée :*
193
<pre>
194
<code>cd DOSSIER DU SITE</code>
195
<code>drush sql-dump > fichier.sql</code>
196
</pre>
197
# sur sa machine :
198
<pre>scp assos@sas1.centrale-marseille.fr:Desktop/dump_individuels/annalesDATE .</pre>
199 1 Florent Torregrosa
200 24 Julien Enselme
Il existe peut-être une commande drush qui fait tout. À creuser.
201
202 1 Florent Torregrosa
h2. Monter un site en local
203
204 25 Julien Enselme
# Monter un seul vhost pour assos.centrale-marseille.fr (il sera valable pour tous les sous sites, il ne sera jamais édité)
205
# Télécharger les fichiers et la base de donnée du site en question
206
# Injecter la dbb en local (utiliser le phpmyadmin en local ou mysql -u root -pmotdepasse nomdelabase < fichier.sql)
207
# Modifier le settings.php du site en question pour donner les informations de connection mysql et modifier $base_url
208
# Pour aller plus vite, renommer le dossier du site en default
209
# Désactiver le mode maintenance @drush vset maintenance_mode 0@ et les urls simplifiées si besoin @drush vset clean_url 0@
210
# Activer éventuellement les rapports d’erreurs @drush vset error_level NB@
211
# Vider les caches
212 1 Florent Torregrosa
213 13 Julien Enselme
h2. Installer le script drush de mise à jour
214 1 Florent Torregrosa
215 13 Julien Enselme
* suivre la procédure d’installation donnée "ici":http://drupal.org/project/drush_sup
216 1 Florent Torregrosa
* critère de validation : la commande suivante marche : drush sup
217
218
h2. Exécuter correctement le script de mise à jour
219
220
* lire la doc de drush sup
221
* exécuter drush sup avec les bons arguments
222 7 Julien Enselme
223
h2. Alias drush
224
225
226
TODO (dans la doc drush ?)
227
installer dom, xml (paquet php)
228 1 Florent Torregrosa
229 3 Florent Torregrosa
h1. Annexe : Nom de domaine
230 1 Florent Torregrosa
231 26 Julien Enselme
Il est tout à fait possible de faire pointer n’importe quel nom de domaine sur sa machine locale. Normalement, toutes les unix reposent sur le même principe. Il suffit d’ajouter l’entrée suivante dans /etc/hosts (par exemple pour assos) : @127.0.0.1  assos.centrale-marseille.fr@.
232
233
{{tip(Ne pas oublier de relancer apache.)}}
234 1 Florent Torregrosa
235 3 Florent Torregrosa
h1. Annexe : Vhosts
236 1 Florent Torregrosa
237
h2. Pour les distributions basées sous Debian
238
239 3 Florent Torregrosa
* Dans /etc/apache2/sites-available/ créer un fichier titi dont le contenu est :
240
<pre>
241
<VirtualHost *:80>
242
    ServerAdmin webmaster@localhost
243
    ServerName titi.local
244
    ServerAlias titi.local
245 2 Florent Torregrosa
246 3 Florent Torregrosa
    DocumentRoot /chemin/dossier_site
247 1 Florent Torregrosa
248 3 Florent Torregrosa
    <Directory /chemin/dossier_site/>
249
        Options Indexes FollowSymLinks MultiViews
250
        AllowOverride All
251
        Order allow,deny
252
        allow from all
253
    </Directory>
254
255
    ErrorLog ${APACHE_LOG_DIR}/titi.error.log
256
257
    # Possible values include: debug, info, notice, warn, error, crit,
258
    # alert, emerg.
259
    LogLevel warn
260
261
    CustomLog ${APACHE_LOG_DIR}/titi.access.log combined
262
263
</VirtualHost>
264
</pre>
265
* créer le fichier test.html dans /chemin/dossier_site et mettre dedans @<h1>TITI</h1>@
266
* ajouter un lien symbolique dans /etc/apache2/sites-enabled qui pointe sur le fichier titi qui est dans /etc/apache2/sites-available/ :
267 17 Julien Enselme
 * Manuellement :
268
<pre>
269 3 Florent Torregrosa
cd /etc/apache2/sites-enabled/
270
ln -s ../sites-available/titi .
271
</pre>
272 17 Julien Enselme
* Avec la commande apache :
273
<code>sudo a2ensite titi</pre>
274
275 3 Florent Torregrosa
* ajouter l’entrée titi.local dans le fichier /etc/hosts :
276 1 Florent Torregrosa
<pre>
277
@127.0.0.1        titi.local@
278 3 Florent Torregrosa
</pre>
279 4 Florent Torregrosa
* restart apache
280 3 Florent Torregrosa
<pre>
281 4 Florent Torregrosa
sudo service apache2 restart
282 1 Florent Torregrosa
</pre>
283
* consulter  titi.local/test.html
284
285
h2. Pour Mageia 3
286 4 Florent Torregrosa
287
{{warning(la partie pour mageia permet pour l'instant d'atteindre le site via localhost/nom_du_site, pas encore bien connecté avec le fichier Hosts)}}
288
289
* Dans /etc/httpd/conf/sites.d/ créer un fichier nom_du_fichier.conf dont le contenu est :
290
<pre>
291
# Drupal configuration
292
Alias /nom_du_site /chemin/dossier_site
293
294
<Directory /chemin/dossier_site/>
295
   Require local granted
296
   Options -Indexes +FollowSymlinks +Multiviews
297
   AllowOverride None
298
299
    # Protect files and directories from prying eyes.
300
    <FilesMatch "\.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(\..*|Entries.*|Repository|Root|Tag|Template)$">
301
      Order allow,deny
302
    </FilesMatch>
303
304
    # Don't show directory listings for URLs which map to a directory.
305
    Options -Indexes
306
307
    # Follow symbolic links in this directory.
308
    Options +FollowSymLinks
309
310
    # Make Drupal handle any 404 errors.
311
    ErrorDocument 404 /index.php
312
313
    # Set the default handler.
314
    DirectoryIndex index.php index.html index.htm
315
316
    # Override PHP settings that cannot be changed at runtime. See
317
    # sites/default/default.settings.php and drupal_environment_initialize() in
318
    # includes/bootstrap.inc for settings that can be changed at runtime.
319
320
    # PHP 5, Apache 1 and 2.
321
    <IfModule mod_php5.c>
322
        php_flag magic_quotes_gpc                 off
323
        php_flag magic_quotes_sybase              off
324
        php_flag register_globals                 off
325
        php_flag session.auto_start               off
326
        php_value mbstring.http_input             pass
327
        php_value mbstring.http_output            pass
328
        php_flag mbstring.encoding_translation    off
329
    </IfModule>
330
331
    # Requires mod_expires to be enabled.
332
    <IfModule mod_expires.c>
333
        # Enable expirations.
334
        ExpiresActive On
335
336
        # Cache all files for 2 weeks after access (A).
337
        ExpiresDefault A1209600
338
339
        <FilesMatch \.php$>
340
            # Do not allow PHP scripts to be cached unless they explicitly send
341
            # cache headers themselves. Otherwise all scripts would have to 
342
            # overwrite the headers set by mod_expires if they want another 
343
            # caching behavior. This may fail if an error occurs early in the
344
            # bootstrap process, and it may cause problems if a non-Drupal PHP
345
            # file is installed in a subdirectory.
346
            ExpiresActive Off
347
        </FilesMatch>
348
    </IfModule>
349
350
    # Various rewrite rules.
351
    <IfModule mod_rewrite.c>
352
        RewriteEngine on
353
354
        # Block access to "hidden" directories whose names begin with a period.
355
        # This includes directories used by version control systems such as
356
        # Subversion or Git to store control files. Files whose names begin with
357
        # a period, as well as the control files used by CVS, are protected by 
358
        # the FilesMatch directive above.
359
        #
360
        # NOTE: This only works when mod_rewrite is loaded. Without mod_rewrite,
361
        # it is not possible to block access to entire directories from 
362
        # .htaccess, because <DirectoryMatch> is not allowed here.
363
        #
364
        # If you do not have mod_rewrite installed, you should remove these
365
        # directories from your webroot or otherwise protect them from being
366
        # downloaded.
367
        RewriteRule "(^|/)\." - [F]
368
369
        # If your site can be accessed both with and without the 'www.' prefix,
370
        # you can use one of the following settings to redirect users to your
371
        # preferred URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY
372
        # one option: 
373
        # To redirect all users to access the site WITH the 'www.' prefix,
374
        # (http://example.com/... will be redirected to http://www.example.com/...)
375
        # uncomment the following:
376
        # RewriteCond %{HTTP_HOST} !^www\. [NC]
377
        # RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
378
        #
379
        # To redirect all users to access the site WITHOUT the 'www.' prefix,
380
        # (http://www.example.com/... will be redirected to http://example.com/...)
381
        # uncomment the following:
382
        # RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
383
        # RewriteRule ^ http://%1%{REQUEST_URI} [L,R=301]
384
385
        # Modify the RewriteBase if you are using Drupal in a subdirectory or in a
386
        # VirtualDocumentRoot and the rewrite rules are not working properly.
387
        # For example if your site is at http://example.com/drupal uncomment and
388
        # modify the following line:
389
        RewriteBase /nom_du_site
390
        #
391
        # If your site is running in a VirtualDocumentRoot at http://example.com/,
392
        # uncomment the following line:
393
        # RewriteBase /
394
395
        # Pass all requests not referring directly to files in the filesystem to
396
        # index.php. Clean URLs are handled in drupal_environment_initialize().
397
        RewriteCond %{REQUEST_FILENAME} !-f
398
        RewriteCond %{REQUEST_FILENAME} !-d
399
        RewriteCond %{REQUEST_URI} !=/favicon.ico
400
        RewriteRule ^ index.php [L]
401
402
        # Rules to correctly serve gzip compressed CSS and JS files.
403
        # Requires both mod_rewrite and mod_headers to be enabled.
404
        <IfModule mod_headers.c>
405
        # Serve gzip compressed CSS files if they exist and the client accepts gzip.
406
        RewriteCond %{HTTP:Accept-encoding} gzip
407
        RewriteCond %{REQUEST_FILENAME}\.gz -s
408
        RewriteRule ^(.*)\.css $1\.css\.gz [QSA]
409
410
        # Serve gzip compressed JS files if they exist and the client accepts gzip.
411
        RewriteCond %{HTTP:Accept-encoding} gzip
412
        RewriteCond %{REQUEST_FILENAME}\.gz -s
413
        RewriteRule ^(.*)\.js $1\.js\.gz [QSA]
414
415
        # Serve correct content types, and prevent mod_deflate double gzip.
416
        RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1]
417
        RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1]
418
419
        <FilesMatch "(\.js\.gz|\.css\.gz)$">
420
            # Serve correct encoding type.
421
            Header set Content-Encoding gzip
422
            # Force proxies to cache gzipped & non-gzipped css/js files 
423
            # separately.
424
            Header append Vary Accept-Encoding
425
        </FilesMatch>
426
        </IfModule>
427
    </IfModule>
428
429
</Directory>
430
</pre>
431
{{tip(Pour ce fichier de configuration, se baser sur celui fournit par Mageia lors de l'installation d'un Drupal depuis la logithèque de Mageia.)}}
432
433
* créer un dossier (avec un Drupal dedans) appelé dossier_site dans /chemin/
434
* restart apache
435
<pre>
436
sudo service httpd stop
437
sudo service httpd start
438
</pre>
439
440
* consulter  localhost/nom_du_site
441
442 2 Florent Torregrosa
443
h2. Pour Fedora