Configurer un serveur Apache avec Homebrew sur macOS peut améliorer considérablement les capacités de développement et de test en local. Cet article vous guide pas à pas pour installer Apache, effectuer les ajustements de configuration requis et activer votre environnement pour les tests locaux de sites web. Il est important de noter que cette méthode n'interfère pas avec la version système d'Apache, rendue complexe par Apple. Avant de se lancer dans l'installation et la configuration du serveur Apache, il est essentiel de vous assurer que votre environnement macOS est à jour. Pour vérifier si Homebrew est déjà installé, il suffit exécuter la commande brew --version à partir du terminal. Si elle renvoie un numéro de version, vous pouvez passer à l'étape suivante. Si elle renvoie « commande introuvable », vous devrez l'installer avec la commande fournie sur le site officiel de Homebrew, en collant une commande dans le terminal.

TABLE DES MATIÈRES

CHAPITRE 1 - QUELQUES RÉGLAGES DE MACOS
CHAPITRE 2 - INSTALLATION ET GESTION DE HOMEBREW
CHAPITRE 3 - INSTALLATION DE OPENSSL
CHAPITRE 4 - INSTALLATION DE CODE VISUAL STUDIO
CHAPITRE 5 - INSTALLATION ET GESTION DU SERVEUR APACHE
CHAPITRE 6 - INSTALLATION DE PHP

CHAPITRE 7 - INSTALLATION DE MYSQL
CHAPITRE 8 - INSTALLATION DE PHPMYADMIN
CHAPITRE 9 - VIRTUAL HOST
CHAPITRE 10 - REDIRECTION AVEC .HTACCESS
CHAPITRE 11 - MISE EN PLACE DE SSL
CHAPITRE 12 - PRINCIPALES COMMANDES


CHAPITRE 1 - QUELQUES RÉGLAGES DE MACOS

Afficher les fichiers cachés

defaults write com.apple.Finder AppleShowAllFiles true
killall Finder

Ne plus afficher les fichiers cachés
defaults write com.apple.Finder AppleShowAllFiles false
killall Finder

Installation Xcode
xcode-select --install
xcode-select -p --> Vérification que tout est installé correctement



CHAPITRE 2 - INSTALLATION ET GESTION DE HOMEBREW

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Récapitulatif des dossiers d'installation
==> This script will install:
/usr/local/bin/brew
/usr/local/share/doc/homebrew
/usr/local/share/man/man1/brew.1
/usr/local/share/zsh/site-functions/_brew
/usr/local/etc/bash_completion.d/brew
/usr/local/Homebrew
==> The following new directories will be created:
/usr/local/bin
/usr/local/etc
/usr/local/include
/usr/local/lib
/usr/local/sbin
/usr/local/share
/usr/local/var
/usr/local/opt
/usr/local/share/zsh
/usr/local/share/zsh/site-functions
/usr/local/var/homebrew
/usr/local/var/homebrew/linked
/usr/local/Cellar
/usr/local/Caskroom
/usr/local/Frameworks

Ajout de Homebrew dans le path

echo >> /Users/administrateur/.zprofile
echo 'eval "$(/usr/local/bin/brew shellenv)"' >> /Users/administrateur/.zprofile
eval "$(/usr/local/bin/brew shellenv)"

Vérification du path

brew --version

Vérification de la configuration

brew doctor

Mise à jour de Brew

brew update

Mise à jour des différents paquets installés

brew upgrade

Visualiser les versions d'un paquet PHP

brew info php@8.3

Liste des paquets installés
brew list
brew list --cask

Nettoyer les anciennes versions

brew cleanup

brew cleanup -n

Liste des services actifs

brew services list


CHAPITRE 3 - INSTALLATION DE OPENSSL

brew install openssl


CHAPITRE 4 - INSTALLATION DE CODE VISUAL STUDIO

brew install --cask visual-studio-code


CHAPITRE 5 - INSTALLATION ET GESTION DU SERVEUR APACHE

Arrêt du serveur Apache de MacOS
sudo apachectl -k stop
sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null

Installation du serveur
brew install httpd

Démarrage du serveur Apache
brew services start httpd

Vérification
http://localhost:8080

Si vous recevez un message indiquant que le navigateur ne peut pas se connecter au serveur, vérifiez d'abord que le serveur est opérationnel avec la commande suivante :
ps -aef | grep httpd
Vous pouvez consulter le journal des erreurs Apache dans un nouvel onglet/une nouvelle fenêtre de terminal lors d'un redémarrage pour voir si quelque chose n'est pas valide ou cause un problème :
tail -f /usr/local/var/log/httpd/error_log

Redémarrer le serveur Apache
brew services restart httpd

Edition et modification du fichier de configuration d'Apache

code /usr/local/etc/httpd/httpd.conf

#LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so --> LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
Listen 8080 --> Listen 80
DocumentRoot "/usr/local/var/www" --> DocumentRoot "/Users/administrateur/Sites"
<Directory "/usr/local/var/www"> --> <Directory "/Users/administrateur/Sites">
AllowOverride None --> AllowOverride All
User _www --> User administrateur
Group _www --> Group staff
#ServerName www.example.com:8080 --> ServerName localhost

Créer un fichier index.html dans le dossier Sites
<html><body><h1>It works on Sites folder!</h1></body></html>

Redémarrage du serveur Apache

brew services stop httpd
brew services start httpd

http://localhost

Désinstallation du serveur Apache

brew services stop httpd
brew uninstall httpd

Vérification des services démarrés
brew services list

Si le serveur Apache ne démarre pas
launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.httpd.plist

launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.httpd.plist

brew services start httpd
ou
brew services restart httpd


CHAPITRE 6 - INSTALLATION DE PHP

brew install php@8.2 --> Pour installer la version 8.2
brew install php@8.3 --> Pour installer la version 8.3

Dossier d'installation --> /usr/local/etc/php/

Liaison de PHP 8.3 avec le serveur Apache

brew link --overwrite --force php@8.3

Intervertir avec la version 8.2

brew unlink php && brew link --overwrite --force php@8.2

Dans le fichier de configuration d'Apache en fonction de la version de php installée

#LoadModule php7_module /usr/local/opt/php@7.0/lib/httpd/modules/libphp7.so
#LoadModule php7_module /usr/local/opt/php@7.1/lib/httpd/modules/libphp7.so
#LoadModule php7_module /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so
#LoadModule php7_module /usr/local/opt/php@7.3/lib/httpd/modules/libphp7.so
#LoadModule php7_module /usr/local/opt/php@7.4/lib/httpd/modules/libphp7.so
#LoadModule php_module /usr/local/opt/php@8.0/lib/httpd/modules/libphp.so
#LoadModule php_module /usr/local/opt/php@8.1/lib/httpd/modules/libphp.so
#LoadModule php_module /usr/local/opt/php@8.2/lib/httpd/modules/libphp.so
LoadModule php_module /usr/local/opt/php@8.3/lib/httpd/modules/libphp.so
#LoadModule php_module /usr/local/opt/php@8.4/lib/httpd/modules/libphp.so

Remplacer

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

Par

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

<FilesMatch \.php$>

    SetHandler application/x-httpd-php
</FilesMatch>

Créer un fichier info.php dans le dossier Sites

<?php phpinfo(); ?>

http://localhost/info.php


CHAPITRE 7 - INSTALLATION DE MYSQL

brew update
brew install mysql

Démarrage du serveur MYSQL
brew services start mysql

MYSQL est installé sans mot de passe Root. Pour sécuriser MYSQL utilisez :
sudo /usr/local/bin/mysql_secure_installation

Pour mettre à jour MySQL <8.4 to MySQL >9.0 requires running MySQL 8.4 first
brew services stop mysql
brew install mysql@8.4
brew services start mysql@8.4
brew services stop mysql@8.4
brew services start mysql
brew services stop mysql
brew services start mysql
brew services list
mysql -u root --> Sans mot de passe Root
mysql_secure_installation
mysql -u root -p --> Avec mot de passe Root (************)

Commande MYSQL
mysql --version


CHAPITRE 8 - INSTALLATION DE PHPMYADMIN

brew install phpmyadmin

Dossier de PHPMyAdmin
/usr/local/share/phpmyadmin

Modification du fichier de configuration

code /usr/local/etc/phpmyadmin.config.inc.php

# Extend cookies lifetime

$cfg['LoginCookieValidity'] = 7*24*60*60;

ou

# Extend cookies lifetime
$sessionValidity = 3600 * 24 * 365; // one year
$cfg['LoginCookieValidity'] = $sessionValidity;
ini_set('session.gc_maxlifetime', $sessionValidity);

$cfg['blowfish_secret'] = 'W9XN^m0I<P>~,*b7)HpEb8o@D+(&R9OL';

Commandes courantes
brew info phpmyadmin

Dans le fichier de configuration d'Apache

code /usr/local/etc/httpd/httpd.conf
Placer les instructions suivantes :
Alias /phpmyadmin /usr/local/share/phpmyadmin
<Directory /usr/local/share/phpmyadmin/>
Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        <IfModule mod_authz_core.c>
            Require all granted
        </IfModule>
        <IfModule !mod_authz_core.c>
            Order allow,deny
            Allow from all
        </IfModule>
</Directory>

brew services restart httpd
curl -I http://localhost:80/phpmyadmin

OU ALORS

Créer un nouveau fichier dans le dossier /usr/local/etc/httpd/extra/phpmyadmin.conf
code /usr/local/etc/httpd/extra/phpmyadmin.conf

# Insert following
Alias /phpmyadmin /usr/local/share/phpmyadmin
<Directory /usr/local/share/phpmyadmin/>
Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        <IfModule mod_authz_core.c>
            Require all granted
        </IfModule>
        <IfModule !mod_authz_core.c>
            Order allow,deny
            Allow from all
        </IfModule>
</Directory>

Dans le fichier de configuration principal d'Apache
code /usr/local/etc/httpd/httpd.conf

# Append at the end of the conf
# Load phpMyAdmin configuration
Include /usr/local/etc/httpd/extra/phpmyadmin.conf

brew services restart httpd
curl -I http://localhost:80/phpmyadmin


CHAPITRE 9 - VIRTUAL HOST

À modifier dans le fichier de configuration d'Apache
code /usr/local/etc/httpd/httpd.conf

#LoadModule vhost_alias_module lib/httpd/modules/mod_vhost_alias.so --> LoadModule vhost_alias_module lib/httpd/modules/mod_vhost_alias.so
# Virtual hosts
#Include /usr/local/etc/httpd/extra/httpd-vhosts.conf --> Include /usr/local/etc/httpd/extra/httpd-vhosts.conf


À modifier dans le fichier de configuration complémentaire d'Apache
code /usr/local/etc/httpd/extra/httpd-vhosts.conf

<VirtualHost *:80>

    DocumentRoot "/Users/administrateur/Sites" <-- Si besoin et en fonction de votre configuration
    ServerName localhost
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/Users/administrateur/Sites/tdm" <-- Si besoin et en fonction de votre configuration
    ServerName yamahatdm.bsalado.fr
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/Users/administrateur/Sites/trucsetastuces" <-- Si besoin et en fonction de votre configuration
    ServerName trucsetastuces.bsalado.fr
</VirtualHost>


CHAPITRE 10 - REDIRECTION AVEC .HTACCESS

Créer un fichier .htaccess dans le dossier Sites

RewriteEngine on
Rewritecond %{HTTP_HOST} ^www.site1.com$
Rewriterule ^(.*) http://www.site2.com/$1 [QSA,L,R=301]


CHAPITRE 11 - MISE EN PLACE DE SSL

brew services stop httpd
brew update
brew upgrade
brew install certbot
brew services stop httpd

Pour pouvoir utiliser Certbot dans une configuration non root (comme réalisé avec Brew), il est impératif de créer un fichier cli.ini afin que la commande certbot utilise des chemins locaux plutôt que des chemins systèmes réservés à l'accès root :

mkdir -pv ~/.config/letsencrypt

code ~/.config/letsencrypt/cli.ini

work-dir = /usr/local/etc/certbot

logs-dir = /usr/local/etc/certbot/logs
config-dir = /usr/local/etc/certbot/certs

Création du certificat pour trucsetbidules.fr
certbot certonly --standalone

En cas de succès, certbot générera les fichiers fullchain.pem et privkey.pem, qui pourrons être utilisés afin de configurer le certificat SSL dans la configuration Apache.

Certificate: /usr/local/etc/certbot/certs/live/trucsetbidules.fr/fullchain.pem
Key File: /usr/local/etc/certbot/certs/live/trucsetbidules.fr/privkey.pem

Dans le fichier httpd.conf
code /usr/local/etc/httpd/httpd.conf

#LoadModule socache_shmcb_module lib/httpd/modules/mod_socache_shmcb.so --> LoadModule socache_shmcb_module lib/httpd/modules/mod_socache_shmcb.so
#LoadModule ssl_module lib/httpd/modules/mod_ssl.so --> LoadModule ssl_module lib/httpd/modules/mod_ssl.so
#Include /usr/local/etc/httpd/extra/httpd-ssl.conf --> Include /usr/local/etc/httpd/extra/httpd-ssl.conf

Listen 80 --> #Listen 80

Dans le fichier httpd-ssl.conf
code /usr/local/etc/httpd/extra/httpd-ssl.conf

Listen 8443 --> Listen 443

<VirtualHost _default_:8443> --> <VirtualHost _default_:443>
DocumentRoot "/usr/local/var/www" --> DocumentRoot "/Users/administrateur/Sites"
ServerName www.example.com:8443 --> ServerName trucsetbidules.fr:443
ServerAdmin Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. --> ServerAdmin Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
ErrorLog "/usr/local/var/log/httpd/error_log" --> ErrorLog "/usr/local/var/log/httpd/error_log"
TransferLog "/usr/local/var/log/httpd/access_log" -->  TransferLog "/usr/local/var/log/httpd/access_log"

Dans la section : Server Certificate
SSLCertificateFile "/usr/local/etc/certbot/certs/live/trucsetbidules.fr/fullchain.pem"

Dans la section : Server Private Key
SSLCertificateKeyFile "/usr/local/etc/certbot/certs/live/trucsetbidules.fr/privkey.pem"

apachectl configtest

brew services stop httpd
brew services start httpd

Journal des erreurs
tail -f /usr/local/var/log/httpd/error_log

Les certificats LetsEncrypt ont une durée de validité limitée à 90 jours. Pour le renouveler :
certbot renew
brew services restart httpd


CHAPITRE 12 - PRINCIPALES COMMANDES

HOMEBREW
brew update
brew upgrade
brew --version
brew --doctor
brew info php@8.3
brew list
brew list --cask
brew cleanup
brew cleanup -n
brew services list
brew info phpmyadmin

STUDIO CODE
code /usr/local/etc/httpd/httpd.conf
code /usr/local/etc/httpd/extra/phpmyadmin.conf

code /usr/local/etc/httpd/extra/httpd-ssl.conf
code /usr/local/etc/phpmyadmin.config.inc.php


APACHE
which -a httpd
whereis httpd
brew services start httpd
brew services stop httpd
apachectl configtest

brew services restart httpd
brew uninstall httpd

MYSQL
brew services stop mysql
brew install mysql@8.4
brew services start mysql@8.4
brew services stop mysql@8.4
brew services start mysql

CERBOT
certbot renew