Permalink
Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
226 lines (155 sloc) 12.5 KB

#Les Polypodes

Prérequis pour l’hébergement d’applications web basées sur LAMP

Résumé : Ce document liste les pré-requis de l'Agence Les Polypodes pour réaliser un déploiement d'application Symfony2 sur un serveur web. Ce document reprend la documentation officielle de Symfony2 concernant les prérequis techniques, et détaille une configuration optimale pour l'industrialisation du déploiement. Ces éléments sont non exhaustifs : la configuration définitive est laissée à l’appréciation de l’Hébergeur qui maintient ce serveur et du Client qui reste le donneur d'ordre final.

1. Contexte

Pour l’hébergement de sites web ou d’applications web basées sur le stack LAMP, l'agence Les Polypodes propose un document non exhaustif de prérequis techniques, à l’intention de l’Hébergeur retenu par le Client.

Ce document se veut une base de dialogue cordial, un outil de référence pour une coopération réussie entre l'Agence et l'Hébergeur, dans l'esprit du mouvement devops.

2. But

Le but de ce document est de donner les éléments minimaux pour l'hébergement d'applications PHP basées sur Symfony 2.x, Silex 1.x ou toute application PHP métier basée sur PHP 5.x, dernière version stable.

3. Rôles et vocabulaire

  • L'Agence Les Polypodes est l’agence qui conçoit l’application web, et qui le cas échéant la déploie et/ou en assure la maintenance ;
  • l’Hébergeur/Infogéreur est responsable de l’hébergement et/ou de l’infogérance : il assure la sécurité, de la mise à jour et de la surveillance des logiciels serveurs : la pile LAMP (OS GNU/Linux, PHP, Apache2, MySQL), et tous les autres logiciels nécessaires installés sur le serveur. Sauf indications contraires, il n'assure pas l'infogérance de l'application web ;
  • le Client final est l'entité qui réalise la commande et la recette de l’application et de son hébergement.

4. Prérequis généraux liés à l'OS :

  • OS Linux, dernière version stable (LTS optionnel, pas formellement demandée). Préférence de l'équipe pour GNU/Linux Debian ou Ubuntu LTS dans leurs dernières versions stables ;
  • Dual Core minimum + 4 Giga RAM minimum ;
  • architecture 64 bits ;
  • un accès SSH avec un compte utilisateur Unix/Linux (cf. plus loin) ;
  • une stack LAMP tel que décrite ci-dessous.

5. Prérequis généraux liés aux rôles et droits Unix/Linux :

Dans le cadre de l'utilisation des accès SSH au serveur web, le compte utilisateur Linux utilisé par l'Agence Les Polypodes n'a pas besoin d'être sudoer, à partir du moment où un sysadmin est responsable de la maintenance et du monitoring de ce serveur.

L'Agence demande :

  • un accès linux avec un compte polypodes ;
  • des droits suffisants pour éditer une crontab ;
  • des droits suffisants pour écrire dans un répertoire dédié au projet ;
  • des droits suffisants pour lire le log Apache2 du site web (accès et erreurs) ;
  • un répertoire home permettant de stocker la configuration de dotfiles (.bashrc, .bash_history, etc…) ;
  • l'accès à un shell fonctionnel : bash, ou idéalement zsh ;
  • il est utile que cet utilisateur appartienne au usergroup utilisé par Apache2 (:www-data).

Le répertoire d'hébergement du site web à déployer (par exemple /var/www/NomDuProjet/[RacineDuSiteWeb]) devra être accessible en écriture pour l'utilisateur linux polypodes. Suggestion: chown www-data:www-data + chmod 775, l'utilisateur linux polypodes étant déjà membre du groupe :www-data.

L'accès SSH permet notamment le bon déploiement, via GIT ou rsync, des mises à jours et évolutions du site, et est rendu obligatoire par l'utilisation en ligne de commande d'outils de build (make, grunt, gulp, drush, etc.).

6. Préparation des déploiements successifs (releases majeures, correctifs, etc.)

Le process de mise en (pré-)production de l'Agence se base sur une structure en releases, avec un DocRoot d'Apache2 pointant vers la dernière release courante, via un mécanisme de liens symbolique :

➜  myServer  tree
.
├── [me  2237]  Makefile
├── [me    55]  current -> releases/2014-07-04     <- Apache2 vhost DocRoot
├── [me    55]  old -> releases/2014-07-01         <- rollback-able recent release
├── [me    55]  preprod -> releases/preprod        <- pre-production folder
├── [me   170]  releases                           <- all releases
└── [me   170]  uploads                            <- shared, cross-releases folder
➜  myServer
  • current est le DocumentRoot du virtualhost dans Apache2 ;
  • old est une release précédente, sur lequel on peut faire un rollback ;
  • preprod est la release de préproduction, servant au test des évolutions futures et à la préparation des contenus à passer en production, sur laquelle pointe un sous-domaine dédié (preprod.mondomaine.tld) ;
  • releases est le répertoire contenant toutes les releases ;
  • uploads est un répertoire partagé entre toutes les releases, contenant les fichiers et médias envoyés par le webmaster sur le serveur (images, sons, vidéos, PDFs, etc.). Un lien symbolique rend disponible ce répertoire dans le dossier de chaque release.

Ce mécanisme de mise en (pre-)production basé sur des releases est courant (cf. Capistrano ou Chef par exemple) - il est présenté en détail ici :

➜  myServer  tree releases
.
└── [me            170]  releases
    ├── [me            340]  2014-07-01--11-10-50                <-- "old"
    ├── [me            340]  2014-06-21--13-21-27
    ├── [me            340]  2014-05-13--18-34-42
    ├── [me            340]  2014-05-02--14-25-51
    └── [me            340]  2014-07-04--16-23-10                <-- "current"
        ├── [me            68]  src
        └── [me           136]  web
            └── [me          1289]  index.php
            └── [me            16]  uploads -> ../../../uploads  <-- a symlink
            
➜  myServer

Du point de vue de l'hébegement, ce mécanisme nécessite simplement que le DocRoot du vhost d'Apache2 soit connu de l'Agence, et que la directive Options FollowSymLinks y soit présente.

7. Apache2

Les livrables attendus par l'Agence comportent un vhost par environnement (preproduction et production), avec si possible la directive AllowOverride All. Apache2 doit être capable de gérér les liens symboliques et permettre l'utilisation des fichiers .htaccess.

Mods d'Apache à activer :

rewrite
headers
deflate
expires
setenvif

8. PHP

PHP 5, dernière version stable, versions cgi (Apache2) et cli

Extensions de PHP à installer :

php5-dev php5-mysql php5-cli
php5-curl php5-gd php5-imagick
php5-imap php5-xsl php5-common
php5-mcrypt php5-memcache
php5-ps php5-intl php5-mcrypt

De plus, le mode PHP d'Apache2 devrait être installé prioritairement via le paquet libapache2-mod-php5 de manière à ce qu'il contienne les extensions incorporées dans ce package, requises :

bcmath, bz2, calendar, Core, ctype,
date, dba, dom, ereg, exif, fileinfo,
filter, ftp, gettext, hash, iconv, json,
libxml, mbstring, mhash, openssl, pcre,
Phar, posix, Reflection, session, shmop,
SimpleXML, soap, sockets, SPL, standard,
sysvmsg, sysvsem, sysvshm, tokenizer,
wddx, xml, xmlreader, xmlwriter, zip, zlib

Configuration complémentaire de PHP : (pour apache2 et pour cli)

#/etc/php5/apache2/php.ini et /etc/php5/cli/php.ini
(...)
date.timezone=Europe/Paris
(…)
[Phar]
phar.readonly = Off
phar.require_hash = Off
detect_unicode = Off

La configuration de PHP doit se conformer aux pré-requis du framework Symfony 2.x (dernière version stable) : http://symfony.com/doc/current/reference/requirements.html, y compris tous les pré-requis optionnels.

“Some systems don't support chmod +a, but do support another utility calledsetfacl. You may need to enable ACL support on your partition and install setfacl before using it (as is the case with Ubuntu)”

Attention à bien achever la configuration des modules de PHP pour un environnement de production.

Caches d'OpCode et accélérateurs pour PHP

Jusqu'à PHP 5.4.x inclus, l'Agence recommande d'ajouter un accélérateur permettant de gérer le cache d'OpCode pour PHP, en particulier APC.

À partir de PHP 5.5.x, PHP intègre son propre moteur de cache d'Opcode, Zend Opcache. Dès lors, il n'est pas requis d'installer un autre accélérateur.

Mémoire allouée à PHP

A titre d'information uniquement, les préconisations de mémoire limite allouable (directive memory_limit de php.ini) sont de 256M pour Symfony2 (quand il est déployé sur MS Azure).

Sécurité et mise à jour des logiciels côté serveur

A titre d'information, pour évaluer la présence de vulnérabilités critiques éventuelles dans la version de PHP installée, l'Agence utilise versionscan et iniscan.

9. MySQL

L'Hébergeur est responsable de la sauvegarde des bases de données et de la bonne configuration des ressources allouées à MySQL.

  • Création d'une base de préproduction et d'une base de production
  • Mise en place d'un utilisateur MySQL auquel on permettra les actions suivantes :
SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, 
INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES

10. Logiciels utiles au bon déploiement

Dans le cadre d'un accès SSH, logiciels à installer :

Logiciels obligatoires pour l'accès SSH

git vim curl nodejs npm

L'installation de NodeJs et NPM en dernières versions stables est très simple à réaliser en utilisant un PPA. NodeJs n'est pas utilisé ici en tant que serveur web mais en tant qu'utilitaire CLI uniquement.

Logiciels optionnels (utiles pour le bon déploiement)

imagemagick rsync tig tree manpages-fr manpages-fr-extra manpages-dev 

Applications à installer :

  • phpmyadmin : L'Hébergeur est responsable de la bonne protection de l'accès à PhpMyAdmin (choix du mode de protection de l’accès à PhpMyAdmin laissé au jugement de l’Hébergeur)

11. Livrables

Livrables obligatoires attendues par l'Agence :

  • accès SSH, URL de Phpmyadmin, et leurs différents identifiants d'accès ;
  • URL de préproduction ;
  • URL de production.

Livrable optionnels :

Configuration Puppet de l'environnement de production, qui sera utilisée par l'équipe de développement avec vagrant.

12. Limites, conseil et assistance

En-dehors des points indiqués comme optionnels, tous ces points sont importants et peuvent devenir bloquants pour le succès du déploiement de l’application web. Sur ces points, l'Agence Les Polypodes demande à être prévenue dès qu'une incompréhension ou un doute survient du côté du Client ou de l'Hébergeur qui doit livrer l’hébergement et éventuellement assurer l’infogérance de l’application, et se tient prête à expliquer le détail et la raison de chaque pré-requis.

Il revient au Client Final de créer les conditions et les occasions de dialogues entre l’hébergeur et l'Agence pour la bonne conduite et le succès du projet.

L'Agence Les Polypodes se tient prête à planifier des jours supplémentaires de conseils et d'assistance à maîtrise d'ouvrage pour aider le Client Final dans la conduite de ce projet, sur la base d'une prestation de régie dont le montant est à définir ensemble.