Description des fichiers application.ini et de leur utilisation

Edit me

Introduction

Cet article vise à préciser les bonnes pratiques concernant l’utilisation du fichier application.ini pour la configuration des applications Voozanoo 4.

Généralités

  • Les fichiers INI sont des fichiers texte : ils peuvent être manipulés avec un logiciel courant de type éditeur de texte.
  • Les fichiers sont divisés en sections. Chaque section comporte un certain nombre de paramètres de configuration. - Chaque section commence par un titre placé entre crochets « [ » et « ] ».
  • La valeur de chaque paramètre de configuration est indiquée par une formule : paramètre = valeur.
  • Les fichiers peuvent contenir des commentaires. Les commentaires sont souvent utilisés pour décrire les paramètres et les valeurs à introduire. Ils sont généralement précédés d’un point-virgule.

L’application.ini sur GitHub

Sur GitHub, on trouve l’application.ini ici :

 [mon-appli]/configs/application.ini

Ce fichier est versionné et ne doit pas contenir le mot de passe pour la base de données.

Cette entrée (resources.db.params.password) est réécrite sur les serveurs (voir plus loin).

Les sections

Voici un exemple d’utilisation des sections :

[production]
resources.db.params.host = "probdd-crypted"
resources.db.params.username = "osea"
resources.db.params.password = ""
resources.db.params.dbname = "osea"

; ===================
; [ ici d'autres lignes que je ne reprends pas pour gagner de la place ]
; ===================

[staging : production]
resources.db.params.host = "bdd-preprod-crypted"

[development : production]
resources.db.params.host = "localhost"
resources.db.params.username = "root"
resources.db.params.password = ""

[dev_mzz : development]
resources.db.params.password = "root"

Ici, on voit quatres sections :

  • [production] qui s’appliquera sur un environnement de production
  • [staging : production] qui s’appliquera sur un environnement de préproduction
  • [development : production] qui s’appliquera sur un environnement de développement
  • [dev_mzz : development] qui s’appliquera sur un l’environnement de développement de MZZ

L’héritage

L’héritage des sections fonctionne comme l’extension d’une classe en PHP :

  • [staging : production] La section staging étend la section production
  • [development : production] La section development étend la section production
  • [dev_mzz : development] La section dev_mzz étend la section development

Concrètement, pour un environnement dont la variable d’environnement APPLICATION_ENV est égale à dev_mzz :

dev_mzz surcharge development surcharge production

Nous aurons les directives définies de la manière suivante :

resources.db.params.host = "localhost"
resources.db.params.username = "root"
resources.db.params.password = "root"
resources.db.params.dbname = "osea"

Écrasement des propriétés sur les serveurs

Sur les serveurs, dans le dossier /space/www/configuration/voozanoo4/configuration/, sont stockés les fichiers .ini des application. Pour chaque application, il y a plusieurs fichiers de configuration :

  • un fichier [mon-appli].ini, créé à la première installation du paquet
  • un ou plus fichier(s) [mon-appli]_[numéro_version].ini, livré(s) avec l’application

Lorsqu’une application est mise à jour, le application.ini de la version mise à jour est surchargé par le contenu du fichier [mon-appli].ini.

Par exemple, si les lignes suivantes sont présentes dans le fichier [mon-appli]_[numéro_version].ini :

[production]
resources.db.params.host = "probdd-crypted"
resources.db.params.username = "osea"
resources.db.params.password = ""
resources.db.params.dbname = "osea"

Et que la ligne suivante est présente dans le fichier [mon-appli].ini :

[production]
resources.db.params.password = "le_mdp_de_ma_bdd"

Après une mise à jour de mon application sur le serveur de production le fichier [mon-appli]_[numéro_version].ini ressemblera à :

[production]
resources.db.params.host = "probdd-crypted"
resources.db.params.username = "osea"
resources.db.params.password = "le_mdp_de_ma_bdd"
resources.db.params.dbname = "osea"

Le multi-section

Qu’est-ce qu’une application multi-section

Exemple de fichier application.ini d’une application multi-section :

[production]
resources.db.params.host = "probdd-crypted"
resources.db.params.username = "mon_appli"
resources.db.params.password = ""
resources.db.params.dbname = "mon_appli"

voozanoo.host = "mon-appli.voozanoo.net"

voozanoo.log.conf.stream.writerParams.stream = "/space/log/mon-appli.voozanoo.net/php/voozanoo.log"

[staging : production]
resources.db.params.host = "bdd-preprod-crypted"
resources.db.params.username = "mon_appli"
resources.db.params.password = ""
resources.db.params.dbname = "mon_appli"

voozanoo.host = "mon-appli.preprod.voozanoo.net"

voozanoo.log.conf.stream.writerParams.stream = "/space/log/mon-appli.preprod.voozanoo.net/php/voozanoo.log"

[staging-foch : staging]

resources.db.params.username = "mon_appli_foch"
resources.db.params.password = ""
resources.db.params.dbname = "mon_appli_foch"

voozanoo.host = "mon-appli-foch.preprod.voozanoo.net"

voozanoo.log.conf.stream.writerParams.stream = "/space/log/mon-appli-foch.preprod.voozanoo.net/php/voozanoo.log"

[staging-chic : staging]

resources.db.params.username = "mon_appli_chic"
resources.db.params.password = ""
resources.db.params.dbname = "mon_appli_chic"

voozanoo.host = "mon-appli-chic.preprod.voozanoo.net"

voozanoo.log.conf.stream.writerParams.stream = "/space/log/mon-appli-chic.preprod.voozanoo.net/php/voozanoo.log"

[staging-annecy : staging]

resources.db.params.username = "annecy"
resources.db.params.password = ""
resources.db.params.dbname = "annecy"

voozanoo.host = "mon-appli-annecy.preprod.voozanoo.net"

voozanoo.log.conf.stream.writerParams.stream = "/space/log/mon-appli-annecy.preprod.voozanoo.net/php/voozanoo.log"

A l’installation de l’application mon-appli sur un serveur de préproduction l’outil ecdep up se chargera de créer :

  • Les différents vhost :
    • mon-appli.preprod.voozanoo.net
    • mon-appli-foch.preprod.voozanoo.net
    • mon-appli-chic.preprod.voozanoo.net
    • mon-appli-annecy.preprod.voozanoo.net
  • les fichiers de logs :
    • /space/log/mon-appli.preprod.voozanoo.net/php/errors.log
    • /space/log/mon-appli.preprod.voozanoo.net/php/voozanoo.log
    • /space/log/mon-appli-foch.preprod.voozanoo.net/php/errors.log
    • /space/log/mon-appli-foch.preprod.voozanoo.net/php/voozanoo.log
    • /space/log/mon-appli-chic.preprod.voozanoo.net/php/errors.log
    • /space/log/mon-appli-chic.preprod.voozanoo.net/php/voozanoo.log
    • /space/log/mon-appli-annecy.preprod.voozanoo.net/php/errors.log
    • /space/log/mon-appli-annecy.preprod.voozanoo.net/php/voozanoo.log
  • les dossiers de stockages :
    • /space/applisdata/mon-appli/chunk/
    • /space/applisdata/mon-appli/storage/
    • /space/applistmp/mon-appli/

Exemple complet de fichier application.ini

Voici un exemple de fichier application.ini contenant déjà les directives importantes pour une application appelée mon-appli.

Ne pas oublier de l’adapter (nom de l’application, clef de salage, etc.).

[production]
resources.db.adapter = "PDO_MYSQL"
resources.db.params.date_format = "YYYY-MM-ddTHH:mm:ss"
resources.db.isDefaultTableAdapter = true
resources.db.params.host = "probdd-crypted"
resources.db.params.username = "[mon-appli]"
resources.db.params.password = ""
resources.db.params.dbname = "[mon-appli]"
; To avoid misunderstanding when retrieving text or varchar fields from DB encoded in UTF8
resources.db.params.charset = "UTF8"

; Base url from the DocumentRoot to the public directory of the application
; Ex : "/apps/my_project/public/"
voozanoo.protocole = "https"
voozanoo.baseurl = "/"
voozanoo.host = "[mon-appli].voozanoo.net"

; Absolute path where to store temporary files
dir.temp = "/space/applistmp/[mon-appli]/"

; Absolute path where to store chunks during Large File upload
; Optionnal if you don't use the Y.LargeFileUploader component
voozanoo.upload.chunk.directory = "/space/applisdata/[mon-appli]/chunk"

; Absolute path where files will be indefinitely stored (like a storage)
voozanoo.upload.directory = "/space/applisdata/[mon-appli]/storage"

; If application own custom widgets (for ALL projects
lib.voozanoo.javascript.extended_yui_conf.default.version = "1.0.0"
lib.voozanoo.javascript.extended_yui_conf.default.jsuri = "javascript/"
lib.voozanoo.javascript.extended_yui_conf.default.resource = APPLICATION_PATH "/resources/xml/default_yui_conf_modules.xml"

; If a project own custom widgets
; Replace |PROJECT_NAME| by the project name wich had custom widgets
; lib.voozanoo.javascript.extended_yui_conf.|PROJECT_NAME|.version = "1.0.0"
; lib.voozanoo.javascript.extended_yui_conf.|PROJECT_NAME|.jsuri = "javascript/"
; lib.voozanoo.javascript.extended_yui_conf.|PROJECT_NAME|.resource = APPLICATION_PATH "/resources/xml/|PROJECT_NAME|_yui_conf_modules.xml"

; Clé de salage utilisée pour les mots de passe des utilisateurs système
voozanoo.saltKey = "clef_de_salage_a_changer"
                               
; Timeout de la session utilisateur en secondes
; Si absent la durée est de 4h (14400s)
voozanoo.session.time_out = 28800
                               
; Mise en cache des formulaires
;resources.cachemanager.account.frontend.name = Core
;resources.cachemanager.account.frontend.customFrontendNaming = false
;resources.cachemanager.account.frontend.options.lifetime = 7200
;resources.cachemanager.account.frontend.options.automatic_serialization = true
; L'utilisation d'APC nécessite l'installation de APCU
;resources.cachemanager.account.backend.name = Apc

; équivalent à un set_include_path( APPLICATION_PATH "/library" . PATH_SEPARATOR . get_include_path() );
includePaths.library = APPLICATION_PATH "/library"
; Notez bien l'underscore final "_", il est ABSOLUMENT necessaire
autoloadernamespaces[] = "Admin_"
autoloadernamespaces[] = "App_"
autoloadernamespaces[] = "Rando_"
autoloadernamespaces[] = "Archive_"

; Utilisation du widgetDateAdvanced pour les champs dates
voozanoo.use_date_advanced = true

; Les champs de type boolean utiliseront le WidgetBoolean si true
voozanoo.use_widgetboolean = true


;Si cette directive vaut true, les droits de l'utilisateur seront respectés au lancement des tests de cohérence
query.respect_rights = false

; Sert à désactiver la mise à jour des groupes d'une fiche en cas de update de la fiche (https://github.com/Epiconcept-Paris/Voozanoo4/issues/671)
disable.data_group.update = false

; Config pour l'utilisation du module statistiques
modstat.url = 'https://stats.voozanoo.net'
modstat.login = ""
modstat.password = ""

; Config pour l'utilisation de mailmerge
mailmerge.url = 'https://mailmerge.voozanoo.net'
mailmerge.login = ""
mailmerge.password = ""

; Config pour l'utilisation du mobile
hub.url = "https://prohub2.voozanoo.net"
hub.login = ""
hub.password = ""

; Signale que la structure JSON des projets EpiCraft doivent être stockés dans les ressources (nécessaire pour le mobile)
epicraft.store_project_str = true
mobile.[mon-appli].files.build.path = "/space/applisdata/[mon-appli]/storage/epimob/build.js"

voozanoo.resources.path = APPLICATION_PATH "/resources"

voozanoo.oauth.consumers_auto_disconnect = FALSE

voozanoo.log.enable = TRUE
voozanoo.log.conf.timestampFormat = 'Y-m-d H:i:s'
voozanoo.log.conf.stream.writerName = "Stream"
voozanoo.log.conf.stream.writerParams.stream = "/space/log/[mon-appli].voozanoo.net/php/voozanoo.log"
voozanoo.log.conf.stream.writerParams.mode = "a"


[staging : production]

resources.db.params.host = "bdd-preprod-crypted"
resources.db.params.username = "[mon-appli]"
resources.db.params.password = ""
resources.db.params.dbname = "[mon-appli]"

; Application host name
voozanoo.host = "[mon-appli].preprod.voozanoo.net"

resources.frontController.displayExceptions = true
lib.voozanoo.javascript.static = false
lib.yui.debug = true

; Absolute path where to store temporary files
;dir.temp = "/space/applistmp/[PROJECT_NAME]"

; Absolute path where files will be indefinitely sotred (like a storage)
;voozanoo.upload.directory = "/space/applisdata/[PROJECT_NAME]/storage"

; Absolute path where to store chunks during Large File upload
;voozanoo.upload.chunk.directory = "/space/applisdata/[PROJECT_NAME]/chunk"

; Absolute path of resources
voozanoo.resources.path = APPLICATION_PATH "/resources"

; Base url from the DocumentRoot to the public directory of the application
voozanoo.baseurl = "/"

voozanoo.log.conf.stream.writerParams.stream = "/space/log/[mon-appli].preprod.voozanoo.net/php/voozanoo.log"


[development : production]

resources.db.params.host = "localhost"
resources.db.params.username = "root"
resources.db.params.password = ""
resources.db.params.dbname = "[mon-appli]"

lib.voozanoo.javascript.static = false
lib.yui.debug = true
  
voozanoo.migration.log.enable = TRUE
voozanoo.migration.log.conf.timestampFormat = 'Y-m-d H:i:s'
voozanoo.migration.log.conf.stream.writerName = "Stream"
voozanoo.migration.log.conf.stream.writerParams.stream = "migration.log"
voozanoo.migration.log.conf.stream.writerParams.mode = "a"


[dev_kgr : development]

resources.frontController.displayExceptions = true

voozanoo.protocole = "http"
voozanoo.host = "192.168.33.37"
voozanoo.baseurl = "/apps/[mon-appli]/public/"
voozanoo.upload.directory = "C:\wamp\www\storage"
voozanoo.upload.chunk.directory = "C:\wamp\www\\tmp"
dir.temp = "C:\wamp\www\storage"

lib.voozanoo.javascript.static = false
lib.yui.debug = true

; Mise en cache des formulaires
;resources.cachemanager.account.frontend.name = Core
;resources.cachemanager.account.frontend.customFrontendNaming = false
;resources.cachemanager.account.frontend.options.lifetime = 7200
;resources.cachemanager.account.frontend.options.automatic_serialization = true
;resources.cachemanager.account.backend.name = File
;resources.cachemanager.account.backend.options.cache_dir = "/tmp"

voozanoo.log.conf.stream.writerParams.stream = "C:\wamp\logs\php_error.log"