Ispconfig avec Apache MPM-Worker, PHP5.6-FPM et MariaDB sur Debian 7

1/52/53/54/55/5 (2 votes, moyenne: 3,00 sur 5)
Loading...
I

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.


ultimate-web-server

Bonjour à tous,

 

Avec l’arrivée de PHP 5.6 dans les dépôts DotDeb et les nouvelles VM sandbox de RunAbove, j’en profite pour vous faire un guide mis à jour sur l’installation d’un serveur Web Hautes-Performances.

 

Je précise que ce guide est simplifié car je n’y intègre plus la partie Nginx trop compliquée pour pas mal de monde à priori. Cela fera l’objet d’un article annexe 🙂

 

Au programme :

  1. Installation des sources
  2. Installation des composants pour notre serveur
  3. Configuration des diffèrents composants
  4. Installation de Isp Config 3
  5. Configuration d’un nom de domaine
  6. Création d’un site web
  7. Création d’une base de données
  8. Création d’un accès FTP
  9. Fine Tuning
  10. Sécuriser le serveur
  11. Intégration de Memcached
  12. Liens utiles

 

Les composants de notre serveur :

  • Apache mpm worker 2.x ( Serveur Apache en version multi-thread )
  • MariaDB 10.x ( Serveur de base de données )
  • Php5-fpm 5.6.x ( pour traiter les requêtes php avec apache )
  • Apache Page Speed ( module de concaténation et de mise en cache pour apache )

 

Installation des sources :

On va commencer par éditer la liste des sources pour le gestionnaire de paquets APT :

rm /etc/apt/sources.list
nano /etc/apt/sources.list

 

Copiez les sources suivantes dans le fichier  :

deb http://packages.dotdeb.org wheezy all
deb-src http://packages.dotdeb.org wheezy all
deb http://packages.dotdeb.org wheezy-php56 all
deb-src http://packages.dotdeb.org wheezy-php56 all
deb http://ftp.igh.cnrs.fr/pub/mariadb/repo/10.0/debian wheezy main
deb-src http://ftp.igh.cnrs.fr/pub/mariadb/repo/10.0/debian wheezy main
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 les utilitaires htop et python-software-properties en même temps :

apt-get update && apt-get upgrade && apt-get install htop python-software-properties

 

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 :

TOP
TOP
HTOP
HTOP

 

 

Maintenant on va ajouter les clés de nos repository personnalisés :

cd /tmp
wget http://www.dotdeb.org/dotdeb.gpg
apt-key add dotdeb.gpg
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
add-apt-repository 'deb http://ftp.igh.cnrs.fr/pub/mariadb/repo/10.0/debian wheezy main'

 

Pour finir, mettez à jour vos listes avec cette commande une fois de plus :

apt-get update

 

 

Installation des composants du serveur :

On va d’abord installer MariaDB, RKHunter, Binutils, clamAv et 2-3 accessoires :

apt-get install mariadb-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 apache2-utils libexpat1 ssl-cert php5 php5-common php5-gd php5-mysqlnd 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-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 MariaDB, vous devez modifier le fichier de configuration de MariaDB :

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 MariaDB:

service mysql restart

 

Maintenant, téléchargez mon 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:4096 -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-mysql 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 =

 

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

créer-un-serveur-web-debian-7-x25

 

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

 

Maintenant, redémarrez Apache :

service apache2 restart

 

Configuration d’un nom de domaine :

Rendez vous dans la section DNS :

créer-un-serveur-web-debian-7-x26

 

Ajoutez une nouvelle zone à l’aide de l’assistant :

créer-un-serveur-web-debian-7-x27

 

 

Voici un exemple de configuration :

créer-un-serveur-web-debian-7-x28

 

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 :

créer-un-serveur-web-debian-7-x33

 

Remplissez bien le domaine, et SURTOUT choisissez bien PHP-FPM dans la version de php !

créer-un-serveur-web-debian-7-x34

 

 

Création d’une base de données :

Allez dans Site, database Users :

créer-un-serveur-web-debian-7-x29

 

Cliquez sur créer-un-serveur-web-debian-7-x30

 

Remplissez les champs et cliquez sur Save :

créer-un-serveur-web-debian-7-x31

 

 

Maintenant allez dans Databases et créez en une nouvelle :

créer-un-serveur-web-debian-7-x32

 

Remplissez les informations demandées :

créer-un-serveur-web-debian-7-x35

 

 

Création d’un accès FTP :

Allez dans Web Access, FTP-Accounts et cliquez sur Add new FTP-User :

créer-un-serveur-web-debian-7-x37

 

Remplissez les informations demandées :

créer-un-serveur-web-debian-7-x38

 

 

Fine Tuning :

Si vous en êtes arriver là c’est déjà pas mal, maintenant on va modifier la configuration de PHP-FPM pour améliorer les performances :

Éditez la configuration de php-fpm sur votre site pour qu’elle corresponde à ceci au niveaux des valeurs PHP-FPM :

vps-ovh-06

 

Voilà ce que ça donne en texte dans le fichier de configuration :

pm = ondemand
pm.max_children = 100
pm.process_idle_timeout = 10s;
pm.max_requests = 500

 

Maintenant, redémarrez les services associés :

service php5-fpm restart

 

Maintenant on va modifier la configuration d’Apache PageSpeed :

nano /etc/apache2/mods-available/pagespeed.conf

 

Cherchez les ligne suivante et dé-commentez les pour interdire la retouche des images par Apache PageSpeed, c’est long et inutile :

ModPagespeedDisableFilters rewrite_images
ModPagespeedForbidFilters rewrite_images

 

Par contre, on peut activer la minification des fichiers javascript et CSS en dé-commentant les lignes suivantes :

 ModPagespeedEnableFilters rewrite_javascript,rewrite_css
 ModPagespeedEnableFilters collapse_whitespace,elide_attributes

 

Et on demande à préserver les urls avec en dé-commentant les lignes suivantes :

 ModPagespeedJsPreserveURLs on
 ModPagespeedImagePreserveURLs on
 ModPagespeedCssPreserveURLs on

 

Vous pouvez aussi modifier l’header qui renvoie par défaut la version de pagespeed en rajoutant cette ligne dans la configuration :

ModPagespeedXHeaderValue "Hidden"

 

Maintenant redémarrez apache :

service apache2 restart

 

Sécuriser le serveur :

Il n’y a pas de secrets, mettez des mots de passe fort partout !

En plus de ça, voici 2-3 astuces pour sécuriser votre serveur.

On va commencer par utiliser l’assistance de sécurisation de MariaDB avec la commande suivante :

mysql_secure_installation

 

Ensuite, vous pouvez regarder cet article pour blinder votre accès SSH !

Pour le reste je vous laisse jeter un oeil au liens utiles 😉

 

Intégration de Memcached :

Pour finir en beauté, on va lier tous les services web de notre serveur à Memcached pour des performances maximales !

Pour cela, je vous laisse consulter mon article sur l’installation de Memcached, il y a tout ce dont vous avez besoin 😉

Cacher les versions d’apache et PHP:

Pour cacher la version d’Apache, ouvrez votre fichier de configuration :

nano /etc/apache2/apache2.conf

 

Et rajoutez ces 2 lignes à la fin :

ServerTokens ProductOnly
ServerSignature Off

 

Maintenant, redémarrez Apache :

service apache2 restart

 

Pour php, ouvrez votre php.ini :

nano /etc/php5/fpm/php.ini

 

Recherchez la variable suivante et mettez la sur off :

expose_php = Off

 

Redémarrez php :

service php5-fpm restart

 

Maintenant les versions logicielles de votre serveur ne seront plus accessibles au monde 😉

root@xxx:/# curl -I http://www.abyssproject.net
HTTP/1.1 200 OK
Server: Apache
Date: Wed, 20 Aug 2014 08:14:43 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Pingback: http://www.abyssproject.net/xmlrpc.php
Link: <http://wp.me/P2RtI7-sB>; rel=shortlink
X-Mod-Pagespeed: Web Server By Nicolas Simond <http://www.nicolas-simond.com>
Vary: Accept-Encoding
Cache-Control: max-age=0, no-cache

 

N’hésitez pas à me payer une bière si ça vous a été utile ou à laisser un commentaire 🙂

N’oubliez pas ! Redémarrez votre serveur à la fin de l’installation pour partir sur quelque chose de propre 😉

 

A propos de l'auteur

Nicolas Simond

Ingénieur Systèmes et Réseaux et guitariste hard rock et metal à mes heures perdues.
Je suis le créateur et l'unique rédacteur d'Abyss Project, c'est ici que je note la plupart de mes procédures et quelques divagations.

Si vous l'article vous a aidé, pensez à me payer un café :)

Subscribe
Notify of
guest

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

7 Commentaires
Plus récents
Plus anciens Populaires
Inline Feedbacks
View all comments
Jean
Jean
9 années plus tôt

Merci pour ce tuto. Vivement un tuto sur un serveur de messagerie il me manque plus que ça. ^^

Jean
Jean
Reply to  Nicolas Simond
9 années plus tôt

Je viens de reussir à l’installer ^^ avec dovecot et postfix. et quelque reglage config smtp et ça marche du tonnerre. Mais j’aimerais quand même voir un tuto venant de toi pour comparer avec ce que j’ai fait.

Thomas
Thomas
Reply to  Nicolas Simond
9 années plus tôt

Bonjour Jean,

Comment à tu fais pour installer dovecot et postfix avec MariaDB? Tu aurais un peitit tuto?
Moi j’était partie sur
« apt-get install postfix postfix-mysql postfix-doc getmail4 binutils dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-sieve sudo »

et

cp /etc/postfix/master.cf /etc/postfix/master.cf.old
nano /etc/postfix/master.cf

et pour finir réglage smtps

submission inet n – – – – smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
smtps inet n – – – – smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING

et redémarrage bien sûr de notre ami postif.

/etc/init.d/postfix restart

C’est les bonne manip?

mehdi
9 années plus tôt

Bonsoir,
je salut votre travail clair et precis et -plus important- d’une grande utilité 🙂
Bonne continuation.