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