Ga naar inhoud

config.inc.php diepgaand

web/config.inc.php is het configuratiebestand dat eigendom is van de installatie voor MRBS. Het bevat sitespecifiek gedrag en bevat meestal geheimen. Behandel het als een productieconfiguratie, niet als een applicatiebronbestand.

Maak het bestand

MRBS verzendt web/config.inc.php-sample, maar verzendt bewust geen actieve config.inc.php.

cd /var/www/mrbs
cp config.inc.php-sample config.inc.php

Begin met het voorbeeld uit dezelfde release MRBS. Neem een ​​oud monster niet onveranderd mee.

Hoe de configuratie wordt geladen

De gedeelde bootstrap laadt de configuratie in deze volgorde:

  1. systemdefaults.inc.php
  2. areadefaults.inc.php
  3. config.inc.php
  4. site_config.inc
  5. interne validatie en compatibiliteitsafhandeling

Latere toewijzingen overschrijven eerdere. Dit is de reden waarom een ​​korte config.inc.php de standaardinstellingen van een applicatie kan vervangen zonder de releasebestanden te wijzigen.

flowchart LR
  System[System defaults] --> Area[New-area defaults]
  Area --> Local[config.inc.php]
  Local --> Site[Site-specific config]
  Site --> Check[Validation and compatibility]

Important

Gebouwwaarden die al in de database zijn opgeslagen, worden bewerkt via Ruimtes. Het wijzigen van areadefaults.inc.php of het overschrijven van config.inc.php herschrijft bestaande gebouwen niet.

PHP syntaxis

De configuratie is uitvoerbaar PHP. Elke verklaring eindigt met een puntkomma. Tekenreeksen kunnen enkele of dubbele aanhalingstekens gebruiken:

$timezone = 'Europe/Berlin';
$default_view = "week";
$kiosk_mode_enabled = false;
$search["count"] = 30;

Gebruik echte PHP booleans, geen strings:

$mail_settings['disabled'] = false;   // Correct
$mail_settings['disabled'] = "false"; // Wrong: this is a non-empty string

Arrays kunnen de ondersteunde syntaxis PHP gebruiken:

$auth['admin'] = array('alice', 'bob');
$report_open_areas = [1, 3];

Voeg geen afsluitende tag ?> toe. Het kan onbedoelde uitvoer introduceren en headers of cookies verbreken.

Minimale instellingen

Een nieuwe site heeft normaal gesproken een ruimtetijdzone en databaseverbinding nodig:

$timezone = 'Europe/Berlin';

$dbsys = 'mysql';
$db_host = 'localhost';
$db_database = 'mrbs';
$db_login = 'mrbs';
$db_password = 'replace-this-password';
$db_tbl_prefix = 'mrbs_';
$db_persist = false;

Gebruik de tijdzone waar de ruimtes zich bevinden. Deze kan verschillen van de tijdzone van de server.

Databaseconfiguratie

Selecteer de databank

$dbsys = 'mysql'; // MySQL or MariaDB

of:

$dbsys = 'pgsql'; // PostgreSQL

Verbindingsgedrag

localhost kan een Unix-socket selecteren, afhankelijk van het stuurprogramma. Gebruik 127.0.0.1 om TCP voor MySQL te forceren. Een niet-standaard poort kan afzonderlijk worden opgegeven:

$db_host = '127.0.0.1';
$db_port = 3306;

PostgreSQL installaties met verschillende schema's kunnen het volgende instellen:

$db_schema = 'public';

Het tabelvoorvoegsel moet overeenkomen met het geïnstalleerde schema:

$db_tbl_prefix = 'mrbs_';

Persistente verbindingen zijn standaard uitgeschakeld. Schakel ze alleen in nadat een reële behoefte is gemeten en inzicht is verkregen in hun interactie met transacties en vergrendelingen.

URL- en reverse proxy-instellingen

MRBS ontleent zijn URL doorgaans aan het verzoek. Wanneer een omgekeerde proxy, padvoorvoegsel of ongebruikelijke configuratie van de virtuele host dit onbetrouwbaar maakt, kopieert u de relevante URL-instellingen van systemdefaults.inc.php en stelt u een expliciete openbare basis in.

De externe URL moet het schema en de host gebruiken die gebruikers zien. Configureer de proxy om vertrouwde schema- en hostinformatie door te geven en niet-vertrouwde hostheaders af te wijzen.

Test na het wijzigen van het URL-gedrag het volgende:

  • omleidingen na inloggen;
  • koppelingen in e-mail;
  • iCalendar-URL's;
  • links naar kioskuitgangen;
  • links naar meerdere sites; en
  • HTTP-naar-HTTPS omleidingen.

Authenticatie en sessies

Authenticatie verifieert identiteit; de sessiemethode verkrijgt en behoudt het.

$auth["type"] = "db";
$auth["session"] = "php";

Externe systemen voegen hun eigen instellingen toe, bijvoorbeeld:

$auth["type"] = "ldap";
$auth["session"] = "php";

Kopieer geen voorbeeldgebruikers of wachtwoorden naar productie. Wijs beheerderstoegang expliciet toe en test zowel een normale gebruiker als een beheerder. Zie Authenticatie.

Toegangscontrole

Instellingen onder $auth bepalen de publieke zichtbaarheid en bevoorrecht boekingsgedrag:

$auth['deny_public_access'] = true;
$auth['only_admin_can_book'] = false;
$auth['admin_must_obey_policies'] = true;

Bekijk de gerelateerde instellingen samen. Een openbare agenda, openbaar rapport, kiosk en privéboeking kunnen verschillende soorten informatie blootleggen.

Kalender en interface

Veel voorkomende globale overschrijvingen zijn onder meer:

$default_view = 'week';
$weekstarts = 1;                 // Monday
$display_mincals = true;
$show_timeline = true;
$kiosk_mode_enabled = false;

De datum- en tijdnotatie is landafhankelijk. Kopieer de volledige relevante invoer $datetime_formats wanneer u een indeling overschrijft in plaats van deze gedeeltelijk te reconstrueren.

Boekingsregels

Veel boekingsregels horen bij een gebouw en worden beheerd in de database. Mondiale instellingen kunnen grenzen opleggen over gebouwen heen of mogelijkheden beperken.

Bewaar beleidsoverschrijvingen in één duidelijk gelabelde sectie en documenteer de zakelijke reden:

// Facilities policy: every user may hold at most 20 future bookings.
$max_per_interval_global_enabled['future'] = true;
$max_per_interval_global['future'] = 20;

Test terugkerende, meerdaagse en beheerdersboekingen op de beleidsgrens.

E-mail

Kies een verzendmethode en configureer afzender, ontvangers, gebeurtenissen en verbinding:

$mail_settings['admin_backend'] = 'smtp';
$mail_settings['from'] = 'mrbs@example.org';
$mail_settings['booker'] = true;

$smtp_settings['host'] = 'mail.example.org';
$smtp_settings['port'] = 587;
$smtp_settings['auth'] = true;
$smtp_settings['secure'] = 'tls';
$smtp_settings['username'] = 'mrbs@example.org';
$smtp_settings['password'] = 'replace-this-password';

Houd certificaatverificatie ingeschakeld. Zie E-mailmeldingen.

Taal en lokale formulering

Stel alleen een vaste standaardtaal in als browseronderhandeling niet geschikt is:

$default_language_tokens = 'de';

Afzonderlijke labels overschrijven zonder web/lang/lang.* te bewerken:

$vocab_override['en']['mrbs'] = 'Resource Booking';
$vocab_override['de']['mrbs'] = 'Ressourcenbuchung';
$vocab_override['fr']['mrbs'] = 'Réservation de ressources';
$vocab_override['es']['mrbs'] = 'Reserva de recursos';

Als u $vocab_override gebruikt, blijven de lokale bewoordingen behouden tijdens upgrades. De volledige workflow wordt behandeld in Tekst en vertalingen.

Aangepaste velden

Aangepaste databasekolommen kunnen worden gelabeld en gevormd via configuratie:

$vocab_override['en']['room.coffee_machine'] = 'Coffee machine';
$select_options['entry.catering'] = array(
    'c' => 'Coffee',
    's' => 'Sandwiches',
    'h' => 'Hot lunch'
);
$is_mandatory_field['entry.catering'] = true;
$is_private_field['entry.refreshments'] = true;

Databasewijzigingen moeten eerst worden voltooid. Voor een aangepaste kolom entry is een identieke kolom in repeat vereist. Zie Aangepaste velden voor ondersteunde typen, schemavoorbeelden, validatie, privacy, veldvolgorde en testen.

Voeg geheimen uit een ander bestand toe

config.inc.php kan een ander bestand bevatten, maar het pad moet absoluut zijn:

require '/etc/mrbs/database-secrets.php';

Het opgenomen bestand mag alleen de verwachte waarden retourneren of toewijzen en moet leesbaar zijn voor het PHP-proces. Bewaar het buiten de openbare hoofdmap van de webserver.

Omgevingsvariabelen kunnen ook expliciet worden gelezen:

$db_password = getenv('MRBS_DB_PASSWORD');

Valideer dat een vereiste waarde bestaat in plaats van stilletjes een leeg geheim te accepteren.

Meerdere locaties

Multisite maakt gebruik van de globale configuratie plus een sitespecifieke configuratie onder sites/<site>/. Elke site heeft minimaal een geïsoleerd tabelvoorvoegsel nodig:

$multisite = true;
$db_tbl_prefix = 'berlin_';

Authenticatie, e-mail, thema en andere instellingen kunnen per site verschillen. Zie Meerdere locaties.

Foutopsporing

Schakel foutopsporingsgedrag slechts tijdelijk in en stel dit nooit bloot aan niet-vertrouwde gebruikers. Integratiespecifieke debug-uitvoer kan directorygegevens, headers, mailserverdetails of persoonlijke informatie bevatten.

Houd registratie van inloggegevens uitgeschakeld:

$auth['log_credentials'] = false;

Upgrade-veilig onderhoud

Voor elke MRBS-upgrade:

  1. Maak een back-up van de actieve configuratie.
  2. Begin met config.inc.php-sample van de nieuwe release.
  3. Vergelijk oude overschrijvingen met nieuwe standaardwaarden.
  4. Breng alleen opzettelijke instellingen over.
  5. Verwijder verouderde variabelen die zijn gerapporteerd door compatibiliteitscontroles.
  6. Voer syntaxisvalidatie en functionele tests uit.

Vermijd het kopiëren van de volledige oude standaardinstellingen naar de nieuwe configuratie; dat verbergt nieuwe standaardinstellingen en maakt latere upgrades moeilijk.

Validatiechecklist

php -l /var/www/mrbs/config.inc.php

Controleer vervolgens:

  • applicatie- en databaseversies op Help;
  • databaseverbinding en tabelvoorvoegsel;
  • tijdzone van de ruimte en zomertijdgedrag;
  • inloggen, uitloggen, verlopen en beheerderstoewijzing;
  • publieke en private opvattingen;
  • beleidsgrenzen maken, bewerken, verwijderen, herhaling en beleid;
  • e-mailafzender, ontvangers en TLS;
  • rapporten, exporten, kiosk en multisite waar gebruikt; En
  • logt zonder wachtwoorden of privégegevens.

Aanbevolen bestandsindeling

Houd het bestand kort en gegroepeerd:

<?php
declare(strict_types=1);
namespace MRBS;

// Timezone
$timezone = 'Europe/Berlin';

// Database
$dbsys = 'mysql';
// ...

// Authentication
$auth['type'] = 'db';
$auth['session'] = 'php';

// Site-specific overrides
// ...

Bij elke niet voor de hand liggende overschrijving moet worden uitgelegd waarom de installatie deze nodig heeft.