Projet

Général

Profil

Competences techniques apache et drupal » Historique » Version 17

Julien Enselme, 29/05/2013 14:40

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