Configuration modèle
Présentation
Cette page a pou objet de donner des exemples de configuration Apache à mettre en œuvre.
Introduction
Les modèles de configuration Apache présentés ici s'appuyent sur des variables de configuration (grâce à Define et UnDefine) dont il est possible de s'inspirer pour chaque nouveau vhost.
Exemple Hors Prod
Define app_name myapp.jordan-lenuff.com
Define doc_root_parent "/data/www/MyApp"
Define doc_root_child "public"
# Instance de développement
<VirtualHost *:80>
Define url_app dev-${app_name}
ServerName ${url_app}
DocumentRoot "${doc_root_parent}/DEV"
ErrorLog "|/local/www/current/bin/rotatelogs -t -l -n 15 /data/logs/${app_name}/${url_app}_http_error.log 10M"
CustomLog "|/local/www/current/bin/rotatelogs -t -l -n 15 /data/logs/${app_name}/${url_app}_http_access.log 10M" combined
LogLevel debug
php_flag log_errors on
php_flag display_errors off
# 32767 for E_ALL, 8 for E_NOTICE, 2 for E_WARNING, 1 for E_ERROR
# More information on https://www.php.net/manual/fr/errorfunc.constants.php
php_value error_reporting "8"
php_value error_log /data/logs/${app_name}/${url_app}_php_error.log
# Les deux lignes ci-dessous permettent d'appeler l'application pour chaque dossier des développeurs contenant l'application
# exemple : http://dev-www.myapp.com/TOTO pointera automatiquement vers le dossier ${doc_root_parent}/DEV/TOTO/${doc_root_child}
AliasMatch "^/([[:alpha:]]+)(/.*)?" "${doc_root_parent}/DEV/$1/${doc_root_child}$2"
<Directory "${doc_root_parent}/DEV/*/${doc_root_child}">
DirectoryIndex index.html index.php
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
UnDefine url_app
</VirtualHost>
# Instance de intégration
<VirtualHost *:80>
Define url_app int-${app_name}
ServerName ${url_app}
DocumentRoot "${doc_root_parent}/INTEGRATION/${doc_root_child}"
ErrorLog "|/local/www/current/bin/rotatelogs -t -l -n 15 /data/logs/${app_name}/${url_app}_http_error.log 10M"
CustomLog "|/local/www/current/bin/rotatelogs -t -l -n 15 /data/logs/${app_name}/${url_app}_http_access.log 10M" combined
LogLevel debug
php_flag log_errors on
php_flag display_errors off
# 32767 for E_ALL, 8 for E_NOTICE, 2 for E_WARNING, 1 for E_ERROR
# More information on https://www.php.net/manual/fr/errorfunc.constants.php
php_value error_reporting "32767"
php_value error_log /data/logs/${app_name}/${url_app}_php_error.log
<Directory "${doc_root_parent}/INTEGRATION/${doc_root_child}">
DirectoryIndex index.html index.php
AllowOverride All
Require all granted
</Directory>
UnDefine url_app
</VirtualHost>
# Instance de recette
<VirtualHost *:80>
Define url_app rec-${app_name}
ServerName ${url_app}
DocumentRoot "${doc_root_parent}/REC/${doc_root_child}"
ErrorLog "|/local/www/current/bin/rotatelogs -t -l -n 15 /data/logs/${app_name}/${url_app}_http_error.log 10M"
CustomLog "|/local/www/current/bin/rotatelogs -t -l -n 15 /data/logs/${app_name}/${url_app}_http_access.log 10M" combined
LogLevel debug
php_flag log_errors on
php_flag display_errors off
# 32767 for E_ALL, 8 for E_NOTICE, 2 for E_WARNING, 1 for E_ERROR
# More information on https://www.php.net/manual/fr/errorfunc.constants.php
php_value error_reporting "32767"
php_value error_log /data/logs/${app_name}/${url_app}_php_error.log
<Directory "${doc_root_parent}/REC/${doc_root_child}">
DirectoryIndex index.html index.php
AllowOverride All
Require all granted
</Directory>
UnDefine url_app
</VirtualHost>
# Instance de préproduction
<VirtualHost *:80>
Define url_app pprd-${app_name}
ServerName ${url_app}
DocumentRoot "${doc_root_parent}/PREPROD/${doc_root_child}"
ErrorLog "|/local/www/current/bin/rotatelogs -t -l -n 15 /data/logs/${app_name}/${url_app}_http_error.log 10M"
CustomLog "|/local/www/current/bin/rotatelogs -t -l -n 15 /data/logs/${app_name}/${url_app}_http_access.log 10M" combined
LogLevel debug
php_flag log_errors on
php_flag display_errors off
# 32767 for E_ALL, 8 for E_NOTICE, 2 for E_WARNING, 1 for E_ERROR
# More information on https://www.php.net/manual/fr/errorfunc.constants.php
php_value error_reporting "32767"
php_value error_log /data/logs/${app_name}/${url_app}_php_error.log
<Directory "${doc_root_parent}/PREPROD/${doc_root_child}">
DirectoryIndex index.html index.php
AllowOverride All
Require all granted
SetEnv APP_ENV "pprd"
</Directory>
UnDefine url_app
</VirtualHost>
UnDefine doc_root_child
UnDefine doc_root_parent
UnDefine app_name
Penser à créer les dossiers /data/logs/${app_name}
et fichiers de logs associés /data/logs/${app_name}/${url_app}_*
:
Exemple pour l'application myapp.jordan-lenuff.com sur le serveur hors production :
mkdir -p /data/logs/myapp.jordan-lenuff.com touch /data/logs/myapp.jordan-lenuff.com/{dev,rec,int,pprd}-myapp.jordan-lenuff.com_{http_{error,access},php_error}.log chown -R www:www /data/logs/myapp.jordan-lenuff.com
Exemple Production
Define app_name myapp.jordan-lenuff.com
# Instance de production
<VirtualHost *:80>
Define url_app ${app_name}
ServerName ${url_app}
DocumentRoot "/data/www/MyApp/public"
ErrorLog "|/local/www/current/bin/rotatelogs -t -l -n 15 /data/logs/${app_name}/${url_app}_http_error.log 10M"
CustomLog "|/local/www/current/bin/rotatelogs -t -l -n 15 /data/logs/${app_name}/${url_app}_http_access.log 10M" combined
LogLevel debug
php_flag log_errors on
php_flag display_errors off
# 32767 for E_ALL, 8 for E_NOTICE, 2 for E_WARNING, 1 for E_ERROR
# More information on https://www.php.net/manual/fr/errorfunc.constants.php
php_value error_reporting "8"
php_value error_log /data/logs/${app_name}/${url_app}_php_error.log
<Directory "/data/www/MyApp/public">
DirectoryIndex index.html index.php
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
UnDefine url_app
</VirtualHost>
UnDefine app_name
Penser à créer les dossier /data/logs/${app_name}
et fichiers de logs associés /data/logs/${app_name}/${url_app}_*
:
Exemple pour l'application myapp.jordan-lenuff.com sur le serveur de production :
mkdir -p /data/logs/myapp.jordan-lenuff.com touch /data/logs/myapp.jordan-lenuff.com/myapp.jordan-lenuff.com_{http_{error,access},php_error}.log chown -R www:www /data/logs/myapp.jordan-lenuff.com
Mise en oeuvre
Par exemple, pour le site de développement de myapp.jordan-lenuff.com, il va falloir :
- créer le dossier
/data/www/DEV/myapp.jordan-lenuff.com
- créer le dossier de log
/data/logs/myapp.jordan-lenuff.com
- créer les fichiers de logs http_access.log, http_error.log et php_error.log
- créer le fichier de configuration
/local/www/current/conf/vhosts/myapp.jordan-lenuff.com.conf
Dans la pratique, cela donnera les commandes suivantes :
mkdir -p /data/www/DEV/myapp.jordan-lenuff.com chown www:www /data/www/DEV/myapp.jordan-lenuff.com mkdir -p /data/logs/myapp.jordan-lenuff.com touch /data/logs/myapp.jordan-lenuff.com/myapp.jordan-lenuff.com_{http_{access,error},php_error}.log chown -R www:www /data/logs/myapp.jordan-lenuff.com vi /local/www/current/conf/vhosts/myapp.jordan-lenuff.com
dont le contenu du fichier /local/www/current/conf/vhosts/myapp.jordan-lenuff.com.conf
sera le suivant :
Define app_name myapp.jordan-lenuff.com
# Instance de développement
<VirtualHost *:80>
Define url_app dev-${app_name}
ServerName ${url_app}
DocumentRoot "/data/www/DEV/myapp.jordan-lenuff.com"
ErrorLog "|/local/www/current/bin/rotatelogs -t -l -n 15 /data/logs/${app_name}/${url_app}_http_error.log 10M"
CustomLog "|/local/www/current/bin/rotatelogs -t -l -n 15 /data/logs/${app_name}/${url_app}_http_access.log 10M" combined
LogLevel debug
php_flag log_errors on
php_flag display_errors off
# 32767 for E_ALL, 8 for E_NOTICE, 2 for E_WARNING, 1 for E_ERROR
# More information on https://www.php.net/manual/fr/errorfunc.constants.php
php_value error_reporting "8"
php_value error_log /data/logs/${app_name}/${url_app}_php_error.log
<Directory "/data/www/DEV/myapp.jordan-lenuff.com">
DirectoryIndex index.html index.php
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
UnDefine url_app
</VirtualHost>
UnDefine app_name