{"id":130,"date":"2016-03-30T21:08:11","date_gmt":"2016-03-30T20:08:11","guid":{"rendered":"http:\/\/blog.vincentcharles.ovh\/?p=130"},"modified":"2017-02-24T08:27:11","modified_gmt":"2017-02-24T07:27:11","slug":"installer-un-serveur-web-complet-apachephpmysqlphpmyadmin","status":"publish","type":"post","link":"https:\/\/blog.vincentcharles.ovh\/index.php\/2016\/03\/30\/installer-un-serveur-web-complet-apachephpmysqlphpmyadmin\/","title":{"rendered":"Installer un serveur web complet (Apache\/PHP\/MySQL\/phpmyadmin)"},"content":{"rendered":"<p>Tutoriel tout simple que je vous propose ici. Il s&rsquo;agit de monter, toujours sous Debian, un serveur web fonctionnel relativement complet. Ici, nous ne parlerons pas de serveur mail, c&rsquo;est une autre histoire et c&rsquo;est clairement beaucoup plus compliqu\u00e9. Je ne vais pas prendre le temps de vous expliquer pourquoi, mais je vous recommande d&rsquo;utiliser un serveur mail fourni par une soci\u00e9t\u00e9 connue et fiable (Gmail\/Yahoo\/FAI&#8230;). Sans cela, \u00e7a va \u00eatre tr\u00e8s dur de cr\u00e9er un serveur mail fiable ou vous ne risquerez pas de voir vos mails atterrir constamment dans la boite \u00ab\u00a0Spam\/Courriers ind\u00e9sirables\u00a0\u00bb de votre interlocuteur.<\/p>\n<p>Pour ce qui est du choix du serveur mail, je me suis tourn\u00e9 vers Apache2. C&rsquo;est un vieux moteur web tr\u00e8s efficace et d\u00e9sormais tr\u00e8s stable. Il est pour l&rsquo;instant majoritaire sur la march\u00e9, devant ses gros concurrents : Nginx ou Microsoft IIS.<\/p>\n<p><!--more--><\/p>\n<p>On fait une petite mise \u00e0 jour du syst\u00e8me pour commencer (sauf si votre serveur est en production et que certains paquets n\u00e9cessite d&rsquo;\u00eatre maintenu \u00e0 certaines versions) :<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-bash\">apt-get update &amp;&amp; apt-get upgrade<\/code><\/pre><\/figure>\n<h1>Installation d&rsquo;Apache<\/h1>\n<p>On installe le serveur <strong>apache2<\/strong> :<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-bash\">apt-get install apache2<\/code><\/pre><\/figure>\n<p>On modifie le dossier d&rsquo;apache pour que le serveur puisse acc\u00e9der sans mal aux donn\u00e9es web (surtout pour php) :<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-bash\">chown -R www-data:pi \/var\/www\/html\/\nchmod -R 770 \/var\/www\/html\/<\/code><\/pre><\/figure>\n<p>Lancer un navigateur web et essayer comme adresse : http:\/\/ip_du_serveur\/ . Si \u00e7a fonctionne, vous \u00eates \u00e9ligible au HTML\/CSS.<\/p>\n<h1>Installation de PHP<\/h1>\n<p>Maintenant, on va ajouter le support du <strong>PHP<\/strong>(v5). C&rsquo;est un peu la base d&rsquo;internet avec l&rsquo;HTML et le CSS.<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-bash\"># Installation de php5\napt-get install php5\n\n# On red\u00e9marre apache\n\/etc\/init.d\/apache2 restart<\/code><\/pre><\/figure>\n<p>Maintenant, on met en ligne sur le serveur une page de test php :<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-bash\"># Direction le r\u00e9pertoire d&#039;apache\ncd \/var\/www\/html\/\n\n# Cr\u00e9ation de la page phpinfo.php\necho &quot;&lt;?php phpinfo(); ?&gt;&quot; &gt; \/var\/www\/html\/phpinfo.php<\/code><\/pre><\/figure>\n<p>Si vous vous connectez sur cette adresse http:\/\/ip_du_serveur\/phpinfo.php et que la page s&rsquo;affiche, <strong>PHP<\/strong> est correctement install\u00e9.<\/p>\n<h1>Installation de MySQL<\/h1>\n<p>Un serveur web sans base de donn\u00e9es, c&rsquo;est cool mais quand m\u00eame limit\u00e9. On passe \u00e0 l&rsquo;installation de mysql :<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-bash\">apt-get install mysql-server php5-mysql<\/code><\/pre><\/figure>\n<p>On vous demandera de mettre un mot de passe pour l&rsquo;utilisateur <strong>root<\/strong>. C&rsquo;est tr\u00e8s important alors mettez quelque chose de performant. Ensuite on test sur notre serveur r\u00e9pond :<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-bash\">mysql -u root -p<\/code><\/pre><\/figure>\n<p>Tapez votre mot de passe. Si vous arrivez sur un prompt : <strong>mysql;<\/strong> avec un message de bienvenue, vous \u00eates connect\u00e9 et le serveur fonctionne correctement.<\/p>\n<h1>Installation de phpmyadmin<\/h1>\n<p>On installe maintenant <strong>phpmyadmin<\/strong> afin de faciliter l&rsquo;administration de la base de donn\u00e9es, on installe un outil web tr\u00e8s pratique pour simplifier les choses :<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-bash\">apt-get install phpmyadmin<\/code><\/pre><\/figure>\n<p>L&rsquo;installeur vous demandera deux mots de passe :<\/p>\n<ul>\n<li>le premier correspond au password root de mysql (le m\u00eame que saisie dans le paragraphe d&rsquo;avant)<\/li>\n<li>le second pour l&rsquo;utilisateur principal (root encore une fois dont la confusion) pour l&rsquo;acc\u00e8s de phpmyadmin.<\/li>\n<\/ul>\n<p>Essayez : http:\/\/ip_serveur\/phpmyadmin\/ et connectez-vous. Si \u00e7a fonctionne, tout est ok.<\/p>\n<p>A ce stade, on est arriv\u00e9 au stade ou l&rsquo;on a un serveur web complet. Reste \u00e0 activer le SSL.<\/p>\n<h1>Activation du SSL<\/h1>\n<p>Pour activer ou d\u00e9sactiver des sites, apache est livr\u00e9 avec deux commandes : a2ensite et a2dissite.<br \/>\nPour activer ou d\u00e9sactiver des modules, apache propose aussi deux commandes : a2enmod et a2dismod.<\/p>\n<p>On installe <strong>openssl<\/strong> :<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-bash\">apt-get install openssl<\/code><\/pre><\/figure>\n<p>On active le support du SSL :<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-bash\">a2enmod ssl<\/code><\/pre><\/figure>\n<p>Maintenant on passe \u00e0 la configuration d&rsquo;apache. Dans \/etc\/apache2\/ports.conf, d\u00e9commettez la section suivante :<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-bash\">&lt;IfModule mod_ssl&gt;\n Listen 443\n&lt;\/IfModule&gt;<\/code><\/pre><\/figure>\n<p>On va g\u00e9n\u00e9rer un certificat pour s\u00e9curiser la connexion. Bien sur, pour un site fiable, il faut non pas g\u00e9n\u00e9rer mais plut\u00f4t acheter un certificat aupr\u00e8s d&rsquo;un vendeur fiable (entre 50\u20ac et 500\u20ac \/an). Les certificats auto-sign\u00e9s (comme nous allons r\u00e9alis\u00e9s) permettent de crypter les donn\u00e9es (c&rsquo;est d\u00e9j\u00e0 \u00e7a), mais n&rsquo;authentifient pas le site (donc \u00e0 proscrire pour un site marchand avec paiement par CB par exemple).<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-bash\">openssl req -new -x509 -days 3650 -nodes -newkey rsa:4096 -out \/etc\/ssl\/certs\/webserver.crt -keyout \/etc\/ssl\/private\/webserver.key\n## Garder en t\u00eate ceci : -x509 permet d&#039;auto-sign\u00e9 vos certificats\n# Vous g\u00e9n\u00e9rez donc deux fichiers,\n#  - le certificat .crt\n#  - la cl\u00e9 .key\n#\n# Si maintenant vous voulez un certificat sign\u00e9 par une authorit\u00e9e agr\u00e9\u00e9e, vous\n# aller r\u00e9aliser un csr (certificat de request) sans l&#039;option -x509 :\nopenssl req -new -days 3650 -nodes -newkey rsa:4096 -out \/etc\/ssl\/certs\/webserver.csr -keyout \/etc\/ssl\/private\/webserver.key\n## et donc vous aurez :\n#  - le certificat temporaire .csr\n#  - la cl\u00e9 .key\n# C&#039;est \u00e0 partir du .csr que l&#039;authorit\u00e9 (appel\u00e9e CA) va g\u00e9n\u00e9rer votre certificat \n# final .crt que vous utiliserez avec votre site.<\/code><\/pre><\/figure>\n<p>Maintenant on modifie la configuration default-ssl et activer le site https :<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-bash\">## On modifie \/etc\/apache2\/site-available\/default-ssl\nSSLEngine On\nSSLCertificateFile \/etc\/ssl\/certs\/webserver.crt\nSSLCertificateKeyFile \/etc\/ssl\/private\/webserver.key\n# Les CA d\u00e9livrent \u00e9galement un RootCA.crt que l&#039;on utilise ici :\nSSLCACertificateFile \/etc\/ssl\/certs\/rootca.crt\n\n# Apr\u00e8s sauvegarde du fichier ;\n## On active\na2ensite default-ssl\n\n## On reboot apache2\n\/etc\/init.d\/apache2 restart<\/code><\/pre><\/figure>\n<p>Voil\u00e0, le site est maintenant disponible en https. Plus qu&rsquo;\u00e0 tester : https:\/\/ip_serveur\/.<\/p>\n<p>Attention : il est vrai que pour augmenter la s\u00e9curit\u00e9 (surtout si d&rsquo;autres personnes ont un acc\u00e8s \u00e0 la machine), la cl\u00e9 avec votre certificat doit contenir un mot de passe. Cela dit, cela impose de la taper \u00e0 chaque fois que vous souhaiterez red\u00e9marrer votre apache. Une solution consiste \u00e0 retirer ce mot de passe (mais \u00e0 ne faire que si vous \u00eates sur des personnes qui acc\u00e8dent \u00e0 votre serveur) :<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-bash\">openssl rsa -in \/etc\/ssl\/private\/webserver.key -out \/etc\/ssl\/private\/webserver.key<\/code><\/pre><\/figure>\n<h1>Un poil de s\u00e9curit\u00e9 en plus ?<\/h1>\n<p>Pour am\u00e9liorer un petit peu la s\u00e9curit\u00e9, j&rsquo;ai l&rsquo;habitude de restreindre l&rsquo;acc\u00e8s au \/phpmyadmin (et tout autre syst\u00e8me avec un acc\u00e8s aux bases de donn\u00e9es seulement pour mon r\u00e9seau local (192.168.1.0\/24) ou pour un acc\u00e8s depuis un VPN(dans mon cas 10.8.0.0\/24) :\u00a0<a href=\"http:\/\/blog.vincentcharles.ovh\/2016\/02\/29\/installer-un-serveur-openvpn\/\">http:\/\/blog.vincentcharles.ovh\/2016\/02\/29\/installer-un-serveur-openvpn\/<\/a> ).<\/p>\n<p>Pour cela, il suffit d&rsquo;\u00e9diter la configuration apache de chacun des acc\u00e8s. Exemple pour phpmyadmin -&gt;<\/p>\n<p>On remplace \u00e7a :<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-bash\">&lt;Directory \/usr\/share\/phpmyadmin&gt;\n\n    Options FollowSymLinks\n    DirectoryIndex index.php\n    ...\n&lt;\/Directory&gt;<\/code><\/pre><\/figure>\n<p>par \u00e7a :<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-bash\">&lt;Directory \/usr\/share\/phpmyadmin&gt;\n    Order Deny,Allow\n    Deny from All\n    Allow from 192.168.1.0\/24\n    Allow from 10.8.0.0\/24\n\n    Options FollowSymLinks\n    DirectoryIndex index.php\n    ...\n&lt;\/Directory&gt;<\/code><\/pre><\/figure>\n<p>Bravo, votre serveur web est fonctionnel et s\u00e9curis\u00e9 (http \/ https \/ acc\u00e8s limit\u00e9 \u00e0 phpmyadmin)<\/p>\n<p><del>EDIT 01\/04\/2016 -&gt; J&rsquo;ai trouv\u00e9 ce site qui permet de r\u00e9cup\u00e9rer des certificats SSL sign\u00e9s gratuitement, de cat\u00e9gorie 1 (c&rsquo;est \u00e0 dire les plus faibles, certifiant juste votre nom\u00a0 de domaine). C&rsquo;est suffisant pour la majorit\u00e9 des utilisations priv\u00e9es. <\/del>Bien sur, vous pouvez acheter des certificats plus lourds (certificat de l&rsquo;organisation&#8230;) pour plus de s\u00e9curit\u00e9 si comme je l&rsquo;ai d\u00e9j\u00e0 dit, votre site compte couvrir des activit\u00e9s commerciales ou associatives avec un espace de paiement<del> -&gt; https:\/\/startssl.com\/<\/del> Je ne peux plus conseiller cette m\u00e9thode puisque StartCom (l\u2019autorit\u00e9 qui g\u00e9n\u00e8re les certificats) n&rsquo;est plus reconnue comme autorit\u00e9 de confiance pour les navigateurs Mozilla Firefox, Google Chrome ou encore Opera.<\/p>\n<p>EDIT 24\/02\/2017 &gt; La meilleure solution pour prot\u00e9g\u00e9 votre site est l&rsquo;utilisation de certificats SSL autog\u00e9n\u00e9r\u00e9 par Let&rsquo;s Encrypt. C&rsquo;est 100% gratuit malgr\u00e9 quelques limitations. Il ne permet pas de confirmer l&rsquo;identit\u00e9 du d\u00e9tenteur du certificat ni de l&rsquo;entreprise ou association l&rsquo;exploitant mais c&rsquo;est une premi\u00e8re \u00e9tape vers la s\u00e9curisation des donn\u00e9es utilisateurs sur votre serveur web. La seule grosse contrainte est la validit\u00e9 de 90 jours de certificats ce qui n\u00e9cessite de faire un renouvellement de ceux-ci tous les 3 mois donc.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tutoriel tout simple que je vous propose ici. Il s&rsquo;agit de monter, toujours sous Debian, un serveur web fonctionnel relativement complet. Ici, nous ne parlerons pas de serveur mail, c&rsquo;est une autre histoire et c&rsquo;est clairement beaucoup plus compliqu\u00e9. Je ne vais pas prendre le temps de vous expliquer pourquoi, mais je vous recommande d&rsquo;utiliser&#8230;<\/p>\n","protected":false},"author":1,"featured_media":249,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,2],"tags":[16],"class_list":["post-130","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorial_linux","category-tutorial","tag-niveau_facile"],"_links":{"self":[{"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/posts\/130","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/comments?post=130"}],"version-history":[{"count":14,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/posts\/130\/revisions"}],"predecessor-version":[{"id":266,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/posts\/130\/revisions\/266"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/media\/249"}],"wp:attachment":[{"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/media?parent=130"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/categories?post=130"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/tags?post=130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}