Zugangsdaten hab[en] in der Website-Config nichts zu suchen.
Bei der Twelve-Factor-App unterscheidet man auch nach bestimmten Arten der Konfiguration: Einstellungen, die pro Deploy (lies Installation) variieren können und anwendungs-interne Einstellungen, die sich nicht ändern. Datenbank-Zugangsdaten fallen in die erste Kategorie, als Beispiel für die zweite Kategorie wird die Router-Konfiguration von Rails genannt.
Für kontextsensitive Einstellungen wird empfohlen, sie in Umgebungs-Variablen zu speichern, weil sie von dort aus nicht versehentlich in das VCS-Repository geraten können. App-interne Einstellungen sollten hingegen in den Source-Dateien im Versionskontrollsystem getrackt werden. Die Idee bei dieser Unterscheidung ist ganz einfach, dass sie erlaubt maximal viel Code zwischen Deploys zu teilen und gleichzeitig die Integrität sensibler Daten durch Isolation vom Code zu wahren. Das erleichtert das Deployment.
Ich denke, es ist relativ wurscht ob diese Informationen in Environment-Variablen liegen oder in einer Config-Datei, die man includet. Hat alles seine Vor- und Nachteile.
Die Webserver-Umgebung ist dem Standard CGI/1.1 vorbehalten.
Zunächst ist CGI nicht der einzige Standard für Webserver. Aber wo du es schon ansprichst, Umgebungs-Variablen sind ausdrücklicher Teil der Schnittsellen-Spezifikation. Dort steht geschrieben:
For UNIX compatible operating systems, the following are defined:
Meta-Variables
Meta-variables are passed to the script in identically named
environment variables. These are accessed by the C library
routine getenv() or variable environ.[…]
For POSIX compatible operating systems using the EBCDIC character set, the following are defined:\
Meta-Variables
Meta-variables are passed to the script in identically named
environment variables. These are accessed by the C library
routine getenv().
Quelle: https://tools.ietf.org/html/rfc3875#section-7.2, https://tools.ietf.org/html/rfc3875#section-7.3
Globale Variablen habe sich immer wieder als problematisch erwiesen.
Umgebungs-Variablen sind etwas anderes als PHP globale Variablen, oder allgemein als globale Programm-Variablen. Sie existieren in völlig isolierten Kontexten, es gibt keine Verwechslungsgefahr beim Lesen oder Schreiben von Umgebungs-Variablen/globalen Variablen. Darüberhinaus sind Umgebungs-Variablen aus einer globalen Sicht auf die Deploys alles andere als global: Umgebungs-Variablen werden zwischen verschiedenen Deploys nicht geteilt. Sie gelten nur für die Umgebung, für die sie definiert wurden.