Installer un serveur web complet (Apache/PHP/MySQL/phpmyadmin)

Installer un serveur web complet (Apache/PHP/MySQL/phpmyadmin)

30/03/2016 0 Par Vincent

Tutoriel tout simple que je vous propose ici. Il s’agit de monter, toujours sous Debian, un serveur web fonctionnel relativement complet. Ici, nous ne parlerons pas de serveur mail, c’est une autre histoire et c’est clairement beaucoup plus compliqué. Je ne vais pas prendre le temps de vous expliquer pourquoi, mais je vous recommande d’utiliser un serveur mail fourni par une société connue et fiable (Gmail/Yahoo/FAI…). Sans cela, ça va être très dur de créer un serveur mail fiable ou vous ne risquerez pas de voir vos mails atterrir constamment dans la boite « Spam/Courriers indésirables » de votre interlocuteur.

Pour ce qui est du choix du serveur mail, je me suis tourné vers Apache2. C’est un vieux moteur web très efficace et désormais très stable. Il est pour l’instant majoritaire sur la marché, devant ses gros concurrents : Nginx ou Microsoft IIS.

On fait une petite mise à jour du système pour commencer (sauf si votre serveur est en production et que certains paquets nécessite d’être maintenu à certaines versions) :

[pastacode lang= »bash » message= » » highlight= » » provider= »manual » manual= »apt-get%20update%20%26%26%20apt-get%20upgrade »/]

Installation d’Apache

On installe le serveur apache2 :

[pastacode lang= »bash » message= » » highlight= » » provider= »manual » manual= »apt-get%20install%20apache2″/]

On modifie le dossier d’apache pour que le serveur puisse accéder sans mal aux données web (surtout pour php) :

[pastacode lang= »bash » message= » » highlight= » » provider= »manual » manual= »chown%20-R%20www-data%3Api%20%2Fvar%2Fwww%2Fhtml%2F%0Achmod%20-R%20770%20%2Fvar%2Fwww%2Fhtml%2F »/]

Lancer un navigateur web et essayer comme adresse : http://ip_du_serveur/ . Si ça fonctionne, vous êtes éligible au HTML/CSS.

Installation de PHP

Maintenant, on va ajouter le support du PHP(v5). C’est un peu la base d’internet avec l’HTML et le CSS.

[pastacode lang= »bash » message= » » highlight= » » provider= »manual » manual= »%23%20Installation%20de%20php5%0Aapt-get%20install%20php5%0A%0A%23%20On%20red%C3%A9marre%20apache%0A%2Fetc%2Finit.d%2Fapache2%20restart »/]

Maintenant, on met en ligne sur le serveur une page de test php :

[pastacode lang= »bash » message= » » highlight= » » provider= »manual » manual= »%23%20Direction%20le%20r%C3%A9pertoire%20d’apache%0Acd%20%2Fvar%2Fwww%2Fhtml%2F%0A%0A%23%20Cr%C3%A9ation%20de%20la%20page%20phpinfo.php%0Aecho%20%22%3C%3Fphp%20phpinfo()%3B%20%3F%3E%22%20%3E%20%2Fvar%2Fwww%2Fhtml%2Fphpinfo.php »/]

Si vous vous connectez sur cette adresse http://ip_du_serveur/phpinfo.php et que la page s’affiche, PHP est correctement installé.

Installation de MySQL

Un serveur web sans base de données, c’est cool mais quand même limité. On passe à l’installation de mysql :

[pastacode lang= »bash » message= » » highlight= » » provider= »manual » manual= »apt-get%20install%20mysql-server%20php5-mysql »/]

On vous demandera de mettre un mot de passe pour l’utilisateur root. C’est très important alors mettez quelque chose de performant. Ensuite on test sur notre serveur répond :

[pastacode lang= »bash » message= » » highlight= » » provider= »manual » manual= »mysql%20-u%20root%20-p »/]

Tapez votre mot de passe. Si vous arrivez sur un prompt : mysql; avec un message de bienvenue, vous êtes connecté et le serveur fonctionne correctement.

Installation de phpmyadmin

On installe maintenant phpmyadmin afin de faciliter l’administration de la base de données, on installe un outil web très pratique pour simplifier les choses :

[pastacode lang= »bash » message= » » highlight= » » provider= »manual » manual= »apt-get%20install%20phpmyadmin »/]

L’installeur vous demandera deux mots de passe :

  • le premier correspond au password root de mysql (le même que saisie dans le paragraphe d’avant)
  • le second pour l’utilisateur principal (root encore une fois dont la confusion) pour l’accès de phpmyadmin.

Essayez : http://ip_serveur/phpmyadmin/ et connectez-vous. Si ça fonctionne, tout est ok.

A ce stade, on est arrivé au stade ou l’on a un serveur web complet. Reste à activer le SSL.

Activation du SSL

Pour activer ou désactiver des sites, apache est livré avec deux commandes : a2ensite et a2dissite.
Pour activer ou désactiver des modules, apache propose aussi deux commandes : a2enmod et a2dismod.

On installe openssl :

[pastacode lang= »bash » message= » » highlight= » » provider= »manual » manual= »apt-get%20install%20openssl »/]

On active le support du SSL :

[pastacode lang= »bash » message= » » highlight= » » provider= »manual » manual= »a2enmod%20ssl »/]

Maintenant on passe à la configuration d’apache. Dans /etc/apache2/ports.conf, décommettez la section suivante :

[pastacode lang= »bash » message= » » highlight= » » provider= »manual » manual= »%3CIfModule%20mod_ssl%3E%0A%20Listen%20443%0A%3C%2FIfModule%3E »/]

On va générer un certificat pour sécuriser la connexion. Bien sur, pour un site fiable, il faut non pas générer mais plutôt acheter un certificat auprès d’un vendeur fiable (entre 50€ et 500€ /an). Les certificats auto-signés (comme nous allons réalisés) permettent de crypter les données (c’est déjà ça), mais n’authentifient pas le site (donc à proscrire pour un site marchand avec paiement par CB par exemple).

[pastacode lang= »bash » message= » » highlight= » » provider= »manual » manual= »openssl%20req%20-new%20-x509%20-days%203650%20-nodes%20-newkey%20rsa%3A4096%20-out%20%2Fetc%2Fssl%2Fcerts%2Fwebserver.crt%20-keyout%20%2Fetc%2Fssl%2Fprivate%2Fwebserver.key%0A%23%23%20Garder%20en%20t%C3%AAte%20ceci%20%3A%20-x509%20permet%20d’auto-sign%C3%A9%20vos%20certificats%0A%23%20Vous%20g%C3%A9n%C3%A9rez%20donc%20deux%20fichiers%2C%0A%23%20%20-%20le%20certificat%20.crt%0A%23%20%20-%20la%20cl%C3%A9%20.key%0A%23%0A%23%20Si%20maintenant%20vous%20voulez%20un%20certificat%20sign%C3%A9%20par%20une%20authorit%C3%A9e%20agr%C3%A9%C3%A9e%2C%20vous%0A%23%20aller%20r%C3%A9aliser%20un%20csr%20(certificat%20de%20request)%20sans%20l’option%20-x509%20%3A%0Aopenssl%20req%20-new%20-days%203650%20-nodes%20-newkey%20rsa%3A4096%20-out%20%2Fetc%2Fssl%2Fcerts%2Fwebserver.csr%20-keyout%20%2Fetc%2Fssl%2Fprivate%2Fwebserver.key%0A%23%23%20et%20donc%20vous%20aurez%20%3A%0A%23%20%20-%20le%20certificat%20temporaire%20.csr%0A%23%20%20-%20la%20cl%C3%A9%20.key%0A%23%20C’est%20%C3%A0%20partir%20du%20.csr%20que%20l’authorit%C3%A9%20(appel%C3%A9e%20CA)%20va%20g%C3%A9n%C3%A9rer%20votre%20certificat%20%0A%23%20final%20.crt%20que%20vous%20utiliserez%20avec%20votre%20site. »/]

Maintenant on modifie la configuration default-ssl et activer le site https :

[pastacode lang= »bash » message= » » highlight= » » provider= »manual » manual= »%23%23%20On%20modifie%20%2Fetc%2Fapache2%2Fsite-available%2Fdefault-ssl%0ASSLEngine%20On%0ASSLCertificateFile%20%2Fetc%2Fssl%2Fcerts%2Fwebserver.crt%0ASSLCertificateKeyFile%20%2Fetc%2Fssl%2Fprivate%2Fwebserver.key%0A%23%20Les%20CA%20d%C3%A9livrent%20%C3%A9galement%20un%20RootCA.crt%20que%20l’on%20utilise%20ici%20%3A%0ASSLCACertificateFile%20%2Fetc%2Fssl%2Fcerts%2Frootca.crt%0A%0A%23%20Apr%C3%A8s%20sauvegarde%20du%20fichier%20%3B%0A%23%23%20On%20active%0Aa2ensite%20default-ssl%0A%0A%23%23%20On%20reboot%20apache2%0A%2Fetc%2Finit.d%2Fapache2%20restart »/]

Voilà, le site est maintenant disponible en https. Plus qu’à tester : https://ip_serveur/.

Attention : il est vrai que pour augmenter la sécurité (surtout si d’autres personnes ont un accès à la machine), la clé avec votre certificat doit contenir un mot de passe. Cela dit, cela impose de la taper à chaque fois que vous souhaiterez redémarrer votre apache. Une solution consiste à retirer ce mot de passe (mais à ne faire que si vous êtes sur des personnes qui accèdent à votre serveur) :

[pastacode lang= »bash » message= » » highlight= » » provider= »manual » manual= »openssl%20rsa%20-in%20%2Fetc%2Fssl%2Fprivate%2Fwebserver.key%20-out%20%2Fetc%2Fssl%2Fprivate%2Fwebserver.key »/]

Un poil de sécurité en plus ?

Pour améliorer un petit peu la sécurité, j’ai l’habitude de restreindre l’accès au /phpmyadmin (et tout autre système avec un accès aux bases de données seulement pour mon réseau local (192.168.1.0/24) ou pour un accès depuis un VPN(dans mon cas 10.8.0.0/24) : http://blog.vincentcharles.ovh/2016/02/29/installer-un-serveur-openvpn/ ).

Pour cela, il suffit d’éditer la configuration apache de chacun des accès. Exemple pour phpmyadmin ->

On remplace ça :

[pastacode lang= »bash » message= » » highlight= » » provider= »manual » manual= »%3CDirectory%20%2Fusr%2Fshare%2Fphpmyadmin%3E%0A%0A%20%20%20%20Options%20FollowSymLinks%0A%20%20%20%20DirectoryIndex%20index.php%0A%20%20%20%20…%0A%3C%2FDirectory%3E »/]

par ça :

[pastacode lang= »bash » message= » » highlight= » » provider= »manual » manual= »%3CDirectory%20%2Fusr%2Fshare%2Fphpmyadmin%3E%0A%20%20%20%20Order%20Deny%2CAllow%0A%20%20%20%20Deny%20from%20All%0A%20%20%20%20Allow%20from%20192.168.1.0%2F24%0A%20%20%20%20Allow%20from%2010.8.0.0%2F24%0A%0A%20%20%20%20Options%20FollowSymLinks%0A%20%20%20%20DirectoryIndex%20index.php%0A%20%20%20%20…%0A%3C%2FDirectory%3E »/]

Bravo, votre serveur web est fonctionnel et sécurisé (http / https / accès limité à phpmyadmin)

EDIT 01/04/2016 -> J’ai trouvé ce site qui permet de récupérer des certificats SSL signés gratuitement, de catégorie 1 (c’est à dire les plus faibles, certifiant juste votre nom  de domaine). C’est suffisant pour la majorité des utilisations privées. Bien sur, vous pouvez acheter des certificats plus lourds (certificat de l’organisation…) pour plus de sécurité si comme je l’ai déjà dit, votre site compte couvrir des activités commerciales ou associatives avec un espace de paiement -> https://startssl.com/ Je ne peux plus conseiller cette méthode puisque StartCom (l’autorité qui génère les certificats) n’est plus reconnue comme autorité de confiance pour les navigateurs Mozilla Firefox, Google Chrome ou encore Opera.

EDIT 24/02/2017 > La meilleure solution pour protégé votre site est l’utilisation de certificats SSL autogénéré par Let’s Encrypt. C’est 100% gratuit malgré quelques limitations. Il ne permet pas de confirmer l’identité du détenteur du certificat ni de l’entreprise ou association l’exploitant mais c’est une première étape vers la sécurisation des données utilisateurs sur votre serveur web. La seule grosse contrainte est la validité de 90 jours de certificats ce qui nécessite de faire un renouvellement de ceux-ci tous les 3 mois donc.