Attention, cet article a plus d'une année d'ancienneté. Il est possible que les informations présentées ne soient plus à jour, spécialement dans le cadre d'un article technique.
Bonjour à tous,
Aujourd’hui, je me suis enfin décider à écrire un article complet qui vous explique comment créer un serveur web avec Debian 7 de A à Z.
Au programme :
- Installation de Debian 7
- Installation des composants systèmes de base
- Installation des composants pour notre serveur
- Configuration des diffèrents composants
- Installation de Isp Config 3
- Configuration d’un nom de domaine
- Création d’un site web
- Création d’une base de données
- Création d’un accès FTP
- Tests de fonctionnements
- Liens utiles
Les composants pour créer un serveur web :
- Apache mpm worker 2.x ( Serveur Apache en version multi-thread )
- Mysql 5.x ( Serveur de base de données )
- Php5-fpm ( pour traiter les requêtes php avec apache )
- APC ( Opcode php )
- Apache Page Speed ( module de concaténation et de mise en cache pour apache )
Installation de Debian :
Pour cette procédure, j’utilise l’image suivante de Debian : debian-7.5.0-amd64-netinst
Les images d’installation de Debian sont téléchargeables en cliquant ici
Pour l’installation, je n’utilise pas le mode graphique qui est trop lourd à mon goût.
Démarrez sur l’image de Debian que vous venez de télécharger et choisissez l’option Install :
Ensuite, choisissez votre langue, pour moi le Français :
Une fois la langue choisie, sélectionnez votre pays, c’est très important de choisir le bon pour que l’heure du système soit réglée correctement !
Moi, je choisis la France :
Ensuite, choisissez la disposition de votre clavier, pour moi Français :
Choisissez le nom de votre machine :
Ensuite, choisissez un mot de passe fort pour l’utilisateur root, si ça peut vous aider, utilisez un générateur de mot de passe :
Ensuite, choisissez un nouvel utilisateur, il nous servira par exemple, à nous connecter en ssh :
Choisissez la méthode de partitionnement du disque :
Choisissez le disque à partitionner :
Choisissez le schéma de partitionnement, personnellement, je laisse tout dans la même partition :
Vérifiez que le récapitulatif des opérations sur le disque corresponde à ce que vous voulez :
Si tout est bon, validez votre choix :
Le système va maintenant installer le gestionnaire de paquet « APT » :
Choisissez votre Pays de résidence ou un pays proche lorsque le système vous demandera dans quel pays prendre les miroirs de téléchargement :
Ensuite, choisissez un des serveurs parmi la liste :
Laissez l’outil de gestion installer les paquets de base du système :
Laissez l’assistant d’installation copié les fichiers de base du système :
Maintenant, vous devez choisir si vous souhaitez participer aux statistiques d’utilisation Debian, ce choix n’a aucune incidence sur la suite de notre installation :
Maintenant, choisissez les composants à installer avec la touche espace, n’installer AUCUN composant à part serveur SSH et utilitaires usuels du système.
Maintenant, laissez le système s’installer :
Installez le secteur d’amorce « GRUB » :
Et voilà le travail, vous avez terminé l’installation de Debian, éjectez maintenant le cd et laissez votre système redémarrer :
Installation des composants système de base :
Normalement, l’éditeur de texte nano est installé avec les utilitaires systèmes usuels, mais les images debian de certains hébergeurs ne l’intègre pas, alors au cas ou, lancez cette commande :
apt-get install nano
Maintenant, éditez la liste des sources pour le gestionnaire de paquets APT :
nano /etc/apt/sources.list
Vous devriez avoir quelque chose dans ce genre :
deb http://ftp.fr.debian.org/debian/ wheezy main deb-src http://ftp.fr.debian.org/debian/ wheezy main deb http://security.debian.org/ wheezy/updates main deb-src http://security.debian.org/ wheezy/updates main # wheezy-updates, previously known as 'volatile' deb http://ftp.fr.debian.org/debian/ wheezy-updates main deb-src http://ftp.fr.debian.org/debian/ wheezy-updates main
Rajoutez contrib non-free à la fin de chaque source ce qui vous donnera ceci :
deb http://ftp.fr.debian.org/debian/ wheezy main contrib non-free deb-src http://ftp.fr.debian.org/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free # wheezy-updates, previously known as 'volatile' deb http://ftp.fr.debian.org/debian/ wheezy-updates main contrib non-free deb-src http://ftp.fr.debian.org/debian/ wheezy-updates main contrib non-free
Lancez maintenant une mise à jour et installez l’utilitaire htop en même temps :
apt-get update && apt-get upgrade && apt-get install htop
J’aime bien installer l’utilitaire htop car je le trouve plus explicite que l’utilitaire top nativement intégré, voici la comparaison en images :
Installation des composants du serveur :
On va d’abord installer MySql, RKHunter, Binutils, clamAv et 2-3 accessoires :
apt-get install mysql-client mysql-server openssl rkhunter binutils clamav clamav-daemon zoo unzip bzip2 arj nomarch lzop cabextract apt-listchanges libnet-ldap-perl libauthen-sasl-perl clamav-docs daemon libio-string-perl libio-socket-ssl-perl libnet-ident-perl zip libnet-dns-perl
Ensuite, on va installer Apache2 en mode Worker (multi-threadé), PHP5-FPM, FCGI, suExec, Pear, et mcrypt :
apt-get install apache2 apache2.2-common apache2-doc apache2-mpm-worker libapache2-mod-fastcgi php5-fpm php-apc apache2-utils libexpat1 ssl-cert php5 php5-common php5-gd php5-mysql php5-imap php5-cli php5-cgi libapache2-mod-fcgid apache2-suexec php-pear php-auth php5-mcrypt mcrypt php5-imagick imagemagick libruby libapache2-mod-ruby libapache2-mod-python php5-curl php5-intl php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
On va maintenant déclarer quelques modules à apache :
a2enmod actions alias fastcgi && a2enmod fcgid && a2enmod suexec rewrite ssl actions include && a2enmod dav_fs dav auth_digest && service apache2 restart
Ensuite, installez Pureftpd, bind9 et fail2ban :
apt-get install pure-ftpd-common pure-ftpd-mysql bind9 dnsutils fail2ban
Et pour finir, on installe Jailkit :
apt-get install build-essential autoconf automake1.9 libtool flex bison debhelper binutils-gold
cd /tmp wget http://olivier.sessink.nl/jailkit/jailkit-2.15.tar.gz tar xvfz jailkit-2.15.tar.gz cd jailkit-2.15 ./debian/rules binary
Vous pouvez maintenant installer le package .deb comme ceci :
cd .. dpkg -i jailkit_2.15-1_*.deb rm -rf jailkit-2.15*
Configuration des composants :
Si vous voulez un accès externe aux bases de données Mysql, vous devez modifier le fichier de configuration de Mysql :
nano /etc/mysql/my.cnf
Recherchez l’option bind-address à la ligne 47 et commentez la :
Avant :
bind-address = 127.0.0.1
Après :
#bind-address = 127.0.0.1
Sauvegardez en effectuant la combinaison de touches Ctrl+O et redémarrez Mysql :
service mysql restart
Maintenant, on télécharger le fichier de configuration pour php-fpm :
cd /etc/apache2/conf.d/ wget https://raw.githubusercontent.com/stylersnico/debian-scripts/master/php5-fpm.conf
Redémarrez les services associés :
service apache2 restart && service php5-fpm restart
Maintenant, on va modifier la configuration de notre serveur FTP :
nano /etc/default/pure-ftpd-common
Vérifiez que le démarrage soit en STANDALONE et que virtualchroot soit sur TRUE
[...] STANDALONE_OR_INETD=standalone [...] VIRTUALCHROOT=true [...]
On va maintenant autoriser les sessions par TLS pour plus de sécurité
echo 1 > /etc/pure-ftpd/conf/TLS mkdir -p /etc/ssl/private/
On va maintenant générer un certificat SSL dans le dossier que l’on vient de créer :
openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem
Changez les permissions du certificat
chmod 600 /etc/ssl/private/pure-ftpd.pem
Redémarrez le serveur FTP :
/etc/init.d/pure-ftpd restart
Pour que Fail2Ban surveille notre serveur FTP nous allons devoir créer un fichier de configuration spécifique :
nano /etc/fail2ban/jail.local
Remplissez le avec ceci :
[pureftpd] enabled = true port = ftp filter = pureftpd logpath = /var/log/syslog maxretry = 3
On va maintenant créer un filtre :
nano /etc/fail2ban/filter.d/pureftpd.conf
Et le remplir avec cela :
[Definition] failregex = .*pure-ftpd: \(.*@\) \[WARNING\] Authentication failed for user.* ignoreregex =
Ensuite, on va configurer APC :
nano /etc/php5/conf.d/apc.ini
Mettez ceci dans le fichier de configuration (vous pouvez ajuster la ram allouée au plugin) :
extension=apc.so [APC] apc.enabled=1 apc.shm_size=128M apc.stat=0
On va maintenant configurer Apache PageSpeed :
32 bits :
cd /tmp/ wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_i386.deb dpkg -i mod-pagespeed-*.deb apt-get -f install
64 bits :
cd /tmp/ wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_amd64.deb dpkg -i mod-pagespeed-*.deb apt-get -f install
Maintenant, redémarrez votre serveur pour qu’il soit propre avant l’installation d’ISP Config 3 :
reboot
Installation d’Isp Config 3 :
Pour avoir la dernière version stable, faites ces commandes :
cd /tmp wget http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz tar xfz ISPConfig-3-stable.tar.gz cd ispconfig3_install/install/
lancez maintenant cette commande
php -q install.php
Suivez les instructions de l’installateur, mais lorsqu’il vous laissera le choix entre l’installation standard et expert, choisissez expert
Select language (en,de) [en]:
Installation mode (standard,expert) [standard]: expert
Lorsqu’il vous demandera pour la configuration des mails, il faudra lui répondre non, car nous n’avons pas installé postfix.
Configure Mail (y,n) [Y]: n
Vous pouvez laisser tous les autres paramètres par défaut
Une fois l’installation terminée, redémarrez votre serveur avec la commande
reboot
Votre webpanel sera ensuite accessible à cette adresse : https://[VOTREIP]:8080/
Les identifiants par défaut sont : admin/admin
Si vous avez une erreur avec le protocole https de ce genre
107 (net::ERR_SSL_PROTOCOL_ERROR) or ssl_error_rx_record_too_long
Lancez cette commande
a2ensite default-ssl
Configuration d’un nom de domaine :
Rendez vous dans la section DNS :
Ajoutez une nouvelle zone à l’aide de l’assistant :
Voici un exemple de configuration :
Voilà, c’est tout ce qu’on doit faire pour ajouter un domaine à notre serveur.
Création d’un site :
Rendez vous dans la section site, et allez dans Website, ensuite cliquez sur Add new website :
Remplissez bien le domaine, et SURTOUT choisissez bien PHP-FPM dans la version de php !
Création d’une base de données :
Allez dans Site, database Users :
Cliquez sur
Remplissez les champs et cliquez sur Save :
Maintenant allez dans Databases et créez en une nouvelle :
Remplissez les informations demandées :
Création d’un accès FTP :
Allez dans Web Access, FTP-Accounts et cliquez sur Add new FTP-User :
Remplissez les informations demandées :
Tests de fonctionnements :
Maintenant, il faut vérifier que tout ce que l’on a fait marche correctement, on va commencer par le FTP :
Si c’est ok, on va tenter d’accéder au site que l’on à créer, par défaut on tombe sur cette page :
Maintenant, on va tester le fonctionnement de PHP, pour cela, créer un fichier php avec un phpinfo dedans :
Si vous avez tout suivi correctement, il devrait vous renvoyer un résultat avec Server API=FPM :
Liens utiles :
- PHP-FPM Tips and tricks
- Règles générales anti-ddos
- (D)Dos deflate on Debian 7
- Mod_Evasive | Module Anti-ddos pour apache 2
- Cacher la version d’apache
- Cacher la version de php
- Installer un Reverse Proxy Nginx par dessus tout ça
Et voilà, j’ai enfin fait ce tutoriel complet pour créer un serveur web de A à Z, j’espère qu’il vous plaît ! N’hésitez pas à me payer une bière si ça vous a été utile ou à laisser un commentaire 🙂
Bonjour, Tout d’abord, merci pour le tuto très complet. J’ai suivit le tuto est tout s’est bien passé du premier coup. Seulement, j’ai un problème de cafche il me semble. J’ai créer http;//mon-domaine.com/toto.php avec dedans un echo « toto » ; ça m’affiche bien « toto ». Par contre, si je change en echo « hello word » ; cela m’affiche toujours « toto ». PS: je suis novice en admin serveur alors, je me suis contenté de copier coller toutes les commande de ton tuto. Si quelqu’un peut, me dire pourquoi c’est ainsi, et comment y remedier, car pour l’instant, je ne sais plus mettre à jour… Voir plus »
Salut,
Bravo pour ce tuto. 🙂
Mais pourquoi télécharger ce fichier de config ci-dessus pour PHP-FPM? Il n’y en a pas par défaut? il n’est pas bien?
Salut David,
Il faut télécharger le fichier de config car par défaut il n’est pas présent 🙂
Yeah, merci à toi pour ce tuto.
J’ai juste eu un souci d’erreur 403. J’ai changé le fichier de conf dans site avaible et remplacer deny from all par allow from all. Va savoir pourquoi c’est pas automatique…
Et j’ai du faire /etc/init.d/pure-ftpd-mysql restart à la place de /etc/init.d/pure-ftpd restart
Mais sinon nikel, sachant que j’ai du suivre d’autres tutos avant, mais qui ne fonctionnaient pas comme je le voulais…
Sparttan
Bonsoir, suite à la configuration d’un serveur web via debian et ispconfig3 en ayant suivi cet excellent tuto ! J’ai un souci avec PDO et plus particulièrement avec les requêtes préparées ! As tu déjà rencontré le problème ? existe il une solution ? les erreur peuvent être du genre « insert value does not match column… » alors que tout ok (syntaxe, nombre de champs et valeur renseignées etc…) Y a t’il une astuce en utilisant php-fpm ? faut il compiler pdo d’une autre manière ? et ne peut être utilisé en tant que mode de php5 ? ça bug… Voir plus »
Bonsoir,
Je suis désolé mais je n’ai jamais rencontré ce problème.
Bonne chance
Bonjour,
moi j’ai un probleme de socket quand je fais « dpkg -i jailkit_2.15-1_*.deb »
Starting jailkit: jk_socketdversion 2.13, no sockets specified in configfile /etc/jailkit/jk_socketd.ini or on commandline, nothing to do, exiting
serais tu à quoi c’est dû ?
Hello,
Désolé, mais je n’ai jamais rencontré ce problème :/
Bonne chance
Bonjour,
J’ai exactement le même problème que toi.
As-tu résolu ton problème ?
Merci
Bonjour,
Merci pour le tuto, que j’ai tenté de suivre à la lettre.
Par contre, je n’arrive pas a accéder à phpmydamin (domaine.tld/phpmyadmin).
C’est normal ou j’ai oublié quelque chose ?
Merci
Jack
Bonsoir,
C’est normal, si tu suis cette procédure tu n’installe pas Phpmyadmin, tu ne peut donc pas y accéder.
Je n’aime pas installer des failles sur pattes sur mes serveurs après l’installation de phpmyadmin est un sujet assez documenté sur Internet, tu devrais facilement trouver ton bonheur 😉
Bonne chance 🙂
Nico
Ah ok, donc effectivement c’est logique ;-). Dans ce cas comment gérer ses bases ? As tu un autre moyen ? Comment le mettre en place ?
Merci
En ligne de commande ou avec l’excellent Navicat 😉
Prob de ftp qui ne part pas
Donc pas de ftp ni de sites
merci pour le retour et le bon boulot
Pour la bière pas de probs si tout marche
Bonjour,
Désolé, mais un FTP qui ne part pas ça ne veut rien dire ?
Le ftp fonctionne maintenant. Je n’avais pas mis user comme il faut.
Mais le site ne se propage pas.
Je te remercie de ta réponse de ce jour et j’ai pour réponse sur apache » NameVirtualHost 94.23.xxx.xxx:443 has no VirtualHosts »
si tu as deux secondes , merci d’avance.
Je suis nvx sur ispconfig. Je faisais ca à l’ancienne avant.
Je te conseille de bien relire les derniers points de cette procédure car tout ce que j’ai écrit marche et à mon avis tu a du aller trop vite sur quelques étapes.
Le message NameVirtualHost 94.23.xxx.xx:443 has no VirtualHosts n’est pas nécessairement une erreur si tu n’a aucun site accessible uniquement par ton adresse ip.
Au passage j’ai masqué ton adresse ip dans le commentaire précédent.
Merci pour l’ip. (comment eviter?)
ton tuto suivi à la lettre. Tout marche sauf que me site ne fonctionne pas. Il fonctionnait (ovh) quand je le faisais en virtualhost (main) et les zones aussi.
Je me demande si cela n’est pas mon soyoustart et les dns secondaires qui me bloque
Pour éviter l’erreur il faut créer un virtualhost pour l’ip il me semble, mais honnêtement je n’ai jamais cherché à m’en débarrasser.
Ensuite, quand tu as créer ton domaine dans ISPConfig tu as mis les DNS du domaine ou de ton serveur SYS ?
Il faut bien mettre les DNS du domaine et il faut mettre uniquement le domaine et pas http://www.domaine.com par exemple.
:443 has no VirtualHosts
????
? Je ne connait pas la modification apportée mais Apache la gère mal. Ton site marche sinon ?
Merci et ouf!!
Le prob était ovh et la liaison avec le sous domaine owvercheck.
Il faut garder les dns de chez ovh
après cela roule.
J’apprécie beaucoup tes retours. on se sent moins seul
😉
Bonjour,
une question bete, pourquoi dans le nom d utilisateur on est obligé d avoir « default ».
ca fait que mon test s appel « defaultest », ca fait crado, y a pas moyens de l enlever?
sur ton tuto, pourquoi ne pas avoir intégré les produits tomcat?
apres ce que je trouve dommage, c est que tu aies si vite passé l installation de l isp config.
le reste est clair et efficace. ca me convient. merci
Hello, Si tu ne veut pas avoir un default devant ton utilisateur il faut créer un client 😉 Ensuite ce qui fait crado c’est d’utiliser encore du java sur des sites web en 2014, un peu comme avec le flash en fait, mais cela ne reflète que mon avis perso et c’est la raison pour laquelle je ne couvrirais surement jamais tomcat sur ce site 🙂 Après l’installation d’Ispconfig en soit c’est 4 lignes de commande. La configuration est un peu plus complexe mais c’est très bien documenté sur le site officiel, ce que j’ai fait c’est juste un genre… Voir plus »
1/ En gros si on prend l’exemple de ce tuto, pour aller voir le site il faudrait taper:
http://lemetal.net/web/index.html ?
(en considérant que les dns sont bien configurés..)
2/ Sinon oui, le ftp fonctionne mieux avec l’ajout de defaultadmin dans le shell.
1) Alors non, pour visiter le site il suffit de rentrer le nom de domaine tout simplement donc -> http://lemetal.net ou http://www.lemetal.net
Par exemple, pour visiter The Abyss Project tu n’a pas besoin de mettre le /web ou le index.php dans l’url 😉
2) Étrange, mais c’est bon à savoir, merci pour ton retour 😉
Re:: « Si c’est ok, on va tenter d’accéder au site que l’on à créer, par défaut on tombe sur cette page : »……….
Enfin, je voudrais savoir quelle url taper pour attérir sur la page index.html (par default)
Merci
Alors pour répondre à toute tes questions, Pour accéder à ton site, il faut un nom de domaine que tu a configurer ET dans le site ET dans la section DNS d’ISPConfig comme expliquer dans l’article. Pour créer un utilisateur FTP, il faut aller dans Sites -> Ajouter un nouvel utilisateur FTP. L’erreur 530 est étrange, je ne l’ai jamais rencontrée mais beaucoup de forum Linux en font l’écho. Le problème est-il résolu avec l’ajout d’un utilisateur shell ? Ensuite, il n’est pas possible de configurer le service Mail après installation de ISPConfig. Cette opération doit absolument être effectuée avant… Voir plus »