Projet

Général

Profil

Competences techniques apache et drupal » Historique » Version 9

Julien Enselme, 29/05/2013 01:02
# -> *

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
* savoir ajouter/activer des modules pour le serveur apache (notamment le module mod rewrite pour les url-simplifiées) : <code>sudo a2enmod nom_du_module</code>
33
* avoir drush d'installer (peut-être présent dans les dépôts de votre distributions) et savoir où il est installé : which drush
34
* 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
35 7 Julien Enselme
36 9 Julien Enselme
 * <code class="php">memory_limit = 512M;</code>
37
 * <code class="php">post_max_size = 32M;</code>
38
 * <code class="php">upload_max_filesize = 32M;</code>
39
 * <code>service apache2 restart</code>
40
* savoir recharger la configuration d’apache et le redémarer <code class="bash">service apache2 reload</code> et <code class="bash">service apache2 restart</code>
41 7 Julien Enselme
42 1 Florent Torregrosa
h2. Savoir ajouter/activer des modules pour le serveur apache (notamment le module pour les url-simplifiées)
43
44
* sudo a2enmod mod_rewrite
45 7 Julien Enselme
* sudo a2ensite NOM_DU_SITE
46 1 Florent Torregrosa
47
48 7 Julien Enselme
h2. Savoir installer drush et les bibliothèques php
49
50
* 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.
51 1 Florent Torregrosa
* savoir où est installé drush : drush config
52 7 Julien Enselme
* sudo apt-get install curl libcurl3 libcurl3-dev php5-curl
53 1 Florent Torregrosa
54 3 Florent Torregrosa
h2. Pouvoir utiliser un nom de domaine en local
55 1 Florent Torregrosa
56
Quand je vais sur assos.centrale-marseille.fr, c’est mon site local que je vois et non pas celui de centrale.
57
58
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 si oui ou non elle a un vhost qui la concerne).
59
60 3 Florent Torregrosa
* Pour les distributions basées sur Debian
61
* Pour Mageia 3
62
* Pour Fedora
63
64 7 Julien Enselme
* Quand je vais sur localhost.d6, c’est le site local qu'on voit : tout simplement ajouter l’entrée suivante dans /etc/hosts
65
<pre>127.0.0.1  assos.centrale-marseille.fr</pre>
66
* 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 si oui ou non elle a un vhost qui la concerne). On peut vérifier avec le module Firefox _show ip_ qui donne l’IP du site sur lequel on ait.
67
68 1 Florent Torregrosa
h2. Pouvoir créer des vhost à la pelle
69
70
Exemple : créer le domaine titi.local
71
72
* Pour les distributions basées sur Debian
73
* Pour Mageia 3
74
* Pour Fedora
75
76 7 Julien Enselme
* Exemple : créer deux domaines assos.fun.local et titi.local
77
Exemple pour titi.local :
78
79
* dans /etc/apache2/sites-available/ créer un fichier titi. Le contenu de titi est :
80
81
<pre>
82
<VirtualHost *:80>
83
       ServerAdmin webmaster@localhost
84
       ServerName titi.local
85
       ServerAlias titi.local
86
87
       DocumentRoot /chemin/dossier_site
88
89
       <Directory /chemin/dossier_site/>
90
               Options Indexes FollowSymLinks MultiViews
91
               AllowOverride All
92
               Order allow,deny
93
               allow from all
94
       </Directory>
95
96
       ErrorLog ${APACHE_LOG_DIR}/titi.error.log
97
98
       # Possible values include: debug, info, notice, warn, error, crit,
99
       # alert, emerg.
100
       LogLevel warn
101
102
       CustomLog ${APACHE_LOG_DIR}/titi.access.log combined
103
</VirtualHost>
104
</pre>
105
106
* créer le fichier test.html dans /chemin/dossier_site  et mettre dedans <pre><h1>TITI</h1></pre>
107
* ajouter un lien symbolique dans /etc/apache2/sites-enabled qui pointe sur le fichiet titi qui est dans /etc/apache2/sites-available/
108
109
 * <code>cd /etc/apache2/sites-enabled/</code>
110
 * <code>ln -s ../sites-available/titi .</code>
111
* ajouter l’entrée titi.local dans le fichier /etc/hosts
112
<pre>
113
127.0.0.1        titi.local
114
</pre>
115
116
* Redémarrer apache : <code>sudo service apache2 restart</code>
117
* Consulter  titi.local/test.html
118
119 1 Florent Torregrosa
h2. Pouvoir reproduire en local un site en particulier
120
121 7 Julien Enselme
h3. Par Florent
122
123 1 Florent Torregrosa
* pouvoir télécharger en local juste le minimum de fichiers
124
* le minimum c’est tout le htmltest sauf le dossier sites
125
* dans sites/ il faut ne prendre que le dossier default et le dossier du site qui nous concerne.
126
* pouvoir se démerder (script ou suite de ligne de commande ou …) pour pouvoir faire ça efficacement (une suite de commande scp n’est pas une mauvaise idée)
127
* rsync -lr --exclude nom_fichier_ou_dossier_a_exclure assos@sas1.centrale-marseille.fr:chemin_vers_dossier/* .
128
* sur sa machine se faire un dossier d6 et un dossier d7
129
130
* exemple dans d6 :
131
<pre>
132
cd d6
133
rsync -lr --exclude sites assos@sas1.centrale-marseille.fr:html/* .
134
mkdir sites
135
cd sites
136
rsync -lr assos@sas1.centrale-marseille.fr:html/sites/default .
137
rsync -lr assos@sas1.centrale-marseille.fr:html/sites/assos.centrale-marseille.fr.annales . (étape longue)
138
</pre>
139
140 7 Julien Enselme
h3. Par Jenselme
141
142
* pouvoir télécharger en local juste le minimum de fichiers. Le minimum c’est :
143
144
 * tout le htmltest sauf le dossier sites
145
 * dans sites/ il faut ne prendre que le dossier default et le dossier du site qui nous concerne.
146
 * 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)
147
148
  * sur sa machine : se faire un dossier d6 et un dossier d7
149
  * <code>cd d6</code>
150
  * _Exemple pour le site des annales, à apapter_ : <code>rsync -lr --exclude sites assos@sas1.centrale-marseille.fr:html/* .</code>
151
  * <code>mkdir sites</code>
152
  * <code>cd sites</code>
153
  * <code>rsync -lr assos@sas1.centrale-marseille.fr:html/sites/default .</code>
154
  * <code>rsync -lr assos@sas1.centrale-marseille.fr:html/sites/assos.centrale-marseille.fr.annales .</code> (étape longue)
155
156 1 Florent Torregrosa
h2. Pouvoir télécharger la base de donnée d’un seul site en particulier
157 2 Florent Torregrosa
158 1 Florent Torregrosa
* savoir faire ça avec phpmyadmin, dans phpmyadmin :
159
> * exporter
160
> * options personnalisées
161
> * choisir que les tables qui vous intéressent
162
> * laisser les autres options
163
> * enregistrer
164
> * ça enregistre dans votre dossier de téléchargements sur votre machine
165 2 Florent Torregrosa
166 1 Florent Torregrosa
* savoir le faire avec drush car parfois le fichier téléchargé par phpmyadmin est trop gros
167
168
> * sur le sas :
169 7 Julien Enselme
> > <pre>dump_site annales (pour une base de données isolée, se placer dans le dossier du site puis drush sql-dump > nom_du_fichier.sql)
170 1 Florent Torregrosa
cd Desktop/dump_individuels</pre>
171 4 Florent Torregrosa
172 1 Florent Torregrosa
> * sur sa machine :
173
> > </pre>@scp assos@sas1.centrale-marseille.fr:Desktop/dump_individuels/annales....</pre>
174
175
h2. Monter un site en local
176
177
* monter un seul vhost pour assos.centrale-marseille.fr (il sera valable pour tous les sous sites, il ne sera jamais édité)
178
* télécharger les fichiers et la base de donnée du site en question
179
* injecter la dbb en local (utiliser le phpmyadmin en local ou sudo mysql -u root -pmotdepasse nomdelabase < fichier.sql)
180 7 Julien Enselme
* modifier le settings.php du site en question pour donner les informations de connection mysql et modifier $base_url
181
* pour aller plus vite, renommer le dossier du site en default
182 1 Florent Torregrosa
183
h2. Installer le script drush de mise à jour http://drupal.org/project/drush_sup
184
185
* suivre la procédure d’installation
186
* critère de validation : la commande suivante marche : drush sup
187
188
h2. Exécuter correctement le script de mise à jour
189
190
* lire la doc de drush sup
191
* exécuter drush sup avec les bons arguments
192 7 Julien Enselme
193
h2. Alias drush
194
195
196
TODO (dans la doc drush ?)
197
installer dom, xml (paquet php)
198 1 Florent Torregrosa
199 3 Florent Torregrosa
h1. Annexe : Nom de domaine
200 1 Florent Torregrosa
201 5 Julien Enselme
Normalement, toutes les unix reposent sur le même principe. Ajouter l’entrée suivante dans /etc/hosts : @127.0.0.1  assos.centrale-marseille.fr@
202 1 Florent Torregrosa
203 3 Florent Torregrosa
h1. Annexe : Vhosts
204 1 Florent Torregrosa
205
h2. Pour les distributions basées sous Debian
206
207 3 Florent Torregrosa
* Dans /etc/apache2/sites-available/ créer un fichier titi dont le contenu est :
208
<pre>
209
<VirtualHost *:80>
210
    ServerAdmin webmaster@localhost
211
    ServerName titi.local
212
    ServerAlias titi.local
213 2 Florent Torregrosa
214 3 Florent Torregrosa
    DocumentRoot /chemin/dossier_site
215 1 Florent Torregrosa
216 3 Florent Torregrosa
    <Directory /chemin/dossier_site/>
217
        Options Indexes FollowSymLinks MultiViews
218
        AllowOverride All
219
        Order allow,deny
220
        allow from all
221
    </Directory>
222
223
    ErrorLog ${APACHE_LOG_DIR}/titi.error.log
224
225
    # Possible values include: debug, info, notice, warn, error, crit,
226
    # alert, emerg.
227
    LogLevel warn
228
229
    CustomLog ${APACHE_LOG_DIR}/titi.access.log combined
230
231
</VirtualHost>
232
</pre>
233
* créer le fichier test.html dans /chemin/dossier_site et mettre dedans @<h1>TITI</h1>@
234
* ajouter un lien symbolique dans /etc/apache2/sites-enabled qui pointe sur le fichier titi qui est dans /etc/apache2/sites-available/ :
235
> * Manuellement :
236 4 Florent Torregrosa
> <pre>
237 3 Florent Torregrosa
cd /etc/apache2/sites-enabled/
238
ln -s ../sites-available/titi .
239
</pre>
240
> * Avec la commande apache :
241 4 Florent Torregrosa
> <pre>
242 3 Florent Torregrosa
sudo service a2ensite titi
243
</pre>
244
* ajouter l’entrée titi.local dans le fichier /etc/hosts :
245 1 Florent Torregrosa
<pre>
246
@127.0.0.1        titi.local@
247 3 Florent Torregrosa
</pre>
248 4 Florent Torregrosa
* restart apache
249 3 Florent Torregrosa
<pre>
250 4 Florent Torregrosa
sudo service apache2 restart
251 1 Florent Torregrosa
</pre>
252
* consulter  titi.local/test.html
253
254
h2. Pour Mageia 3
255 4 Florent Torregrosa
256
{{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)}}
257
258
* Dans /etc/httpd/conf/sites.d/ créer un fichier nom_du_fichier.conf dont le contenu est :
259
<pre>
260
# Drupal configuration
261
Alias /nom_du_site /chemin/dossier_site
262
263
<Directory /chemin/dossier_site/>
264
   Require local granted
265
   Options -Indexes +FollowSymlinks +Multiviews
266
   AllowOverride None
267
268
    # Protect files and directories from prying eyes.
269
    <FilesMatch "\.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(\..*|Entries.*|Repository|Root|Tag|Template)$">
270
      Order allow,deny
271
    </FilesMatch>
272
273
    # Don't show directory listings for URLs which map to a directory.
274
    Options -Indexes
275
276
    # Follow symbolic links in this directory.
277
    Options +FollowSymLinks
278
279
    # Make Drupal handle any 404 errors.
280
    ErrorDocument 404 /index.php
281
282
    # Set the default handler.
283
    DirectoryIndex index.php index.html index.htm
284
285
    # Override PHP settings that cannot be changed at runtime. See
286
    # sites/default/default.settings.php and drupal_environment_initialize() in
287
    # includes/bootstrap.inc for settings that can be changed at runtime.
288
289
    # PHP 5, Apache 1 and 2.
290
    <IfModule mod_php5.c>
291
        php_flag magic_quotes_gpc                 off
292
        php_flag magic_quotes_sybase              off
293
        php_flag register_globals                 off
294
        php_flag session.auto_start               off
295
        php_value mbstring.http_input             pass
296
        php_value mbstring.http_output            pass
297
        php_flag mbstring.encoding_translation    off
298
    </IfModule>
299
300
    # Requires mod_expires to be enabled.
301
    <IfModule mod_expires.c>
302
        # Enable expirations.
303
        ExpiresActive On
304
305
        # Cache all files for 2 weeks after access (A).
306
        ExpiresDefault A1209600
307
308
        <FilesMatch \.php$>
309
            # Do not allow PHP scripts to be cached unless they explicitly send
310
            # cache headers themselves. Otherwise all scripts would have to 
311
            # overwrite the headers set by mod_expires if they want another 
312
            # caching behavior. This may fail if an error occurs early in the
313
            # bootstrap process, and it may cause problems if a non-Drupal PHP
314
            # file is installed in a subdirectory.
315
            ExpiresActive Off
316
        </FilesMatch>
317
    </IfModule>
318
319
    # Various rewrite rules.
320
    <IfModule mod_rewrite.c>
321
        RewriteEngine on
322
323
        # Block access to "hidden" directories whose names begin with a period.
324
        # This includes directories used by version control systems such as
325
        # Subversion or Git to store control files. Files whose names begin with
326
        # a period, as well as the control files used by CVS, are protected by 
327
        # the FilesMatch directive above.
328
        #
329
        # NOTE: This only works when mod_rewrite is loaded. Without mod_rewrite,
330
        # it is not possible to block access to entire directories from 
331
        # .htaccess, because <DirectoryMatch> is not allowed here.
332
        #
333
        # If you do not have mod_rewrite installed, you should remove these
334
        # directories from your webroot or otherwise protect them from being
335
        # downloaded.
336
        RewriteRule "(^|/)\." - [F]
337
338
        # If your site can be accessed both with and without the 'www.' prefix,
339
        # you can use one of the following settings to redirect users to your
340
        # preferred URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY
341
        # one option: 
342
        # To redirect all users to access the site WITH the 'www.' prefix,
343
        # (http://example.com/... will be redirected to http://www.example.com/...)
344
        # uncomment the following:
345
        # RewriteCond %{HTTP_HOST} !^www\. [NC]
346
        # RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
347
        #
348
        # To redirect all users to access the site WITHOUT the 'www.' prefix,
349
        # (http://www.example.com/... will be redirected to http://example.com/...)
350
        # uncomment the following:
351
        # RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
352
        # RewriteRule ^ http://%1%{REQUEST_URI} [L,R=301]
353
354
        # Modify the RewriteBase if you are using Drupal in a subdirectory or in a
355
        # VirtualDocumentRoot and the rewrite rules are not working properly.
356
        # For example if your site is at http://example.com/drupal uncomment and
357
        # modify the following line:
358
        RewriteBase /nom_du_site
359
        #
360
        # If your site is running in a VirtualDocumentRoot at http://example.com/,
361
        # uncomment the following line:
362
        # RewriteBase /
363
364
        # Pass all requests not referring directly to files in the filesystem to
365
        # index.php. Clean URLs are handled in drupal_environment_initialize().
366
        RewriteCond %{REQUEST_FILENAME} !-f
367
        RewriteCond %{REQUEST_FILENAME} !-d
368
        RewriteCond %{REQUEST_URI} !=/favicon.ico
369
        RewriteRule ^ index.php [L]
370
371
        # Rules to correctly serve gzip compressed CSS and JS files.
372
        # Requires both mod_rewrite and mod_headers to be enabled.
373
        <IfModule mod_headers.c>
374
        # Serve gzip compressed CSS files if they exist and the client accepts gzip.
375
        RewriteCond %{HTTP:Accept-encoding} gzip
376
        RewriteCond %{REQUEST_FILENAME}\.gz -s
377
        RewriteRule ^(.*)\.css $1\.css\.gz [QSA]
378
379
        # Serve gzip compressed JS files if they exist and the client accepts gzip.
380
        RewriteCond %{HTTP:Accept-encoding} gzip
381
        RewriteCond %{REQUEST_FILENAME}\.gz -s
382
        RewriteRule ^(.*)\.js $1\.js\.gz [QSA]
383
384
        # Serve correct content types, and prevent mod_deflate double gzip.
385
        RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1]
386
        RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1]
387
388
        <FilesMatch "(\.js\.gz|\.css\.gz)$">
389
            # Serve correct encoding type.
390
            Header set Content-Encoding gzip
391
            # Force proxies to cache gzipped & non-gzipped css/js files 
392
            # separately.
393
            Header append Vary Accept-Encoding
394
        </FilesMatch>
395
        </IfModule>
396
    </IfModule>
397
398
</Directory>
399
</pre>
400
{{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.)}}
401
402
* créer un dossier (avec un Drupal dedans) appelé dossier_site dans /chemin/
403
* restart apache
404
<pre>
405
sudo service httpd stop
406
sudo service httpd start
407
</pre>
408
409
* consulter  localhost/nom_du_site
410
411 2 Florent Torregrosa
412
h2. Pour Fedora