Projet

Général

Profil

Competences techniques apache et drupal » Historique » Révision 9

Révision 8 (Julien Enselme, 29/05/2013 01:00) → Révision 9/40 (Julien Enselme, 29/05/2013 01:02)

{{toc}} 

 h1. Compétences techniques apache et drupal 

 h2. Différences majeures entre les distributions 

 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. 

 h3. Le nom du service apache 

 * Pour les distribution basées sur Debian (Ubuntu, Linux Mint,…) : le service s’appelle apache2 
 * Pour les distributions typées RedHat (Fedora, CentOS,…) : le service s’appelle httpd 

 h3. Interaction avec les services 

 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. 

 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. 

 h3. Activation des modules Apache 

 L’activation explicite des modules dépend de votre distributions. 

 h3. Emplacements des fichiers de configuration 

 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. 

 h2. Installer et configurer Apache, phpmyadmin 

 * # savoir installer un serveur apache et phpmyadmin (dépend de votre système) 
 * # augmenter sa mémoire dédiée 
 * # 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> 
 * # avoir drush d'installer (peut-être présent dans les dépôts de votre distributions) et savoir où il est installé : which drush 
 * # 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 

  * # <code class="php">memory_limit = 512M;</code> 
  * # <code class="php">post_max_size = 32M;</code> 
  * # <code class="php">upload_max_filesize = 32M;</code> 
  * # <code>service apache2 restart</code> 
 * # 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> 

 

 h2. Savoir ajouter/activer des modules pour le serveur apache (notamment le module pour les url-simplifiées) 

 * sudo a2enmod mod_rewrite 
 * sudo a2ensite NOM_DU_SITE 


 h2. Savoir installer drush et les bibliothèques php 

 * 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. 
 * savoir où est installé drush : drush config 
 * sudo apt-get install curl libcurl3 libcurl3-dev php5-curl 

 h2. Pouvoir utiliser un nom de domaine en local 

 Quand je vais sur assos.centrale-marseille.fr, c’est mon site local que je vois et non pas celui de centrale. 

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

 * Pour les distributions basées sur Debian 
 * Pour Mageia 3 
 * Pour Fedora 

 * Quand je vais sur localhost.d6, c’est le site local qu'on voit : tout simplement ajouter l’entrée suivante dans /etc/hosts 
 <pre>127.0.0.1    assos.centrale-marseille.fr</pre> 
 * 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. 

 h2. Pouvoir créer des vhost à la pelle 

 Exemple : créer le domaine titi.local 

 * Pour les distributions basées sur Debian 
 * Pour Mageia 3 
 * Pour Fedora 

 * Exemple : créer deux domaines assos.fun.local et titi.local 
 Exemple pour titi.local : 

 * dans /etc/apache2/sites-available/ créer un fichier titi. Le contenu de titi est : 

 <pre> 
 <VirtualHost *:80> 
        ServerAdmin webmaster@localhost 
        ServerName titi.local 
        ServerAlias titi.local 

        DocumentRoot /chemin/dossier_site 

        <Directory /chemin/dossier_site/> 
                Options Indexes FollowSymLinks MultiViews 
                AllowOverride All 
                Order allow,deny 
                allow from all 
        </Directory> 

        ErrorLog ${APACHE_LOG_DIR}/titi.error.log 

        # Possible values include: debug, info, notice, warn, error, crit, 
        # alert, emerg. 
        LogLevel warn 

        CustomLog ${APACHE_LOG_DIR}/titi.access.log combined 
 </VirtualHost> 
 </pre> 

 * créer le fichier test.html dans /chemin/dossier_site    et mettre dedans <pre><h1>TITI</h1></pre> 
 * ajouter un lien symbolique dans /etc/apache2/sites-enabled qui pointe sur le fichiet titi qui est dans /etc/apache2/sites-available/ 

  * <code>cd /etc/apache2/sites-enabled/</code> 
  * <code>ln -s ../sites-available/titi .</code> 
 * ajouter l’entrée titi.local dans le fichier /etc/hosts 
 <pre> 
 127.0.0.1          titi.local 
 </pre> 

 * Redémarrer apache : <code>sudo service apache2 restart</code> 
 * Consulter    titi.local/test.html 

 h2. Pouvoir reproduire en local un site en particulier 

 h3. Par Florent 

 * pouvoir télécharger en local juste le minimum de fichiers 
 * le minimum c’est tout le htmltest sauf le dossier sites 
 * dans sites/ il faut ne prendre que le dossier default et le dossier du site qui nous concerne. 
 * 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) 
 * rsync -lr --exclude nom_fichier_ou_dossier_a_exclure assos@sas1.centrale-marseille.fr:chemin_vers_dossier/* . 
 * sur sa machine se faire un dossier d6 et un dossier d7 

 * exemple dans d6 : 
 <pre> 
 cd d6 
 rsync -lr --exclude sites assos@sas1.centrale-marseille.fr:html/* . 
 mkdir sites 
 cd sites 
 rsync -lr assos@sas1.centrale-marseille.fr:html/sites/default . 
 rsync -lr assos@sas1.centrale-marseille.fr:html/sites/assos.centrale-marseille.fr.annales . (étape longue) 
 </pre> 

 h3. Par Jenselme 

 * pouvoir télécharger en local juste le minimum de fichiers. Le minimum c’est : 

  * tout le htmltest sauf le dossier sites 
  * dans sites/ il faut ne prendre que le dossier default et le dossier du site qui nous concerne. 
  * 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) 

   * sur sa machine : se faire un dossier d6 et un dossier d7 
   * <code>cd d6</code> 
   * _Exemple pour le site des annales, à apapter_ : <code>rsync -lr --exclude sites assos@sas1.centrale-marseille.fr:html/* .</code> 
   * <code>mkdir sites</code> 
   * <code>cd sites</code> 
   * <code>rsync -lr assos@sas1.centrale-marseille.fr:html/sites/default .</code> 
   * <code>rsync -lr assos@sas1.centrale-marseille.fr:html/sites/assos.centrale-marseille.fr.annales .</code> (étape longue) 

 h2. Pouvoir télécharger la base de donnée d’un seul site en particulier 

 * savoir faire ça avec phpmyadmin, dans phpmyadmin : 
 > * exporter 
 > * options personnalisées 
 > * choisir que les tables qui vous intéressent 
 > * laisser les autres options 
 > * enregistrer 
 > * ça enregistre dans votre dossier de téléchargements sur votre machine 

 * savoir le faire avec drush car parfois le fichier téléchargé par phpmyadmin est trop gros 

 > * sur le sas : 
 > > <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) 
 cd Desktop/dump_individuels</pre> 

 > * sur sa machine : 
 > > </pre>@scp assos@sas1.centrale-marseille.fr:Desktop/dump_individuels/annales....</pre> 

 h2. Monter un site en local 

 * monter un seul vhost pour assos.centrale-marseille.fr (il sera valable pour tous les sous sites, il ne sera jamais édité) 
 * télécharger les fichiers et la base de donnée du site en question 
 * injecter la dbb en local (utiliser le phpmyadmin en local ou sudo mysql -u root -pmotdepasse nomdelabase < fichier.sql) 
 * modifier le settings.php du site en question pour donner les informations de connection mysql et modifier $base_url 
 * pour aller plus vite, renommer le dossier du site en default 

 h2. Installer le script drush de mise à jour http://drupal.org/project/drush_sup 

 * suivre la procédure d’installation 
 * critère de validation : la commande suivante marche : drush sup 

 h2. Exécuter correctement le script de mise à jour 

 * lire la doc de drush sup 
 * exécuter drush sup avec les bons arguments 

 h2. Alias drush 


 TODO (dans la doc drush ?) 
 installer dom, xml (paquet php) 

 h1. Annexe : Nom de domaine 

 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@ 

 h1. Annexe : Vhosts 

 h2. Pour les distributions basées sous Debian 

 * Dans /etc/apache2/sites-available/ créer un fichier titi dont le contenu est : 
 <pre> 
 <VirtualHost *:80> 
     ServerAdmin webmaster@localhost 
     ServerName titi.local 
     ServerAlias titi.local 

     DocumentRoot /chemin/dossier_site 

     <Directory /chemin/dossier_site/> 
         Options Indexes FollowSymLinks MultiViews 
         AllowOverride All 
         Order allow,deny 
         allow from all 
     </Directory> 

     ErrorLog ${APACHE_LOG_DIR}/titi.error.log 

     # Possible values include: debug, info, notice, warn, error, crit, 
     # alert, emerg. 
     LogLevel warn 

     CustomLog ${APACHE_LOG_DIR}/titi.access.log combined 

 </VirtualHost> 
 </pre> 
 * créer le fichier test.html dans /chemin/dossier_site et mettre dedans @<h1>TITI</h1>@ 
 * ajouter un lien symbolique dans /etc/apache2/sites-enabled qui pointe sur le fichier titi qui est dans /etc/apache2/sites-available/ : 
 > * Manuellement : 
 > <pre> 
 cd /etc/apache2/sites-enabled/ 
 ln -s ../sites-available/titi . 
 </pre> 
 > * Avec la commande apache : 
 > <pre> 
 sudo service a2ensite titi 
 </pre> 
 * ajouter l’entrée titi.local dans le fichier /etc/hosts : 
 <pre> 
 @127.0.0.1          titi.local@ 
 </pre> 
 * restart apache 
 <pre> 
 sudo service apache2 restart 
 </pre> 
 * consulter    titi.local/test.html 

 h2. Pour Mageia 3 

 {{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)}} 

 * Dans /etc/httpd/conf/sites.d/ créer un fichier nom_du_fichier.conf dont le contenu est : 
 <pre> 
 # Drupal configuration 
 Alias /nom_du_site /chemin/dossier_site 

 <Directory /chemin/dossier_site/> 
    Require local granted 
    Options -Indexes +FollowSymlinks +Multiviews 
    AllowOverride None 

     # Protect files and directories from prying eyes. 
     <FilesMatch "\.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(\..*|Entries.*|Repository|Root|Tag|Template)$"> 
       Order allow,deny 
     </FilesMatch> 

     # Don't show directory listings for URLs which map to a directory. 
     Options -Indexes 

     # Follow symbolic links in this directory. 
     Options +FollowSymLinks 

     # Make Drupal handle any 404 errors. 
     ErrorDocument 404 /index.php 

     # Set the default handler. 
     DirectoryIndex index.php index.html index.htm 

     # Override PHP settings that cannot be changed at runtime. See 
     # sites/default/default.settings.php and drupal_environment_initialize() in 
     # includes/bootstrap.inc for settings that can be changed at runtime. 

     # PHP 5, Apache 1 and 2. 
     <IfModule mod_php5.c> 
         php_flag magic_quotes_gpc                   off 
         php_flag magic_quotes_sybase                off 
         php_flag register_globals                   off 
         php_flag session.auto_start                 off 
         php_value mbstring.http_input               pass 
         php_value mbstring.http_output              pass 
         php_flag mbstring.encoding_translation      off 
     </IfModule> 

     # Requires mod_expires to be enabled. 
     <IfModule mod_expires.c> 
         # Enable expirations. 
         ExpiresActive On 

         # Cache all files for 2 weeks after access (A). 
         ExpiresDefault A1209600 

         <FilesMatch \.php$> 
             # Do not allow PHP scripts to be cached unless they explicitly send 
             # cache headers themselves. Otherwise all scripts would have to  
             # overwrite the headers set by mod_expires if they want another  
             # caching behavior. This may fail if an error occurs early in the 
             # bootstrap process, and it may cause problems if a non-Drupal PHP 
             # file is installed in a subdirectory. 
             ExpiresActive Off 
         </FilesMatch> 
     </IfModule> 

     # Various rewrite rules. 
     <IfModule mod_rewrite.c> 
         RewriteEngine on 

         # Block access to "hidden" directories whose names begin with a period. 
         # This includes directories used by version control systems such as 
         # Subversion or Git to store control files. Files whose names begin with 
         # a period, as well as the control files used by CVS, are protected by  
         # the FilesMatch directive above. 
         # 
         # NOTE: This only works when mod_rewrite is loaded. Without mod_rewrite, 
         # it is not possible to block access to entire directories from  
         # .htaccess, because <DirectoryMatch> is not allowed here. 
         # 
         # If you do not have mod_rewrite installed, you should remove these 
         # directories from your webroot or otherwise protect them from being 
         # downloaded. 
         RewriteRule "(^|/)\." - [F] 

         # If your site can be accessed both with and without the 'www.' prefix, 
         # you can use one of the following settings to redirect users to your 
         # preferred URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY 
         # one option:  
         # To redirect all users to access the site WITH the 'www.' prefix, 
         # (http://example.com/... will be redirected to http://www.example.com/...) 
         # uncomment the following: 
         # RewriteCond %{HTTP_HOST} !^www\. [NC] 
         # RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
         # 
         # To redirect all users to access the site WITHOUT the 'www.' prefix, 
         # (http://www.example.com/... will be redirected to http://example.com/...) 
         # uncomment the following: 
         # RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
         # RewriteRule ^ http://%1%{REQUEST_URI} [L,R=301] 

         # Modify the RewriteBase if you are using Drupal in a subdirectory or in a 
         # VirtualDocumentRoot and the rewrite rules are not working properly. 
         # For example if your site is at http://example.com/drupal uncomment and 
         # modify the following line: 
         RewriteBase /nom_du_site 
         # 
         # If your site is running in a VirtualDocumentRoot at http://example.com/, 
         # uncomment the following line: 
         # RewriteBase / 

         # Pass all requests not referring directly to files in the filesystem to 
         # index.php. Clean URLs are handled in drupal_environment_initialize(). 
         RewriteCond %{REQUEST_FILENAME} !-f 
         RewriteCond %{REQUEST_FILENAME} !-d 
         RewriteCond %{REQUEST_URI} !=/favicon.ico 
         RewriteRule ^ index.php [L] 

         # Rules to correctly serve gzip compressed CSS and JS files. 
         # Requires both mod_rewrite and mod_headers to be enabled. 
         <IfModule mod_headers.c> 
         # Serve gzip compressed CSS files if they exist and the client accepts gzip. 
         RewriteCond %{HTTP:Accept-encoding} gzip 
         RewriteCond %{REQUEST_FILENAME}\.gz -s 
         RewriteRule ^(.*)\.css $1\.css\.gz [QSA] 

         # Serve gzip compressed JS files if they exist and the client accepts gzip. 
         RewriteCond %{HTTP:Accept-encoding} gzip 
         RewriteCond %{REQUEST_FILENAME}\.gz -s 
         RewriteRule ^(.*)\.js $1\.js\.gz [QSA] 

         # Serve correct content types, and prevent mod_deflate double gzip. 
         RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1] 
         RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1] 

         <FilesMatch "(\.js\.gz|\.css\.gz)$"> 
             # Serve correct encoding type. 
             Header set Content-Encoding gzip 
             # Force proxies to cache gzipped & non-gzipped css/js files  
             # separately. 
             Header append Vary Accept-Encoding 
         </FilesMatch> 
         </IfModule> 
     </IfModule> 

 </Directory> 
 </pre> 
 {{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.)}} 

 * créer un dossier (avec un Drupal dedans) appelé dossier_site dans /chemin/ 
 * restart apache 
 <pre> 
 sudo service httpd stop 
 sudo service httpd start 
 </pre> 

 * consulter    localhost/nom_du_site 


 h2. Pour Fedora