Installation d’Apache, MySQL et PHP (LAMP) + phpMyAdmin – Debian, Raspberry

installation lamp apache2 mysql mariadb php8.0 phpmyadmin

Dans cet article nous allons voir ensemble comment installer LAMP pour monter mon serveur web. LAMP correspond à Linux Apache MySQL/MariaDB, PHP (ou Pearl, Python).

Installation d’Apache2

On installe apache2 avec le paquet apache2-utils, qui ajoute quelques fonctionnalités comme la possibilité d’utiliser .htpasswd

apt install apache2 apache2-utils -y

On va maintenant activer quelques mod indispensables.
rewrite permet de réécrire des urls. Utilisé pour les redirections
ssl sert à gérer les certificats SSL et donc a avoir le https
deflate gère la compression des fichiers, notamment avec GZIP
brolti est un système de compression encore plus performant que GZIP. C’est un nouveau standard (disponible nativement depuis Apache 2.4.26)
headers permet d’agir sur les headers https
http2 permet à notre serveur Apache de répondre aux requêtes avec http2, pour améliorer les performances

a2enmod rewrite
a2enmod ssl
a2enmod deflate
a2enmod brotli
a2enmod headers
a2enmod http2
systemctl restart apache2

Par mesure de sécurité, nous allons ajouter ces deux lignes dans le fichier de configuration d’Apache.


ServerSignature Off permet de cacher la version d’Apache sur les pages d’erreur.
ServerTokens Prod permet de cacher la version d’Apache dans le header http.

Pourquoi cacher le numéro de version ? Le numéro de version peut faciliter la tâche à un pirate. En connaissant la version utilisée, il lui est plus facile de chercher des vulnérabilités. Ça n’arrêtera pas un pirate déterminé, mais les crawlers malveillants ne devraient pas s’arrêter sur vous

echo "ServerSignature Off" >> /etc/apache2/apache2.conf
echo "ServerTokens Prod" >> /etc/apache2/apache2.conf
systemctl restart apache2

En allant sur l’adresse IP de votre serveur depuis votre navigateur vous devriez obtenir ce résultat

page par défaut apache2 sur debian

On peut maintenant passer à php.

Installation de PHP8.0

Si vous utilisez une nouvelle installation de Debian vous aurez besoin de quelques outils (première ligne). Il est possible que certains soient déjà installés sur votre machine.

On installe ensuite la clé GPG pour le repo de Ondřej Surý, (c’est grâce à lui que nous avons des versions de php récentes et à jour sur Debian, notamment), puis le repo et on met à jour la liste des packets.

apt install apt-transport-https lsb-release ca-certificates curl wget -y
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
apt update

php7.4 est la version la plus récente disponible sur les repo de Debian, sauf que php7.4 n’est plus maintenu et recevra seulement des mises à jour de sécurité jusqu’au 28 novembre 2022. Grace à Ondřej, on peut passer à la version 8.0. On installe donc la version 8.0 avec quelques extensions.

sudo apt install apache2-bin libapache2-mod-php8.0 php8.0-{mysql,cli,common,imap,ldap,xml,fpm,curl,mbstring,zip}

Installation de PHP8.0-FPM (optionnel)

Pour faire simple, php-fpm permet de gagner en performances, voici donc comment l’activer. Je vous invite à vous renseigner sur le sujet si vous hésitez ou si vous êtes simplement curieux.

a2enmod proxy_fcgi setenvif
a2enconf php8.0-fpm
systemctl restart apache2

Pour que le mod HTTP2 fonctionne correctement avec PHP-FPM:

a2dismod php8.0
a2dismod mpm_prefork
a2enmod mpm_event
systemctl restart apache2

Pour vérifier que php-fpm est bien activé

echo "<?php phpinfo(); ?>" >> /var/www/html/info.php

Ensuite ip_serveur/info.php.
Si la ligne 4, Server API affiche FPM/FastCGI c’est bon pour fpm.
Si elle affiche Apache 2 Handler vous n’utilisez pas fpm
Si la page affiche le code, php n’est pas activé, a2enmod php8.0 pour activer le mod php classique.

Installation MySQL/MariaDB

MariaDB est un fork communautaire de MySQL open source, sous licence GPL, à la différence de MySQL qui est un logiciel propriétaire de chez Oracle.

apt install mariadb-server -y
mariadb-secure-installation

Ici, entrez le mot de passe de votre utilisateur root. Une fois le mot de passe entré, vous pouvez répondre y à toutes les question. À la question est Change the root password? [Y/n], répondez y et remettez votre mot de passe. Il arrive parfois que sans ça, vous ne puissiez pas vous connecter avec phpMyAdmin

C’est tout pour MariaDB.

Installation de phpMyAdmin

wget https://files.phpmyadmin.net/phpMyAdmin/5.1.2/phpMyAdmin-5.1.2-all-languages.tar.xz
tar xvf phpMyAdmin-5.1.2-all-languages.tar.xz
mv phpMyAdmin-*/ /usr/share/phpmyadmin
mkdir -p /var/lib/phpmyadmin/tmp
chown -R www-data:www-data /var/lib/phpmyadmin
mkdir /etc/phpmyadmin/
cp /usr/share/phpmyadmin/config.sample.inc.php  /usr/share/phpmyadmin/config.inc.php
nano /usr/share/phpmyadmin/config.inc.php

A ce stade nous devons fournir une clé secrète Blowfish, cliquez sur ce lien pour en récupérer une, générée aléatoirement (vous pouvez actualiser pour changer de clé) et copiez la entre les quotes.

$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

Maintenant on indique l’emplacement des fichiers tmp en ajoutant cette ligne

$cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';

Et enfin, on crée le fichier de conf pour Apache

nano /etc/apache2/conf-available/phpmyadmin.conf
Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php

    <IfModule mod_php5.c>
        <IfModule mod_mime.c>
            AddType application/x-httpd-php .php
        </IfModule>
        <FilesMatch ".+\.php$">
            SetHandler application/x-httpd-php
        </FilesMatch>

        php_value include_path .
        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
        php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
        php_admin_value mbstring.func_overload 0
    </IfModule>
    <IfModule mod_php.c>
        <IfModule mod_mime.c>
            AddType application/x-httpd-php .php
        </IfModule>
        <FilesMatch ".+\.php$">
            SetHandler application/x-httpd-php
        </FilesMatch>

        php_value include_path .
        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
        php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
        php_admin_value mbstring.func_overload 0
    </IfModule>

</Directory>

# Authorize for setup
<Directory /usr/share/phpmyadmin/setup>
    <IfModule mod_authz_core.c>
        <IfModule mod_authn_file.c>
            AuthType Basic
            AuthName "phpMyAdmin Setup"
            AuthUserFile /etc/phpmyadmin/htpasswd.setup
        </IfModule>
        Require valid-user
    </IfModule>
</Directory>

# Disallow web access to directories that don't need it
<Directory /usr/share/phpmyadmin/templates>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/libraries>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
    Require all denied
</Directory>

On active la configuration et on relance Apache.

a2enconf phpmyadmin.conf
systemctl restart apache2

Il est maintenant possible de se rendre sur ip_server/phpmyadmin

Vous pouvez changer Alias /phpmyadmin et mettre ce que vous souhaitez après le slash. C’est vivement conseillé si vous rendez cette page disponible directement depuis internet (si c’est le cas, mettez un .htpasswd).

Il est aussi possible d’exiger une IP précise, ou une plage d’IP pour accéder à la page, en ajoutant

Require ip 127.0.0.1 192.168.18.0/24

Et voilà la page d’accueil de phpMyAdmin. Vous pouvez vous sur la droite les caractéristiques sur serveurs

page d'accueil de phpmyadmin

Vous êtes maintenant fin prêt à héberger votre site internet depuis votre nouvelle installation VPS ou Raspberry !

Si ce n’est pas déjà fait, je vous conseille vivement d’aller mettre en place la connexion par clé SSH ! Je reviens bientôt avec la mise en place du certificat SSL pour le https pour votre site internet et comment rendre son Raspberry accessible depuis internet !

4.5/5 - (33 votes)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Articles de la même catégorie

Retour haut de page