logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Ceci est une ancienne révision du document !


Prendre en main Apache2

Introduction

Un serveur LAMP

est un serveur Web. Historiquement, l'acronyme « LAMP » fait référence aux quatre composantes d'un tel serveur Web :

  • Linux : le système d'exploitation constituant la base du système.
  • Apache : le serveur HTTP qui gère la communication avec le client.
  • MySQL : le système de gestion de base de données.
  • PHP : le langage de script utilisé pour générer les pages dynamiques.

Pré-requis

apt-get update && apt-get dist-upgrade
  • Installer les librairies de base :
apt-get install build-essential 
apt-get install apache2

Dans ce wiki : la prise en main d'apache2 qui est le serveur web !

Créer son site web rapidement

Création dossier pour les fichiers de code du site

cd /var/www/
mkdir hypathie.net
chown -R hypathie:www-data hypathie.net/
chmod -R 750 hypathie.net/
vim hypathie.net/index.html
<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <title>hypathie.net _ index.html</title>
 </head>
 
 <body>
    <h1>Bienvenue sur le site hypathie ! </h1>
 </body>
</html>
A savoir !

Pour régler définitivement les problèmes d'encodage, au cas où l'on oublie la balise <meta charset=“UTF-8”> du head, on édite le fichier /etc/apache2/conf-availables/charset.conf

vim /etc/apache2/conf-available/charset.conf

Et on dé-commente la ligne :

AddDefaultCharset UTF-8
systemctl restart apache2

Création d'un virtualhost en local pour le site dans /etc/apache2/sites-available/

cd /etc/apache2/sites-available
vim hypathie.net.conf
<VirtualHost *:80>
        ServerName hypathie.net

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/hypathie.net/

        <Directory /var/www/hypathie.net>
          require all granted
          AllowOverride All
        </Directory>

        LogLevel info

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>
Explications
  • VirtualHost *:80
    L'étoile signifie toutes les adresses écoutées par apache et auxquelles il répond. Ce sont les adresses des clients qui consultent les sites servis par apache, sur le port 80.
  • ServerName and ServerAlias :
    Let Apache know the domain to match to this virtual host by setting the ServerName. Optionally also use ServerAlias to tell apache to listen to other domains and point them to this virtual host as well, such as a “www” subdomain.
  • DocumentRoot:
    Change to suit your needs. I often have a “public_html” or “public” directory which is the web root. Then I can encapsulate related files which stay behind the web-root within the sites directory. (site.com directory, with site.com/public_html directory as the web-root). This is how Laravel works by default.

Options -Indexes:: -Indexes stops people from being able to go to a directory and see files listed in there. Instead they see a Forbidden error. This can stops users view all your files in your /images directory, for instance.

  • AllowOverride:
    Set to “all” to allow .htaccess files in your virtual host (And sub-directories)

ErrorLog, CustomLog: Create log files specifically for your domain, so they don't get mixed in with traffic / errors from other sites running on the server.

Activer le site (cela crée un lien symbolique dans /etc/apache2/sites-enabled/)

a2ensite hypathie.net.conf
systemctl restart apache2

Ajouter son domaine dans /etc/hosts

Le domaine n'a pas à être loué forcément, mais le nom du site pour Apache2.

vim /etc/hosts
127.0.0.1       localhost
127.0.1.1       db
127.0.1.1       hypathie.net


# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
  • db : c'est le hostname de la machine sur laquelle tourne apache2 et pour laquelle on vient de modifier le fichier /etc/hosts.

Vérifications

Si l'on tombe sur sur la page d'accueil du site de test d'apache2
dont le code source est placé dans /var/www/html/index.html

On désactive ce site :

cd /etc/apache2/sites-enabled/ && a2dissite 000-default.conf && systemctl restart apache2

Création de plusieurs virtualhosts accessibles depuis d'une autre machine du réseau local

Remarques sur la configuration physique

  • Il n'y a pas à modifier le fichier /etc/hosts de la machine sur laquelle tourne apache2 qui désert le site web:
less /etc/hosts
127.0.0.1       localhost
127.0.1.1       db
127.0.1.1       hypathie.net


# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
  • On part du principe que :
    • la machine sur laquelle tourne apache2 a pour ip :192.168.0.17
    • la machine distante du réseau local a pour ip : 192.168.0.14
  • Qu'on a créé plusieurs fichiers de code source pour les différents sites qui correspondront aux virtualhosts qui vont être créés plus bas.

Par exemple, on a créé les dossiers essai et test dans le dossier /var/www/, avec dans chacun d'eux un dossier public qui contient une page web d'accueil.

ls /var/www/
essai  html  hypathie.net  test

Créations de plusieurs virtualhosts pour une même ip

Comme plus haut :

vim essai.conf
<VirtualHost *:80>
        ServerName essai.local
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/essai/public

        <Directory /var/www/essai/public/>
          require all granted
          AllowOverride All
        </Directory>

        LogLevel info

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>
vim test.conf
<VirtualHost *:80>
        ServerName test.local
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/test/public

        <Directory /var/www/test/public/>
          require all granted
          AllowOverride All
        </Directory>

        LogLevel info

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>
  • On active ces deux sites :
a2ensite essai.conf
a2ensite test.conf
  • On modifie le fichier /etc/hosts des machines du réseau local avec lesquelles on souhaite se connecter au site web.
systemctl restart apache2

fichier hosts sur debian

On configure le fichier hosts des ordinateurs distants du réseau local susceptibles de se connecter aux sites test.local et essai.local :

Par exemple pour la machine d'ip : 192.168.0.14, qui se connectera sur le serveur d'ip 192.168.0.17 sur lequel tourne apache2 :

vim /etc/hosts
127.0.0.1       localhost
127.0.1.1       debian
192.168.0.17    db
192.168.0.17    test.local
192.168.0.17    essai.local



# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
  • debian : c'est le hostname de la machine cliente d'ip 192.168.0.14 qui va visiter les sites de la machine d'ip 192.168.0.17 sur laquelle tourne apache2 ;
  • db : c'est la hostname de la machine qui fait office de serveur qui a l'ip 192.168.0.17 et sur laquelle tourne apache2.
  • test.local : c'est le servername, le nom du serveur virtuel crée par apache2 et qui va permettre au client (distant) de demander à apache2 de visualiser ce site
  • essai.local : idem

fichier hosts sur windows

On édite le fichier hosts qui se trouve : C:\Windows\System32\drivers\etc

On y ajoute l'ip du serveur debian qui se trouve sur le sous-réseau :

# localhost name resolution is handled within DNS itself.
	127.0.0.1       localhost
	::1             localhost

	192.168.0.17    db
	192.168.0.17    test.local
	192.168.0.17    essai.local

On teste

  • Dans le navigateur de la machine d'ip 192.168.0.14 de son réseau local : essai.local
  • Dans le navigateur de la machine d'ip 192.168.0.14 de son réseau local : test.local

Pour ce faire, il faut configurer son routeur pour rediriger les connexions extérieures qui viennent toc-toquer sur sa box-machin, dans cet exemple vers l'ip 192.168.0.17 de la machine sur laquelle tourne apache2.

Installer son site dans son répertoire personnel

Attention de modifier user par l'utilisateur qui est propriétaire du dit répertoire !

On crée un dossier Web

mkdir /home/user/www/site1

On donne propriétés et droits

chown -R user:www-data /home/user/www/
chmod -R 750 /home/user/www/

On crée un dossier pour le site1 et un index.html pour tester

cd /home/user/www/ && mkdir site1/
vim site1/index.html/

On crée un lien symbolique vers le répertoire utilisateur dans www

ln -s /home/user/www/site1/ /var/www/essai

Il n'y a rien de plus à faire, ni à modifier le virtualhost ni à recharger apache.

On lui crée un virtualhost

On donne le chemin du dossier de son répertoire personnel dans le virtualhost.

<VirtualHost *:80>
        ServerName site1.local
        ServerAdmin webmaster@localhost
        DocumentRoot /home/user/www/site1/

        <Directory /home/user/www/site1/
          require all granted
          AllowOverride All
        </Directory>

        LogLevel info

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>
a2ensite site1.local
systemctl reload apache2

On teste :

* Par exemple, dans le navigateur : site1.local

Le module php7

On installe les paquets nécessaires

apt install php7.3-cli php7.3-fpm php7.3-json php7.3-pdo php7.3-mysql php7.3-zip php7.3-gd  php7.3-mbstring php7.3-curl php7.3-xml php7.3-bcmath php7.3-json
apt -y install libapache2-mod-php

On active le mode php

a2enmod php7.3
systemctl restart apache2

Fichiers intéressants

Tout est configuré comme il faut, mais à savoir !

La directive active directory

more /etc/apache2/mods-available/dir.conf
DirectoryIndex DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm

Le fichier php7.3.conf

 vim php7.3.conf
more /etc/apache2/mods-enabled/php7.3.conf
<FilesMatch ".+\.ph(ar|p|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>

Les premières lignes que l'application x-httpd-php interprète les fichier qui se termine soit par .phar, soit par .php soit par .phtml.

Pour résumer

Fichiers de log d'apache

* Erreurs

more /var/log/apache2/error.log

Par exemple erreur suivante indique un problème de droit sur le fichier index.php

[Mon Dec 07 19:18:33.354048 2020] [php7:error] [pid 5220] [client ::1:38114] PHP Fatal error:  Unknown: Failed opening required '/home/user/www/mon_site.com/index.php' (include_path='.:/usr/share/php') in Unknown on line 0

* Accès

more /var/log/apache2/access.log

Propriétés et droits

  • On donne les propriétés : utilisateur du site et au groupe www-data :
    chown -R utilisateur:www-data /chemin/du/site/
  • On donne récursivement les droits 2750 sur le dossier du site :
    chmod -R 750 /home/utilisateur/site/
    • SGID sur un fichier ou un dossier, Valeur octale : 2000, valeur symbolique : s
    • les droits de lecture + écriture + exécution pour l'utilisateur (7)
    • les droits de lecture + exécution pour le groupe www-data (5)
    • aucun droit pour les autres (0)
Pour les paranoïdes de la sécurité.
cd /chemin/dossier/site_web && find . -type d -exec chmod 2750 {} \;
cd /chemin/dossier/site_web && find . -type f -exec chmod 640 {} \;

Fichiers de configuration d'apache

  • Les fichiers de code source du site web sont placés sur le système dans : /var/www/
  • Il est conseillé d'approprier le dossiers www et à ses sous dossiers à l'utilisateur courant du système et au groupe www-data, ainsi que les droits 755 avec chmod.
  • Les fichiers de configuration d'un virtualhost qui permettent de servir le code source d'un site web se trouve dans : /etc/apache2/site-available. Lorsqu'on crée un fichier on lui donne l'extension .conf sur Jessie.
  • Dans le dossiers /etc/apache2/site-enabled/ on trouve des liens symboliques dont la présence prouve que le site correspondant a été mis en service avec la commande a2ensite le-site. On peut aussi crée manuellement un lien symbolique avec la commande linux ln
  • Le fichier de configuration d'apache qui gère le mapping des noms et de leurs extensions possibles pour le premier fichier présentant le site web (en général index.html ou index.php) se modifie à la dernière ligne :
vim /etc/apache2/apache2.conf
DirectoryIndex index.html default.html index.php default.php
  • Le fichier de démarrage du site web (par exemple index.php) doit se trouver dans le dossier déclaré dans la configuration du virtualhost dans la balise Directory, par exemple :
[...]
        <Directory /var/www/essai/public/>
[...]
  • Lister les modules d'apache :
ls /etc/apache2/mods-available/
  • Lister les modules d'apache activés :
ls /etc/apache2/mods-enabled/

Commandes de gestion d'apache

  • Relancer le service d'apache après une modification d'un ou plusieurs fichiers de configuration

Sur Jessie

service apache2 reload
On peut faire aussi :
{start|stop|graceful-stop|restart|reload|force-reload|start-htcacheclean|stop-htcacheclean}

Sur Buster (debian10)

systemctl reload apache2
  • Mettre en service un site déjà configuré :
a2ensite le_site
  • Désactiver un site :
a2dissite le_site
  • Activer un module :
a2enmod nomModule
  • Désactiver un module :
a2dismod nomModule

Pour un projet symfony5

On installe Apache2 si c'est pas fait

apt install apache2

On installe php7

apt install php7.2 libapache2-mod-php7.2 php7.2-common php7.2-sqlite3 php7.2-mysql php7.2-gmp php7.2-curl php7.2-intl php7.2-mbstring php7.2-xmlrpc php7.2-soap php7.2-ldap php7.2-gd php7.2-bcmath php7.2-xml php7.2-cli php7.2-zip

On configure php pour Apache ainsi

/etc/php/7.[version]/apache2/php.ini 
file_uploads = On
allow_url_fopen = On
short_open_tag = On
memory_limit = 256M
upload_max_filesize = 100M
max_execution_time = 360

On crée un virtualhost de même nom que le projet symfony

cd /etc/apache2/sites-available && vim TestSymfony

apt install php7.2 libapache2-mod-php7.2 php7.2-common php7.2-sqlite3 php7.2-mysql php7.2-gmp php7.2-curl php7.2-intl php7.2-mbstring php7.2-xmlrpc php7.2-soap php7.2-ldap php7.2-gd php7.2-bcmath php7.2-xml php7.2-cli php7.2-zip

<VirtualHost *:80>
   ServerName TestSymfony
 
   DocumentRoot /var/www/TestSymfony/public/
   
   <Directory /var/www/TestSymfony/public/>
		Options FollowSymLinks MultiViews
		AllowOverride All
		Order allow,deny
        Allow from All
   </Directory>
 
   ErrorLog /var/log/apache2/project_error.log
   CustomLog /var/log/apache2/projec_access.log combined
</VirtualHost>

On donne les bons droits au dossier du projet

Symfony a besoin du droit d’exécution de certains fichiers.

chown -R www-data:www-data /var/www/TestSymfony/
chmod -R 755 /var/www/TestSymfony/

On crée un lien symbolique vers "site enable"

a2ensite TestSymfony && systemctl restart apache2.service

Discuter avec Apache

systemctl [stop|start|enable] apache2.service

On installe symfony

mkdir InstallSymfonyComposer
cd InstallSymfonyComposer/
wget https://getcomposer.org/installer
 
php installer
 
cp composer.phar composer.phar_copy
 
sudo mv composer.phar /usr/local/bin/composer
 
sudo chmod +x /usr/local/bin/composer
 
cd /var/www/
composer create-project symfony/skeleton TestSymfony

Le dossier web /var/www appartient à root :

chmod -R 777 /var/www/

Pour créer une application plus légère comme un microservice, une app console ou une API dans une certaine version du framework :

composer create-project symfony/skeleton TestSymfony [^version_voulue]

ou

symfony new my_project [--version=lts|stable|4.4]

Pour créer une application web traditionnelle :

composer create-project symfony/website-skeleton TestSymfony

ou

symfony new --full my_project [--version=lts|stable|4.4]

On n'oublie de remettre les droits à /var/www

chmod -R 755 /var/www/
utilisateurs/hypathie/tutos/creer-son-site-web-en-php-_-prendre-en-main-apache2-sur-jessie.1607378204.txt.gz · Dernière modification: 07/12/2020 22:56 par Hypathie

Pied de page des forums

Propulsé par FluxBB