Installer un serveur web personnel - Partie 3 - Installation d'Apache et de PHP via Homebrew
Après avoir installé MariaDb séparément depuis Homebrew, voici enfin un petit guide pour installer et configurer Apache httpd et PHP via le gestionnaire de paquets.
Nous avions vu qu'il est possible d'utiliser les deux logiciels dans leurs versions pré-installées avec macOS. Cependant, leur configuration via Brew dispose de plusieurs avantage. Cela permet d'avoir une version des logiciels toujours à jour. Dans le cas de PHP, de choisir la version du language que l'on souhaite. Et enfin, et le plus important selon moi, cela permet d'ajouter bien plus facilement des extensions qui ne sont pas prises en charge par défaut, par les versions installées de base sur macOS.
1/ Pré-requis
Par défaut, le serveur httpd installé par Homebrew utilise un port différent de celui de l'installation standard de macOS. Ainsi il est possible d'utiliser les deux en même temps.
L'article, ici présent, montre comment remplacer le serveur httpd installé par Apple, par celui de Brew. Pour cela, il faudra désactiver totalement le premier, afin qu'il n'y ait pas de conflicts. A faire, si vous l'aviez activé, seulement.
sudo /usr/sbin/apachectl stop
sudo launchctl unload -wF /System/Library/LaunchDaemons/org.apache.httpd.plist
2/ Installation d'Apache httpd
Commençons par l'installation d'Apache httpd.
brew install httpd
L'installation devrait se faire sans soucis.
==> Downloading https://homebrew.bintray.com/bottles/httpd-2.4.43.mojave.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/628617d2cc60534dc6cb78cc971de32b9724757498f194dc900ad5e5d1e6f56a?response-content-disposition=at
######################################################################## 100.0%
==> Pouring httpd-2.4.43.mojave.bottle.tar.gz
==> Caveats
DocumentRoot is /usr/local/var/www.
The default ports have been set in /usr/local/etc/httpd/httpd.conf to 8080 and in
/usr/local/etc/httpd/extra/httpd-ssl.conf to 8443 so that httpd can run without sudo.
To have launchd start httpd now and restart at login:
brew services start httpd
Or, if you don't want/need a background service you can just run:
apachectl start
==> Summary
🺠/usr/local/Cellar/httpd/2.4.43: 1,658 files, 27.4MB
Les données d'installation sont très importantes, car elles indiquent les emplacements d'une part le chemin vers la racine web du serveur, mais surtout, le chemin vers les fichiers de configuration.
Si, après l'installation, vous ne vous souvenez plus de ces informations. Il suffit d'afficher les informations du paquet pour les revoir.
brew info httpd
3/ Installation de PHP
L'installation de PHP n'est pas plus complexe, cependant, il faudra choisir la version que vous souhaitez. Vous pouvez aussi choisir d'installer plusieurs versions et de switcher de l'une à l'autre quand vous le désirez. Mais dans un premier temps, n'installez que la version que vous favorisez, afin de s'assurer du bon fonctionnement de l'installation.
En tapant la commande
brew search php
vous obtiendrez les paquets relatifs à PHP.
==> Formulae
brew-php-switcher php-cs-fixer phplint phpstan
php ✔ php@7.2 phpmd phpunit
php-code-sniffer php@7.3 phpmyadmin
==> Casks
eclipse-php netbeans-php phpstorm
Vous verrez qu'il y a plusieurs versions de PHP. Le paquet nommé "PHP" tout simplement, installera la dernière version du language. A l'heure ou j'écris ces lignes, il s'agit de la version 7.4, que nous pouvons vérifier avec la commande
brew info php
dont la réponse est
php: stable 7.4.8 (bottled), HEAD
General-purpose scripting language
https://www.php.net/
/usr/local/Cellar/php/7.4.8_1 (497 files, 72.2MB) *
Poured from bottle on 2020-08-03 at 15:31:47
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/php.rb
License: PHP-3.01
==> Dependencies
Build: httpd ✔, pkg-config ✔
Required: apr ✔, apr-util ✔, argon2 ✔, aspell ✔, autoconf ✔, curl-openssl ✔, freetds ✔, gd ✔, gettext ✔, glib ✔, gmp ✔, icu4c ✔, krb5 ✔, libffi ✔, libpq ✔, libsodium ✔, libzip ✔, oniguruma ✔, openldap ✔, openssl@1.1 ✔, pcre2 ✔, sqlite ✔, tidy-html5 ✔, unixodbc ✔
==> Options
--HEAD
Install HEAD version
==> Caveats
To enable PHP in Apache add the following to httpd.conf and restart Apache:
LoadModule php7_module /usr/local/opt/php/lib/httpd/modules/libphp7.so
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
Finally, check DirectoryIndex includes index.php
DirectoryIndex index.php index.html
The php.ini and php-fpm.ini file can be found in:
/usr/local/etc/php/7.4/
To have launchd start php now and restart at login:
brew services start php
Or, if you don't want/need a background service you can just run:
php-fpm
==> Analytics
install: 58,192 (30 days), 152,919 (90 days), 543,331 (365 days)
install-on-request: 56,621 (30 days), 146,880 (90 days), 509,079 (365 days)
build-error: 0 (30 days)
Il s'agit donc bien de la version 7.4.8.
Vous pouvez faire de même avec les paquets php@7.2 ou php@7.3 si vous préférez avoir l'une ou l'autre des deux versions.
Installez la version souhaitée, ici la dernière
brew install php
L'installation de PHP est un peu plus longue, car de nombreuses dépendances sont aussi installées.
Encore une fois, les informations post installation indique quelques informations bien pratiques. Ainsi, cela indique la ligne à insérer dans le configuration d'Apache httpd pour activer PHP mais aussi où se trouve le fichier de configuration de PHP.
4/ Configuration d'Apache httpd
Dans voici les éléments que je modifie dans le fichier de configuration d'httpd.
Vous pouvez éditer ce fichier avec une application en ligne de commande telle que nano ou emacs.
nano /usr/local/etc/httpd/httpd.conf
Dans le doute, vous pouvez faire une copie de sauvegarde du fichier avant de l'éditer.
cp /usr/local/etc/httpd/httpd.conf /usr/local/etc/httpd/httpd.conf.bak
Les numéros de ligne, indiqués dans l'article, dépendent de la version du fichier et des modifications que vous aurez fait dessus. Si la valeur n'est pas présente à la ligne indiquée, il suffit de la chercher dans le fichier.
Définition du port utilisé pour le service
Voici la valeur d'origine (ligne 52)
Listen 8080
Comme je vous le disais, httpd via Brew utilise un autre port, afin de ne pas rentrer en conflict avec httpd d'Apple. Ayant désactivé le second, je peux indiquer le port standard pour le protocole http dans la configuration.
Listen 80
Activation des extensions
Entre les lignes 66 et 182, se trouve toute la configuration des extensions. Les lignes précédées d'un # sont désactivées. Vous pouvez réactiver les extensions dont vous avez besoin en retirant le #.
Par exemple, pour activer le module rewrite, la ligne
#LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
devient
LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
Je vous conseille de n'activer ou de désactiver que les extensions dont vous êtes sûrs. Encore plus dans un premier temps, pour être sur que la configuration de base fonctionne.
Une fois vos modules sélectionnés, il faudra ajouter une ligne pour activer PHP.
Pour cela nous allons tout simplement prendre l'indication donnée lors de l'installation du language et la placer en bout de liste
LoadModule php7_module /usr/local/opt/php/lib/httpd/modules/libphp7.so
Définition de la racine du serveur
Voici la valeur d'origine (ligne 249)
DocumentRoot "/usr/local/var/www"
<Directory "/usr/local/var/www">
Vous pouvez y mettre le chemin que vous souhaitez, pour l'article, je vais le définir sur le même chemin que celui indiqué dans la configuration par défaut de macOS
DocumentRoot "/Library/WebServer"
<Directory "/Library/WebServer">
Définition des index de dossiers
Voici la valeur d'origine (ligne 283)
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
Prise en charge des fichiers PHP en tant que tel
Pour que les fichiers PHP ne soient pas lus comme de simples fichiers il faut ajouter la directive suivante.
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
Enregistrez le fichier et quittez.
Pour vérifier votre configuration, tapez
apachectl configtest
Si le résultat ne se termine pas, par
Syntax OK
il faudra revoir votre fichier de configuration, une erreur devrait être indiquée.
5/ Lancement d'Apache httpd
Comme indiqué lors de l'installation, il y a deux possibilités pour lancer le serveur web. La première permet de le lancer temporairement
apachectl start
mais pour ma part je préfère le lancer en tant que service qui sera disponible à chaque lancement du Mac
brew services start httpd
Votre serveur web devrait être fonctionnel. Pour vérifier, vous pouvez commencer par demander à Brew, si vous avez lancé httpd en tant que service
brew services list
Vous devriez obtenir quelque chose tel que
httpd started sky /Users/sky/Library/LaunchAgents/homebrew.mxcl.httpd.plist
mariadb started sky /Users/sky/Library/LaunchAgents/homebrew.mxcl.mariadb.plist
netdata stopped
php stopped
unbound stopped
Si vous aviez installé MariaDb via Homebrew, il devrait être actif aussi. Vous pouvez voir que PHP est présent aussi, mais il n'est pas nécessaire qu'il soit activé en tant que service pour fonctionner avec Apache httpd.
Le second test est tout simplement d'insérer un fichier php à la racine de votre serveur web et d'y accéder via votre navigateur web.
6/ Bonus : Activation du SSL
Si vous avez besoin de HTTPS, vous pouvez l'activer sur le serveur web installé via Brew.
Pour cela vous devrez activer, dans le fichier de configuration d'httpd, l'extension SSL (ligne 151)
LoadModule ssl_module lib/httpd/modules/mod_ssl.so
Puis, si besoin, dans le fichier dédié au SSL
nano /usr/local/etc/httpd/extra/httpd-ssl.conf
d'indiquer le port par défaut du https
Listen 443
Vous aurez besoin de relancer le serveur.
brew services restart httpd
7/ Bonus : Sélecteur de PHP
Comme indiqué au chapitre 3, vous pouvez installer plusieurs versions de PHP simultanément. Il existe, toujours via Brew, un script permettant de switcher automatiquement de version de PHP. Le script s'occupe de faire les modifications dans Brew et dans la configuration d'Apache httpd pour vous.
brew install brew-php-switcher
pour savoir comment il fonctionne, il suffit de le lancer sans paramètre
brew-php-switcher
pour obtenir son aide
usage: brew-php-switcher version [-s|-s=*] [-c=*]
version one of: 5.6,7.0,7.1,7.2,7.3,7.4
-s skip change of mod_php on apache
-s=* skip change of mod_php on apache or valet restart i.e (apache|valet,apache|valet)
-c=* switch a specific config (apache|valet,apache|valet
Il suffit donc de lancer la commande avec la version choisie, par exemple.
brew-php-switcher 7.2
A noter qu'il faut les différentes versions soient installées avant, via Brew pour pouvoir les activer. Certaines versions (5.6 et 7.0) ne sont désormais plus disponibles.
- Installer un serveur web personnel - Partie 1 - Installation standard de macOS
- Installer un serveur web personnel - Partie 2 - Installation de MariaDB via Homebrew
- Installer un serveur web personnel - Partie 2b - Configurer une socket entre MariaDB et PHP
- Installer un serveur web personnel - Partie 3 - Installation d'Apache et de PHP via Homebrew
- Installer un serveur web personnel - Partie 2c - Corriger l'ERROR 23 (HY000) sur MariaDB
- Installer un serveur web personnel - Partie 3b - Configuration des vhosts sur Apache httpd via Homebrew