Admin/Dev

11
Août
2020

Installer un serveur web personnel - Partie 3 - Installation d'Apache et de PHP via Homebrew

Publié par sky

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.

 
Sommaire de la série
 
 
Commentaires
Commentaire de Reg le 2 Avril 2022 à 21:15

Salut Sky, Super, ton article ! Je suis développeur PHP. Jusqu'ici, je développent local pais sur des serveurs d'entreprise, mais là j'ai besoin d'installer un serveur Web Apache, php et mariaDB sur mon mac OS. J'ai installé homebrew, essayer les installations php7.4, mariaDB10.5, et httpd, mais je suis perdu. Voici ce que j'ai quand je lance "brew services list" :
httpd started regisLeGall ~/Library/LaunchAgents/homebrew.mxcl.httpd.plist
mariadb@10.5 none
php none
php@7.4 none
Je vois bien que l'installation de mariaDb et php n'est pas terminé, mais ne sais pas quoi faire. Si tu peux me donner un coup de main...
A+

 
Commentaire de sky le 3 Avril 2022 à 00:39

Salut Reg, ravi que mon article soit utile. PHP n'est pas lancé en tant que service avec httpd. Donc de ce côté, c'est OK.
Pour MariaDb, as tu essayé de démarrer le service ?
brew services start mariadb

 

 

Poster un commentaire
En postant sur skymac.org, je m'engage à être courtois et à ce que mon message soit pertinent avec le sujet de l'article.
En outre, j'accepte, sans condition, que mon message soit refusé et supprimé si ces règles ne sont pas appliquées.
Ouvrir le panneau de gestion des cookies
Fermer le panneau
Ce site utilise des cookies pour assurer son bon fonctionnement. Il utilise aussi des cookies issues de services tiers permettant de proposer des fonctionnalités avancées. À tout moment, vous pouvez choisir quels services vous souhaitez activer ou refuser, afin de retirer votre consentement quant à l'utilisation des cookies.
 
Personnalisation des services
Vous êtes libre de choisir quels services vous souhaitez activer. En autorisant ces services tiers, vous acceptez le dépôt et la lecture de cookies et l'utilisation de technologies de suivi nécessaires à leur bon fonctionnement. En retirant votre consentement pour certains de ces services, certaines fonctionnalités du site peuvent ne plus fonctionner.
Navigation du site  En savoir plus
Le site écrit un cookie de session permettant son bon fonctionnement et aidant à la navigation. Il ne peut être désactivé.
Utilisation : 1 cookie, enregistre l'identifiant de la session.
Durée de vie : Le cookie est présent pendant toute la session sur le site. Il devient obsolète après 24 minutes d'inactivité.
Obligatoire
Popup Média
Afficher des vidéos depuis Yoube ou Dailymotion.
 
Tout accepter Tout refuser Gérer