Vai al contenuto

Guida approfondita a config.inc.php

web/config.inc.php è il file di configurazione di proprietà dell'installazione per MRBS. Contiene comportamenti specifici del sito e solitamente contiene segreti. Trattalo come una configurazione di produzione, non come un file sorgente dell'applicazione.

Creare il file

MRBS spedisce web/config.inc.php-sample, ma deliberatamente non spedisce un config.inc.php attivo.

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

Inizia con il campione della stessa versione MRBS. Non portare avanti un vecchio campione immutato.

Come viene caricata la configurazione

Il bootstrap condiviso carica la configurazione in questo ordine:

  1. systemdefaults.inc.php
  2. areadefaults.inc.php
  3. config.inc.php
  4. site_config.inc
  5. convalida interna e gestione della compatibilità

Le assegnazioni successive sovrascrivono quelle precedenti. Questo è il motivo per cui un breve config.inc.php può sostituire le impostazioni predefinite dell'applicazione senza modificare i file di rilascio.

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

I valori dell'area già memorizzati nel database vengono modificati tramite Sale. La modifica di areadefaults.inc.php o una sostituzione in config.inc.php non riscrive le aree esistenti.

Sintassi PHP

La configurazione è codice PHP eseguibile. Ogni istruzione termina con un punto e virgola. Le stringhe possono utilizzare virgolette singole o doppie:

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

Utilizza booleani PHP reali, non stringhe:

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

Gli array possono utilizzare la sintassi PHP supportata:

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

Non aggiungere un tag di chiusura ?>. Può introdurre output accidentali e interrompere intestazioni o cookie.

Impostazioni minime

Un nuovo sito normalmente necessita di un fuso orario della sala e di una connessione al database:

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

Utilizza il fuso orario in cui si trovano le sale. Può differire dal fuso orario del server.

Configurazione della banca dati

Seleziona la banca dati

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

oppure:

$dbsys = 'pgsql'; // PostgreSQL

Comportamento della connessione

localhost può selezionare un socket Unix a seconda del driver. Utilizzare 127.0.0.1 per forzare TCP per MySQL. Una porta non standard può essere specificata separatamente:

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

PostgreSQL installazioni con più schemi possono impostare:

$db_schema = 'public';

Il prefisso della tabella deve corrispondere allo schema installato:

$db_tbl_prefix = 'mrbs_';

Le connessioni permanenti sono disabilitate per impostazione predefinita. Abilitateli solo dopo aver misurato un bisogno reale e compreso la loro interazione con transazioni e blocchi.

Impostazioni URL e proxy inverso

MRBS di solito deriva il suo URL dalla richiesta. Quando un proxy inverso, un prefisso del percorso o una configurazione insolita di un host virtuale lo rendono inaffidabile, copia le impostazioni URL pertinenti da systemdefaults.inc.php e imposta una base pubblica esplicita.

L'URL esterno deve utilizzare lo schema e l'host visualizzati dagli utenti. Configura il proxy per trasmettere informazioni su host e schemi attendibili e rifiutare intestazioni host non attendibili.

Dopo aver modificato il comportamento dell'URL, prova:

  • reindirizzamenti dopo il login;
  • collegamenti nella posta elettronica;
  • URL iCalendar;
  • collegamenti di uscita dai chioschi;
  • collegamenti multisito; e
  • HTTP-to-HTTPS reindirizza.

Autenticazione e sessioni

L'autenticazione verifica l'identità; il metodo session lo ottiene e lo conserva.

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

I sistemi esterni aggiungono le proprie impostazioni, ad esempio:

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

Non copiare utenti o password di esempio nella produzione. Mappare esplicitamente l'accesso dell'amministratore e testare un utente normale e un amministratore. Vedi Autenticazione.

Controllo degli accessi

Le impostazioni in $auth controllano la visibilità pubblica e il comportamento di prenotazione privilegiato:

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

Esamina insieme le impostazioni correlate. Un calendario pubblico, un report pubblico, la modalità chiosco e una prenotazione privata possono esporre informazioni diverse.

Calendario e interfaccia

Le sostituzioni globali comuni includono:

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

La formattazione di data e ora riconosce le impostazioni locali. Copia la voce $datetime_formats completa e pertinente quando si sovrascrive un formato anziché ricostruirlo parzialmente.

Regole di prenotazione

Molte regole di prenotazione appartengono ad un'area e sono gestite nel database. Le impostazioni globali possono imporre limiti tra aree o limitare le capacità.

Mantieni le sostituzioni delle policy in una sezione chiaramente etichettata e documenta il motivo aziendale:

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

Testa le prenotazioni ricorrenti, multigiornaliere e di amministratore al limite della policy.

E-mail

Scegli un metodo di invio e configura mittente, destinatari, eventi e trasmissione:

$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';

Mantieni abilitata la verifica del certificato. Vedi Notifiche e-mail.

Lingua e dicitura locale

Imposta una lingua predefinita fissa solo quando la negoziazione del browser non è adatta:

$default_language_tokens = 'de';

Sostituisci le singole etichette senza modificare web/lang/lang.*:

$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';

L'uso di $vocab_override preserva la formulazione locale durante gli aggiornamenti. Il flusso di lavoro completo è trattato in Testi e traduzioni.

Campi personalizzati

Le colonne del database personalizzate possono essere etichettate e modellate tramite la configurazione:

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

Le modifiche al database devono essere completate prima. Una colonna personalizzata entry richiede una colonna identica in repeat. Vedi Campi personalizzati per tipi supportati, esempi di schemi, convalida, privacy, ordine dei campi e test.

Includi segreti da un altro file

config.inc.php può includere un altro file, ma il percorso deve essere assoluto:

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

Il file incluso deve restituire o assegnare solo i valori previsti ed essere leggibile dal processo PHP. Conservalo fuori dalla directory pubblica del server web.

Le variabili d'ambiente possono anche essere lette esplicitamente:

$db_password = getenv('MRBS_DB_PASSWORD');

Verifica che esista un valore richiesto invece di accettare silenziosamente un segreto vuoto.

Multisito

Il multisito utilizza la configurazione globale più una configurazione specifica del sito in sites/<site>/. Come minimo, ogni sito necessita di un prefisso di tabella isolato:

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

Autenticazione, posta, tema e altre impostazioni possono variare in base al sito. Vedi Multisito.

Debug

Abilita il comportamento di debug solo temporaneamente e non esporlo mai a utenti non attendibili. L'output di debug specifico dell'integrazione può contenere dati di directory, intestazioni, dettagli del server di posta o informazioni personali.

Mantieni la registrazione delle credenziali disabilitata:

$auth['log_credentials'] = false;

Manutenzione sicura per l'aggiornamento

Per ogni aggiornamento MRBS:

  1. Eseguire il backup della configurazione attiva.
  2. Inizia dalla nuova versione config.inc.php-sample.
  3. Confronta le vecchie sostituzioni con le nuove impostazioni predefinite.
  4. Trasferisci solo le impostazioni intenzionali.
  5. Rimuovi le variabili obsolete segnalate dai controlli di compatibilità.
  6. Esegui la convalida della sintassi e i test funzionali.

Evitare di copiare tutte le vecchie impostazioni predefinite nella nuova configurazione; che nasconde le nuove impostazioni predefinite e rende difficili gli aggiornamenti successivi.

Lista di controllo di convalida

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

Quindi verifica:

  • versioni dell'applicazione e del database su Help;
  • connessione al database e prefisso della tabella;
  • fuso orario della sala e comportamento dell'ora legale;
  • login, logout, scadenza e mappatura amministratore;
  • opinioni pubbliche e private;
  • creare, modificare, eliminare, ricorrenza e limiti di policy;
  • mittente, destinatari e TLS dell'e-mail;
  • report, esportazioni, modalità chiosco e multisito, se utilizzati; e
  • log senza password o dati privati.

Layout file consigliato

Mantieni il file breve e raggruppato:

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

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

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

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

// Site-specific overrides
// ...

Ogni override non ovvio dovrebbe spiegare perché l'installazione lo richiede.