Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
tutoriel:lamp_repertoires_de_travail [Le 25/07/2011, 21:05] McPeter trouver ip |
tutoriel:lamp_repertoires_de_travail [Le 19/05/2023, 06:34] (Version actuelle) krodelabestiole ancienne révision (Le 07/10/2021, 18:37) restaurée (nope il ne manque rien) |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | {{tag>dapper feisty gutsy hardy intrepid lucid serveur tutoriel}} | + | {{tag>serveur tutoriel bionic}} |
- | + | ||
- | ---- | + | |
+ | {{ :logo:apache-logo.png?80nolink| Logo du logiciel Apache 2}} | ||
====== Serveur LAMP - Créer un/des répertoires de travail ====== | ====== Serveur LAMP - Créer un/des répertoires de travail ====== | ||
- | ===== Présentation ===== | + | Ce tutoriel décrit comment mettre en place un espace de travail pour le [[:web]], avec la mise en pratique de deux cas de figures : un espace public, consultable en [[:web#http_et_navigation|HTTP]] par les internautes et affichant une page web, et un espace privé, seulement visible depuis la machine ou le réseau local et listant les fichiers qui y sont présents. |
- | L'erreur de beaucoup de personnes arrivant sur Ubuntu et/ou GNU/Linux est de créer des pages internet avec des droits d'administration ou d'affecter le répertoire /var/www à un utilisateur. En contrepartie, beaucoup d'utilisateurs trouvent également peu pratique de devoir travailler dans un répertoire qu'ils n'ont pas choisi.\\ | + | La mise en place de ces espaces de travail se fait grâce à la fonctionnalité d'[[:apache2#hotes_virtuels|hôte virtuel]] (//VirtualHost//) dont dispose le serveur HTTP [[:apache2|Apache]]. |
- | **/var/www** est un répertoire sous droits root. Il est donc contre indiqué de travailler dans ce répertoire. | + | |
- | Ici nous allons exposer comment créer ses propres répertoires de travail avec des droits spécifiques à une utilisation à la fois '**publique**' (serveur web personnel) et '**privée**' (serveur de développement). | + | ===== Prérequis ===== |
- | Nous allons aussi faire en sorte de rendre **/var/www** inaccessible de l'extérieur ou du moins accessible de façon ponctuelle. | + | Afin de suivre ce tutoriel, il vous faut une pile [[:LAMP]] ou au moins [[:apache2|Apache]] installé sur une version récente d'Ubuntu. |
- | ===== Mise en place ===== | + | Vous pouvez donc au choix : |
- | ==== Protection de /var/www ==== | + | * suivre la [[:lamp#installation|méthode d'installation de LAMP]] (si vous avez besoin de [[:PHP]] et d'un serveur de bases de données) |
+ | * ou dans le cas contraire simplement installer le paquet [[apt>apache2]] (voir la [[:apache2#installation|documentation à ce sujet]]) | ||
- | Dans un premier temps nous allons donc rendre le dossier /var/www inaccessible. Pour cela, on [[tutoriel:comment_editer_un_fichier|édite]] en [[:sudo|super utilisateur]] le fichier : **/etc/apache2/sites-available/default** et dans la section <Directory /var/www> on va modifier les accès :\\ | + | Il est aussi conseillé d'avoir quelques rudiments concernant la ligne de commande. Si ce n'est pas le cas mieux vaut commencer par essayer de vous former un minimum en consultant [[:tutoriel:console_ligne_de_commande|cette documentation]], en particulier les chapitres concernant les commandes ''ls'' ''cd'' ''mkdir'' ''mv'' ''cp'' et ''rm''.\\ |
- | Changez :\\ | + | Il peut aussi être très utile de consulter la documentation de [[:nano]], qui est probablement l'éditeur de fichier en ligne de commande le plus simple à prendre en main. C'est celui que nous documenterons dans ce tutoriel.\\ |
- | <file> | + | Vous pouvez également consulter la documentation concernant la commande [[:utilisateurs:roschan:sudo|sudo]] si elle ne vous est pas familière. |
- | <Directory /var/www/> | + | |
- | Options Indexes FollowSymLinks MultiViews | + | |
- | AllowOverride None | + | |
- | Order allow,deny | + | |
- | Allow from all | + | |
- | </Directory> | + | |
- | </file> | + | |
- | en :\\ | + | |
- | <file> | + | |
- | <Directory /var/www/> | + | |
- | Options Indexes FollowSymLinks MultiViews | + | |
- | AllowOverride None | + | |
- | Order Deny,Allow | + | |
- | Deny from all | + | |
- | Allow from 127.0.0.1 # local | + | |
- | Allow from 192.168.1.0/24 # reseau | + | |
- | </Directory> | + | |
- | </file> | + | |
- | Cette modification va faire en sorte que seule votre machine (127.0.0.1) et celles de votre réseau local (à condition que celui-ci utilise l'adresse 192.168.1.0) auront accès aux pages web situées dans le dossier **/var/www/**. | + | ===== Mise en place d'un espace public ===== |
- | ==== Création des répertoires de travail ==== | + | ==== Création du répertoire de travail ==== |
- | Ici nous allons placer nos répertoires dans la zone **/media** (en prévision d'une installation sur une clé usb, un disque externe, une partition séparée, etc. Libre à vous de choisir le lieu ... qu'il reste cohérent quand même :-P\\ | + | Pour ce cas de figure nous voulons qu'Apache affiche le contenu des fichiers que nous créerons dans le répertoire ''/var/www/public''. |
- | sudo mkdir /media/www-dev | + | Nous allons donc commencer par créer ce répertoire. Par défaut le répertoire ''/var/www'' appartient à l'utilisateur //root// et les autres utilisateurs n'y ont pas accès en écriture. Il nous faut donc créer ce répertoire avec les [[:sudo|permissions super utilisateur]] ([[:utilisateurs:roschan:sudo|sudo]]) : |
- | sudo mkdir /media/www-dev/public | + | <code>sudo mkdir /var/www/public</code> |
- | sudo mkdir /media/www-dev/private | + | |
+ | Dans la foulée nous allons modifier les [[:permissions]] de ce répertoire en suivant [[:apache2#permissions|cette documentation]], afin qu'Apache soit en mesure d'accéder au répertoire et que nous soyons en mesure d'y apporter des modifications : | ||
- | ==== Donner les droits utilisateur aux répertoires de travail ==== | + | <code>sudo chown $USER:www-data /var/www/public |
+ | chmod 750 /var/www/public</code> | ||
- | <note important>__Attention:__la variable '**$USER**' est une variable pour l'utilisateur en cours. si vous voulez affecter ces répertoires à un autre utilisateur, donnez le nom réel de l'utilisateur.\\ | + | Pour l'exemple nous allons y créer un fichier ''index.html'' contenant le minimum nécessaire à l'affichage d'un message d'accueil : |
- | Le '**users**' par contre est un nom de **group** (normalement déjà présent sur votre installation). Soit vous utilisez nom_user:nom_user, soit nom_user:users.\\ | + | |
- | '**users**' étant souvent le **group** utilisé sur de l'hébergement mutualisé, ce qui vous permet de simuler votre hébergeur au plus près.</note> | + | |
- | sudo chown -R $USER:users /media/www-dev | + | <code>nano /var/www/public/index.html</code> |
- | ==== Configuration d'alias dans apache ==== | + | Ce qui ouvre l'éditeur [[:nano]] dans lequel nous allons coller : |
- | Pour pouvoir accéder à ces répertoires, apache a besoin d'une *//redirection//*.\\ | + | <file - index.html><html lang="fr"> |
- | Cette *//redirection//* se présente sous la forme : http://nom_de_domaine.tld/nom_de_redirection\\ | + | <head> |
- | Ces *//redirections//* s'appellent des **Alias**.\\ | + | <meta charset="UTF-8"> |
- | Il nous faut donc ajouter deux alias, un pour **public** et un pour **private**. | + | <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
+ | <title>Espace public</title> | ||
+ | </head> | ||
+ | <body> | ||
+ | <h1>Bienvenue sur notre espace public.</h1> | ||
+ | </body> | ||
+ | </html></file> | ||
- | [[tutoriel:comment_editer_un_fichier|Éditez]] en [[:sudo|super utilisateur]] le fichier : **/etc/apache2/sites-available/default** et ajoutez à la suite de <Directory /var/www>....</Directory> :\\ | + | Puis //Ctrl//+//O// pour sauvegarder et //Ctrl//+//X// pour quitter. |
- | <note tip>Dans le cas ci-dessous on accorde un accès au W3C (validateur html) et à l'espace dédié aux développeurs d'application utilisant Paypal</note> | + | ==== Création de l'hôte virtuel ==== |
- | <file> | + | Nous allons [[:apache2#creation_d_hotes_virtuels|configurer notre hôte virtuel]] dans un fichier dédié ''/etc/apache2/sites-available/public.conf'' : |
- | ## ZONE PUBLIQUE | + | |
- | Alias /public /media/www-dev/public | + | |
- | <Directory /media/www-dev/public> | + | |
- | Options Indexes FollowSymLinks MultiViews | + | |
- | AllowOverride All | + | |
- | Order allow,deny | + | |
- | Allow from all | + | |
- | </Directory> | + | |
- | ## ZONE PRIVEE | + | <code>sudo nano /etc/apache2/sites-available/public.conf</code> |
- | Alias /private /media/www-dev/private | + | |
- | <Directory /media/www-dev/private> | + | |
- | Options Indexes FollowSymLinks MultiViews | + | |
- | AllowOverride All | + | |
- | Order deny,allow | + | |
- | Deny from all | + | |
- | Allow from 127.0.0.1 # Local | + | |
- | Allow from 192.168.1.0/24 # Réseau | + | |
- | Allow from .w3.org # W3C | + | |
- | Allow from sandbox.paypal.com # Paypal | + | |
- | </Directory> | + | |
- | </file> | + | |
- | ==== Ajout de liens symboliques ==== | + | Ce qui ouvre l'éditeur [[:nano]] dans lequel nous allons coller : |
- | A présent les espaces sont valides, mais non visible depuis la racine de votre serveur (c.f.: http://localhost). Il serait donc judicieux et pratique d'y avoir accès directement, plutôt que de devoir taper manuellement 'http://localhost/public' ou 'http://localhost/private'.\\ | + | <file - public.conf><VirtualHost *:80> |
- | Il suffit tout simplement de créer un lien symbolique dans **/var/www** | + | DocumentRoot "/var/www/public" |
+ | <Directory "/var/www/public"> | ||
+ | Options +FollowSymLinks | ||
+ | AllowOverride all | ||
+ | Require all granted | ||
+ | </Directory> | ||
+ | ErrorLog /var/log/apache2/error.public.log | ||
+ | CustomLog /var/log/apache2/access.public.log combined | ||
+ | </VirtualHost></file> | ||
- | <note important>__Attention:__ Ne jamais faire un '//rm -rf//' sur un lien symbolique ... cette commande aura pour effet de supprimer le contenu réel de destination du lien symbolique. Utilisez juste '//rm /dossier/nom_symbolique//' comme s'il s'agissait d'un simple fichier.\\ | + | Puis //Ctrl//+//O// pour sauvegarder et //Ctrl//+//X// pour quitter. |
- | les liens symboliques dans **/var/www** se font via 'sudo' et donc sont en //root:root//. **Ne changez pas ces droits !**</note> | + | |
- | sudo ln -s /media/www-dev/public /var/www/public | + | Il faut ensuite activer cet hôte : |
- | sudo ln -s /media/www-dev/private /var/www/private | + | <code>sudo a2ensite public</code> |
- | Il vous faudra également effacer le fichier index.html pour que cela prenne effet : | + | Ce //VirtualHost// ne possède pas de directive ''ServerName'' ou ''ServerAlias''. Il sera donc utilisé par défaut pour les requêtes sur le port 80 si aucun autre //VirtualHost// ne correspond exactement au nom de domaine appelé. Pour qu'il soit pris en compte il faut par contre désactiver l'hôte virtuel par défaut d'Apache, qui arrive en priorité en suivant l'alphabet : |
+ | <code>sudo a2dissite 000-default</code> | ||
- | sudo rm /var/www/index.html | + | Puis nous pouvons redémarrer Apache afin qu'il prenne en compte notre nouvelle configuration : |
+ | <code>sudo systemctl restart apache2</code> | ||
- | ==== Éviter le 403 ==== | + | La page d'accueil publique devrait alors être visible à l'adresse [[http://localhost/]] pour la machine locale, ou à l'adresse IP du serveur pour les autres machines. |
- | Les répertoires **/var/www** et **/media/www-dev/private** (/var/www/private) étant interdit de l'extérieur, un visiteur tapant votre adresse (ip / [[:dns_dynamique|no-ip , DynDNS]] / nom de domaine) directement sans préciser le dossier '//public//', se verra accueilli par une belle page en 403 (ou si il tente d'accéder *par miracle* <-- faut le savoir :-P à votre répertoire '//private//') | + | ===== Mise en place d'un espace privé ===== |
- | Si vous n'avez pas de domaine (domain.tld est un exemple générique), il faudra utiliser votre IP réelle (ex : http://checkip.dyndns.org/ ). | + | ==== Création du répertoire de travail ==== |
- | On va donc remédier à cela en redirigeant les visiteurs automatiquement vers le répertoire '//public//' en cas d'erreur 403.\\ | + | De la même manière nous allons créer un répertoire ''/var/www/private'' : |
- | Il suffit d'ajouter la ligne : | + | <code>sudo mkdir /var/www/private</code> |
- | ErrorDocument 403 "http://domain.tld/public" | + | |
- | à la suite de : | + | |
- | <Directory /var/www> | + | |
- | et : | + | |
- | <Directory /media/www-dev/private> | + | |
+ | Puis modifier pareillement les [[:apache2#permissions]] : | ||
+ | <code>sudo chown $USER:www-data /var/www/private | ||
+ | chmod 750 /var/www/private</code> | ||
- | ===== Finalisation ===== | + | Pour cet exemple nous n'allons pas créer de fichier index, mais seulement un fichier ''test.txt'' : |
+ | <code>touch /var/www/private/test.txt</code> | ||
- | Voilà c'est fini. À présent il vous suffit de recharger la configuration d'apache pour rendre tout cela opérationnel. | + | ==== Création de l'hôte virtuel ==== |
- | sudo /etc/init.d/apache2 force-reload | + | |
- | ===== Problèmes ===== | + | Notre [[:apache2#creation_d_hotes_virtuels|hôte virtuel]] sera cette fois configuré dans le fichier ''/etc/apache2/sites-available/private.conf'' : |
- | * Cas d'une erreur sur ServerName au rechargement d'apache\\ | + | <code>sudo nano /etc/apache2/sites-available/private.conf</code> |
- | [[:apache2|Erreur ServerName]] | + | |
- | * Renvoi vers votre 'livebox/neufbox/ClubInternet Box' avec un nom de domaine.\\ | + | Ce qui ouvre l'éditeur [[:nano]] dans lequel nous allons coller : |
- | [[tutoriel:comment_editer_un_fichier|Éditez]] en [[:sudo|super utilisateur]] le fichier : **/etc/hosts** et ajouter une ligne avec : | + | |
- | 127.0.0.1 domain.dnsalias.net | + | |
- | * Erreur sur le localhost \\ | + | <file - private.conf><VirtualHost *:80> |
- | [[tutoriel:comment_editer_un_fichier|Éditez]] en [[:sudo|super utilisateur]] le fichier : **/etc/hosts** et remplacer les lignes : | + | ServerName private.localhost |
- | 127.0.0.1 localhost | + | DocumentRoot "/var/www/private" |
- | 127.0.1.1 <hostname> | + | <Directory "/var/www/private"> |
- | par : | + | Options +FollowSymLinks +Indexes |
- | 127.0.0.1 localhost <hostname> | + | AllowOverride all |
+ | Require ip ::1 127.0.0.1 192.168 | ||
+ | </Directory> | ||
+ | ErrorLog /var/log/apache2/error.private.log | ||
+ | CustomLog /var/log/apache2/access.private.log combined | ||
+ | </VirtualHost></file> | ||
- | ===== Liens et ScreenCast ===== | + | Puis //Ctrl//+//O// pour sauvegarder et //Ctrl//+//X// pour quitter. |
- | Reprise de l'ancienne doc : http://doc.ubuntu-fr.org/tutoriel/virtualhosts_avec_apache2_et_dyndns | + | Il faut ensuite activer cet hôte et redémarrer Apache : |
+ | <code>sudo a2ensite private.conf | ||
+ | sudo systemctl restart apache2</code> | ||
- | Installation en vidéo (screencast) de ce tutoriel : http://doc.ubuntu-fr-secours.org/lamp/\\ | + | * L'option ''+Indexes'' permet le [[:apache2#index|listing des fichiers]]. |
- | - [[http://screencast.ubuntu-fr-secours.org/screencast/lamp/04-Environnement_de_travail.ogg|04-Environnement_de_travail.ogg]] - 21 Mo - 15 minutes 33 sec ( pourquoi une minute de plus 8-o ).\\ | + | * La directive //[[https://httpd.apache.org/docs/current/fr/mod/mod_authz_core.html#require|Require ip]]// ne permet l'utilisation de cet hôte que par les machines possédant l'adresse IP locale (''::1'' en [[wpfr>IPv6]] ou ''127.0.0.1'' en [[wpfr>IPv4]]) ou une IP du réseau local (commençant par ''192.168''). |
- | - [[http://screencast.ubuntu-fr-secours.org/screencast/lamp/04-Environnement_de_travail.avi|04-Environnement_de_travail.avi]] - 39 Mo - 14 minutes 36 sec.\\ | + | * Cet hôte virtuel ne sera appelé que pour le nom de domaine ''private.localhost'', tel que défini par la directive ''ServerName''. |
+ | L'espace privé sera alors accessible depuis cette machine à l'adresse [[http://private.localhost/]] et listera les fichiers présents dans le répertoire ''/var/www/private'', en l'occurrence notre fichier ''test.txt''. | ||
---- | ---- | ||
- | --- //[[|]] Contributeur/Mainteneur : [[utilisateurs:McPeter]]// | + | //Contributeurs : [[:utilisateurs:krodelabestiole]]// |