...
# Mes montages
[DISQUE]/srv /srv none bind 0 0
[DISQUE]/srv/www /var/www none bind 0 0
Activez ce montage :sudo addgroup --system www-data
sudo adduser www-data www-data
sudo usermod -a -G www-data $USER
sudo chown -R www-data:www-data /srv/www
sudo chmod -R 2770 /srv/www
sudo mount /var/www
==== Installation de PHP5 ====
[[tutoriel:mini-tutoriels:comment_installer_un_paquet|installez les paquets]] **[[apt>php5-cgi,php5-curl,php5-gd,php5-idn,php-pear,php5-imagick,php5-imap,php5-mcrypt,php5-memcache,php5-ming,php5-ps,php5-pspell,php5-recode,php5-snmp,php5-tidy,php5-xmlrpc,php5-xsl,php5-dev]]**, ou en ligne de commande :
* sudo aptitude install -y php5-cgi php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-tidy php5-xmlrpc php5-xsl php5-dev
apt-cache search php5
Installez ceux qui vous intéressent.
;cgi.fix_pathinfo=1
|cgi.fix_pathinfo=1
|
|mettez à **On**|zlib.output_compression = Off
|zlib.output_compression = On
|
Pour activer PHP via fastcgi, exécutez la commande suivante :
* sudo lighty-enable-mod fastcgi fastcgi-php
=== Redémarrez Lighty ===
Lancez :
* sudo service lighttpd restart
=== Test ===
Pour vérifier l'installation de PHP5, [[tutoriel:mini-tutoriels:ficedit#Modifier un fichier sans les droits d'administration|créez]] le fichier de test **/var/www/test.php** avec le contenu suivant :
Installation de Lighttpd et de PHP
Resultats du test
Lighttpd
Lighttpd fonctionne.
Dossier courant
Dossier courant :
PHP
qui teste le fonctionnement de lighty et php et affiche le répertoire en cours.
Pour la lancer : [[http://localhost/test.php]] ou [[http://192.168.0.31/test.php]]
==== Installation de SQLite, du module webdav et de PECL ====
Pour mettre en place SQLite et webdav, [[tutoriel:mini-tutoriels:comment_installer_un_paquet|installez les paquets]] **[[apt>php5-sqlite,sqlite3,libsqlite3-dev,lighttpd-mod-webdav,apache2-utils,libpcre3-dev,build-essential]]** ou en ligne de commande :
* sudo aptitude install -y php5-sqlite sqlite3 libsqlite3-dev lighttpd-mod-webdav apache2-utils libpcre3-dev build-essential
==== Activation de quelques modules ====
sudo lighty-enable-mod auth accesslog expire evhost no-www webdav
sudo service lighttpd restart
sudo pecl install apc
sudo pecl uninstall apc
extension=apc.so
apc.enabled=1
apc.shm_size=30
[[#Redémarrez Lighty|Redémarrez Lighty]]
==== Vérification ====
* Sur un PC en local : Ouvrir dans un navigateur l'adresse [[http://localhost]]
* ou [[http://server.exemple.com]] sur internet
* ou, sur un PC du réseau, ouvrir l'adresse (ex. d'un Raspberry Pi) [[http://framboise.local]] (exemple de nom réseau du Raspberry Pi en utilisant avahi).
La page d’accueil par défaut de lighttpd s'affiche :
{{logiciel:internet:serveur:lighttpd-01.jpg?800|}}
En lançant [[http://localhost/test.php]] ou [[http://framboise.local/test.php]], notre page de test s'affiche, qui teste le fonctionnement de lighty et php et affiche le répertoire en cours.
===== Configuration =====
# Quelques définitions de variables pour se faciliter la vie.
var.basedir = server.document-root
var.confdir = "/etc/lighttpd"
var.logroot = "/var/log/lighttpd"
var.dokudir = "doc"
etag.use-inode = "enable"
etag.use-mtime = "enable"
etag.use-size = "enable"
static-file.etags = "enable"
# Pour éviter les erreurs 417
server.reject-expect-100-with-417 = "disable"
# sécurisation
# interdiction d'accès aux fichiers .htaccess
$HTTP["url"] =~ "/(\.|_)ht" { url.access-deny = ( "" ) }
# Sécurisation de dokuwiki
# domaine doc.* :
$HTTP["host"] =~ "(^" + dokudir + "\.)" {
$HTTP["url"] =~ "^/(bin|data|inc|conf)/" {
url.access-deny = ( "" )
}
}
# domaine */doc :
$HTTP["url"] =~ "^/" + dokudir + "/(data|conf|bin|inc)/+.*" {
url.access-deny = ("")
}
# Format du log :
accesslog.format = "%h %V %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
# module expire : date limite 7 jours
$HTTP["url"] =~ "\.(jpg|gif|png|css|js|svg)$" {
expire.url = ( "" => "access 7 days" )
}
# module compress
compress.filetype += ("text/xml","application/x-javascript", , "application/javascript", "text/javascript", "text/x-js", "text/css", "text/html", "text/plain", "image/png", "image/gif", "image/jpg", "image/svg+xml", "application/xml")
# module awstats
alias.url += ( "/icon/" => "/var/www/awstats/wwwroot/icon/" )
alias.url += ( "/stat" => "/var/www/awstats/wwwroot/cgi-bin/" )
$HTTP["url"] =~ "^/stat($|/)" {
# Pour que http://.../stat/ renvoie sur http://.../stats/awstats.pl
index-file.names = ("awstats.pl")
# perl et cgi
cgi.assign = (
".pl" => "/usr/bin/perl",
".cgi" => "/usr/bin/perl"
)
}
# module WebDAV
alias.url += ( "/webdav" => "/var/www" )
server.modules += ("mod_alias")
accesslog.format = "%h %V %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
soit :
- %h -> adresse du visiteur
- %V -> adresse du serveur demandé
- %u -> utilisateur
- %t -> horodatage
- \"%r\" -> "requête"
- %>s -> code de retour
- %b -> nombre d'octets envoyés
- \"%{Referer}i\" -> "adresse d'origine"
- \"%{User-Agent}i\ -> type de navigateur (champ "User-Agent" du header)
" "
__Exemple de résultat__ :
192.168.0.1 doc.framboise - [14/Sep/2014:15:32:21 +0200] "GET / HTTP/1.1" 200 1558 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:32.0) Gecko/20100101 Firefox/32.0"
^%h|192.168.0.1|adresse du visiteur|
^%V|doc.framboise|adresse du serveur demandé|
^%u|-|utilisateur (ici un tiret : anonyme)|
^%t|[14/Sep/2014:15:32:21 +0200]|horodatage|
^\"%r\"|"GET / HTTP/1.1"|requête :\\ - méthode GET,\\ - ressource demandée : /,\\ - protocole : HTTP/1.1|
^%>s|200|code retour\\ - code commençant par 2 : succès\\ - code commençant par 3 : redirection\\ - code commençant par 4 : erreur|
^%b|1558|octets envoyés|
^\"%{Referer}i\"|"-"|adresse d'origine|
^\"%{User-Agent}i\"|"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:32.0) Gecko/20100101 Firefox/32.0"|type de navigateur|
On peut ajouter :
^{X-Forwarded-For}i|Champ **X-Forwarded-For** du HTTP-header field (%i)|
"%h %l %u %t \"%r\" %>s %b"
donnant :
"127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326"
avec le sens suivant :
^ élément ^ valeur ^ signification ^
^%h|127.0.0.1|adresse IP de l'hôte distant qui a fait la demande au serveur.\\ Ce n'est pas forcément l'adresse IP de l'utilisateur, ce peut être celle d'un proxy.|
^%l|-|Un tiret dans la sortie indique que l'information n'est pas disponible.|
^%u|frank|ID utilisateur (au moment de l'authentification HTTP) de la personne qui demande le document.|
^%t |[10/Oct/2000:13:55:36 -0700]|Horodatage de réception de la demande.\\ Format : [jj/mm/aaaa:h:m:s zone]|
^\"%r\"|"GET /apache_pb.gif HTTP/1.0"|ligne de demande du client :\\ - méthode : GET\\ - ressource demandée : /apache_pb.gif\\ - protocole : HTTP/1.0|
^%>s|200|code d'état que le serveur envoie au client :\\ - code commençant par 2 : succès\\ - code commençant par 3 : redirection\\ - code commençant par 4 : erreur|
^%b|2326|taille de l'objet renvoyé au client, sans compter les en-têtes de réponse. Un tiret si rien n'a été retourné|
$HTTP["host"] == "wiki.mondomaine.fr" {
server.document-root = "/var/wiki/wikirolle"
accesslog.filename = "/var/log/lighttpd/wiki.mondomaine.fr.log"
}
Relancez lighttpd :
* # /etc/init.d/lighttpd force-reload
Maintenant, configurez les dns pour les machines sur le réseau local.
[[tutoriel:mini-tutoriels:ficedit#Modifier un fichier avec les droits d'administration|ouvrez avec les droits d'administration]] le fichier **/etc/hosts** sur les machines concernées et ajoutez la ligne suivante (en remplaçant 192.168.1.101 par l'ip de votre serveur web sur le réseau local) :
192.168.1.101 wiki.mondomaine.fr
Si vous avez plusieurs domaines pour la même machine il est possible de tous les mettre sur la même ligne :
192.168.1.101 www.mondomaine.fr mondomaine.fr wiki.mondomaine.fr
Pour vérifier que tout fonctionne, ouvrez l'url suivante dans un navigateur :
[[http://wiki.mondomaine.fr]]
Pour ouvrir le sous-domaine au monde, éditez le fichier de zones correspondant au domaine chez le fournisseur de nom de domaine :
Le fichier doit ressembler à ceci :
mon_serveur 10800 IN A 87.89.21.88
Ajoutez la ligne suivante à la fin du fichier :
wiki 10800 IN CNAME mon_serveur.mondomaine.fr
.
==== Hôtes virtuels (vhost) ====
=== Hôtes virtuels simples ===
Soit à héberger le domaine **domaine.tld**.
Créez l'arborescence pour les fichiers de ce domaine, par exemple **/var/www/domaine.tld** :
* mkdir -p /var/www/domaine.tld
[[tutoriel:mini-tutoriels:ficedit#Modifier un fichier avec les droits d'administration|Créez avec les droits d'administration]] un fichier **/etc/lighttpd/conf-available/90-vhost-domaine.tld.conf** contenant le code suivant :
$HTTP["host"] =~ "^(www\.)?domaine\.tld$" {
server.document-root = "/var/www/domaine.tld/"
}
-> Les URLs de type [[http://domaine.tld]] et [[http://www.domaine.tld]] sont dirigées vers le répertoire **/var/www/domaine.tld**
Activez le domaine en lançant :
* sudo lighty-enable-mod vhost-domaine.tld
sudo service lighttpd force-reload
Pour accéder à ce domaine via l'adresse locale du serveur (127.0.0.1 ou localhost) :
De manière semblable, [[tutoriel:mini-tutoriels:ficedit#Modifier un fichier avec les droits d'administration|créez avec les droits d'administration]] un fichier **/etc/lighttpd/conf-available/90-vhost-domaine.tld** contenant le code suivant :
$HTTP["host"] =~ "^xxx\.yyy\.zzz\.ttt$" {
server.document-root = "/var/www/domaine.tld/"
}
$HTTP["host"] =~ "^domaine.tld$" {
server.document-root = "/var/www/domaine.tld/"
}
Activez ce domaine par :
* sudo lighty-enable-mod vhost-localhost\
&& sudo service lighttpd force-reload
=== Sous-domaines automatisés ===
Soit à héberger le domaine **domaine.tld** et tous ses sous-domaines ***.domaine.tld** = **doc.domaine.tld**, **toto.domaine.tld**, etc.
Chacun renverra au sous-répertoire correspondant (doc, toto, etc.) de la racine du serveur -> Les URLs de type [[http://xxx.domaine.tld]] sont dirigées vers le répertoire **/var/www/domaine.tld/xxx**
evhost.path-pattern = "/home/www/servers/%3/pages/"
; evhost.path-pattern
: modèle avec des jokers pour construire une documentroot
#define a pattern for the host url finding
# ex : http://xxx.yyy.zzz.framboise.tld
# %% => % sign ()
# %0 => nom de domaine + tld => framboise.home
# %1 => tld => home
# %2 => nom de domaine sans tld => framboise
# %3 => nom de sous-domaine de niveau 1 => zzz
# %4 => nom de sous-domaine de niveau 2 => yyy
# %5 => nom de sous-domaine de niveau 3 => xxx
# etc. (numérotation de droite à gauche)
# Configuration pour le domaine framboise.local (défini avec avahi sur le réseau local)
$HTTP["host"] =~ "(^|\.)framboise\.local$" {
include "include/config.conf"
evhost.path-pattern = document-root + "/%3"
}
# Configuration pour le domaine domaine.tld :
$HTTP["host"] =~ "(^|\.)domaine\.tld$" {
include "include/config.conf"
evhost.path-pattern = document-root + "/%3"
}
# Configuration pour le domaine localhost :
$HTTP["host"] =~ "(^|\.)localhost$" {
include "include/config.conf"
evhost.path-pattern = document-root + "/%2"
}
Il suffit de créer un nouveau sous-répertoire **xxx** de la racine du serveur pour que les domaines **xxx.mondomaine.com**, **xxx.framboise.local** et **xxx.localhost** existent et fonctionnent immédiatement.
Exemple pour que le domaine **www.domaine.tld** soit équivalent au domaine **domaine.tld**
$HTTP["host"] =~ "^(www\.)?domaine\.tld$" {
server.document-root = document-root + "/domaine.tld"
}
Activer le domaine en lançant :
* sudo lighty-enable-mod vhost-domaine.tld
sudo service lighttpd force-reload
==== Simplifier les fichiers de configuration avec des includes ====
Traduction de [[http://blog.lighttpd.net/articles/2005/11/25/simplify-your-configfiles-with-includes/]]
Ou, autrement dit : "hébergement virtuel facile".
Si la configuration de vos vhosts est complexe, comme avoir différentes options (static only, support php, rails applications pré-installées, ...) mais une configuration similaire pour chacun, vous ne pouvez pas utiliser les modules vhost et tout écrire à la main. Mais les includes et les variables peuvent aider.
L'idée est de modulariser le fichier de configuration et de n'y mettre que les parties de la configuration dont le vhost a besoin.
Mais d'abord, définissons notre configuration :
- Tous les vhosts sont sous /var/www/servers/pages/
- certains vhosts ont des dossiers protégés
- certains ont le support de PHP, certains utilisent des applications pré-installées
La méthode classique est :
$HTTP[“host”] == “www.example.org” {
server.document-root = “/var/www/servers/www.example.org/pages/”
auth.backend = “htpasswd”
auth.backend.htpasswd.userfile = “/var/www/servers/www.example.org/htpasswd”
auth.require = ...
}
Nous spécifions deux fois le chemin complet. Améliorons d'abord cela :
$HTTP["host"] == "www.example.org" {
var.basedir = "/var/www/servers/www.example.org/"
server.document-root = basedir + "pages/"
auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = basedir + "/htpasswd"
auth.require = ...
}
Mais ce n'est seulement qu'un hôte, ajoutons-en un autre, qui sert des fichiers statiques :
$HTTP["host"] == "www.example.com" {
var.basedir = "/var/www/servers/www.example.com/"
server.document-root = basedir + "pages/"
}
Tous les deux ont le même répertoire racine, **/var/www/servers/**. Sortons-le :
var.basedir = "/var/www/servers/"
$HTTP["host"] == "www.example.org" {
var.servername = "www.example.org"
server.document-root = basedir + servername + "/pages/"
auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = basedir + servername + "/htpasswd"
auth.require = ...
}
$HTTP["host"] == "www.example.com" {
var.servername = "www.example.com"
server.document-root = basedir + servername + "/pages/"
}
Le réglage **server.document-root** est maintenant exactement le même pour les deux serveurs.Sortons-le de nouveau, cette fois dans un fichoer include nommé **incl-docroot.conf** :
## set the docroot based on basedir and servername
## both have to be defined before
server.document-root = basedir + servername + "/pages/"
et voici notre nouveau fichier de configuration :
var.basedir = "/var/www/servers/"
$HTTP["host"] == "www.example.org" {
var.servername = "www.example.org"
include "incl-docroot.conf"
auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = basedir + servername + "/htpasswd"
auth.require = ( "/download" => ... )
}
$HTTP["host"] == "www.example.com" {
var.servername = "www.example.com"
include "incl-docroot.conf"
}
La dernière étape déplacer la partie auth dans un fichier include nommé **incl-auth-htpasswd.conf** :
## set authentificate for a directory
auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = basedir + servername + "/htpasswd"
auth.require = ( authdir => ... )
et notre fichier de configuration :
var.basedir = "/var/www/servers/"
$HTTP["host"] == "www.example.org" {
var.servername = "www.example.org"
var.authdir = "/download/"
include "incl-docroot.conf"
include "incl-auth-htpasswd.conf"
}
$HTTP["host"] == "www.example.com" {
var.servername = "www.example.com"
include "incl-docroot.conf"
}
Ok, dernière étape : FastCGI pour un hôte. Nous créons un fichier include dès le début appelé **incl-fastcgi-php.conf** :
fastcgi.server = ( ".php" => ((
"bin-path" => "/usr/bin/php-cgi",
"socket" => basedir + servername + "/tmp/php-" + PID + ".socket"
)))
Si un hôte veut le support PHP, nous incluons simplement ce fichier :
var.basedir = "/var/www/servers/"
$HTTP["host"] == "www.example.org" {
var.servername = "www.example.org"
var.authdir = "/download/"
include "incl-docroot.conf"
include "incl-auth-htpasswd.conf"
}
$HTTP["host"] == "www.example.com" {
var.servername = "www.example.com"
include "incl-docroot.conf"
include "incl-fastcgi-php.conf"
}
Ce qui nous amène à la dernière question : plusieurs noms pour le même vhost. Disons que **www.example.org** et **example.org** sont le même vhost sous différents noms.
var.basedir = "/var/www/servers/"
$HTTP["host"] =~ "^(www\.)?example\.org$" {
var.servername = "www.example.org"
var.authdir = "/download/"
include "incl-docroot.conf"
include "incl-auth-htpasswd.conf"
}
$HTTP["host"] == "www.example.com" {
var.servername = "www.example.com"
include "incl-docroot.conf"
include "incl-fastcgi-php.conf"
}
=== Sous-domaines automatisés ===
Soit à héberger le domaine **domaine.tld** et tous ses sous-domaines ***.domaine.tld** = **doc.domaine.tld**, **toto.domaine.tld**, etc.
Chacun renverra au sous-répertoire correspondant (doc, toto, etc.) de la racine du serveur -> Les URLs de type [[http://xxx.domaine.tld]] sont dirigées vers le répertoire **/var/www/domaine.tld/xxx**
evhost.path-pattern = "/home/www/servers/%3/pages/"
; evhost.path-pattern
: modèle avec des jokers pour construire une documentroot
#define a pattern for the host url finding
# ex : http://xxx.yyy.zzz.framboise.tld
# %% => % sign ()
# %0 => nom de domaine + tld => framboise.home
# %1 => tld => home
# %2 => nom de domaine sans tld => framboise
# %3 => nom de sous-domaine de niveau 1 => zzz
# %4 => nom de sous-domaine de niveau 2 => yyy
# %5 => nom de sous-domaine de niveau 3 => xxx
# etc. (numérotation de droite à gauche)
# Configuration pour le domaine framboise.local (défini avec avahi sur le réseau local)
$HTTP["host"] =~ "(^|\.)framboise\.local$" {
include "include/config.conf"
evhost.path-pattern = document-root + "/%3"
}
# Configuration pour le domaine domaine.tld :
$HTTP["host"] =~ "(^|\.)domaine\.tld$" {
include "include/config.conf"
evhost.path-pattern = document-root + "/%3"
}
# Configuration pour le domaine localhost :
$HTTP["host"] =~ "(^|\.)localhost$" {
include "include/config.conf"
evhost.path-pattern = document-root + "/%2"
}
Il suffit de créer un nouveau sous-répertoire **xxx** de la racine du serveur pour que les domaines **xxx.mondomaine.com**, **xxx.framboise.local** et **xxx.localhost** existent et fonctionnent immédiatement.
Exemple pour que le domaine **www.domaine.tld** soit équivalent au domaine **domaine.tld**
$HTTP["host"] =~ "^(www\.)?domaine\.tld$" {
server.document-root = document-root + "/domaine.tld"
}
Activer le domaine en lançant :
* sudo lighty-enable-mod vhost-domaine.tld
sudo service lighttpd force-reload
==== Comment configurer lightty pour le https ====
=== Configuration préalable ===
[[tutoriel:mini-tutoriels:comment_installer_un_paquet|Installez le paquet]] **[[apt>openssl]]** ou en ligne de commande :
* sudo apt-get install openssl
Vérifiez que lighttpd supporte le ssl :
* lighttpd -v
lighttpd-1.4.19 (ssl) - a light and fast webserver
Build-Date: Jul 29 2008 18:58:09
Si ce n'est pas le cas, il faut recompiler lighttpd avec le support ssl.
Créez un certificat ssl comme indiqué ici : [[http://dev.petitchevalroux.net/linux/generation-certificat-ssl-pour-https-linux.229.html]]
=== Configuration du https pour lighttpd ===
Créez un nouveau fichier de configuration :
[[tutoriel:mini-tutoriels:ficedit#Modifier un fichier avec les droits d'administration|Créez avec les droits d'administration]] un fichier **/etc/lighttpd/conf-available/90-ssl.conf** et y écrire ce qui suit.
Deux choix possibles :
== Activer le ssl pour tous les domaines ==
Pour activer le ssl pour tous les domaines hébergés sur la machine, écrire ceci dans le fichier **/etc/lighttpd/conf-available/90-ssl.conf** :
$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.pemfile = "/chemin/vers/certificat/server.pem"
}
== Activer le ssl pour un seul domaine ==
Pour activer le ssl sur un seul domaine (ici, ssl.//petitchevalroux.net//), commencez par rediriger toutes les requêtes http vers la version https.
Pour cela, ajoutez dans le fichier ssl.conf la règle de redirection suivante :
...
# Redirection des requêtes non https pour les domaines https
$SERVER["socket"] == ":80" {
$HTTP["host"] == "ssl.petitchevalroux.net" {
url.redirect = ( ".*" => "https://ssl.petitchevalroux.net$0" )
}
}
Puis configurez le port https de lightty :
# Configuration du ssl
$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.pemfile = "/chemin/vers/certificat/ssl/server.pem"
# On met le document root à /dev/null par défaut pour que les domaines non ssl répondent en 404
server.document-root = "/dev/null"
# On surcharge le document root pour les domaines ayant le ssl activé
$HTTP["host"] == "ssl.petitchevalroux.net" {
server.document-root = "/chemin/vers/htdocs/"
}
}
=== Activation du ssl ===
Activez le fichier de configuration **ssl.conf** avec la commande :
* lighttpd-enable-mod ssl
Et rechargez **lightty** :
* /etc/init.d/lighttpd force-reload
Pour aller plus loin, voir la doc du **mod ssl** de **lightty** : [[http://redmine.lighttpd.net/wiki/lighttpd/Docs:SSL]]
===== Utilisation =====
Lancez l'application via le tableau de bord dash (Unity) ou via le terminal (toutes versions d'Ubuntu) avec la commande suivante :
machin-chose
===== Désinstallation =====
Pour supprimer cette application, il suffit de supprimer son paquet. Selon la méthode choisie, la configuration globale de l'application est conservée ou supprimée. Les journaux du système, et les fichiers de préférence des utilisateurs dans leurs dossiers personnels sont toujours conservés.
===== Voir aussi =====
* **(en)** [[fr:logiciel:internet:serveur:http:lighty:start]]
* **(fr)** [[http://dev.petitchevalroux.net/linux/lighttpd-ssl-linux.237.html]]
----
//Contributeurs principaux : [[utilisateurs:jamaique]].//
//Basé sur [[http://www.document_source.com|« Titre original de l'article »]] par Auteur Original.//