Přeskočit obsah

Podrobný průvodce souborem config.inc.php

Soubor web/config.inc.php je místní konfigurací konkrétní instalace MRBS. Určuje její chování a zpravidla obsahuje citlivé údaje. Zacházejte s ním jako s produkční konfigurací, nikoli jako se zdrojovým souborem aplikace.

Vytvořte soubor

MRBS obsahuje ukázkový soubor web/config.inc.php-sample, aktivní soubor config.inc.php však záměrně nedodává.

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

Vždy vycházejte z ukázky dodané se stejnou verzí MRBS. Starší ukázkový soubor nepřebírejte beze změny.

Jak se načítá konfigurace

Společný zaváděcí kód načítá konfiguraci v tomto pořadí:

  1. systemdefaults.inc.php
  2. areadefaults.inc.php
  3. config.inc.php
  4. site_config.inc
  5. interní ověřování a zpracování kompatibility

Pozdější přiřazení přepisují dřívější. Krátký soubor config.inc.php tak může změnit výchozí nastavení aplikace, aniž by bylo nutné upravovat soubory dodané s vydáním.

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

Hodnoty oblastí již uložené v databázi upravujte v části Místnosti. Změna souboru areadefaults.inc.php ani odpovídajícího nastavení v config.inc.php stávající oblasti nezmění.

PHP syntaxe

Konfigurace je spustitelný kód PHP. Každý příkaz končí středníkem; řetězce mohou být uzavřeny v jednoduchých nebo dvojitých uvozovkách:

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

Používejte skutečné logické hodnoty PHP, nikoli řetězce:

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

Pole lze zapsat kteroukoli podporovanou syntaxí PHP:

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

Nepřidávejte závěrečnou značku ?>. Může zavést náhodný výstup a přerušit záhlaví nebo soubory cookie.

Minimální nastavení

Nový web obvykle potřebuje časové pásmo místnosti a připojení k databázi:

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

Použijte časové pásmo, ve kterém se místnosti nacházejí. Může se lišit od časového pásma serveru.

Konfigurace databáze

Vyberte databázi

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

nebo:

$dbsys = 'pgsql'; // PostgreSQL

Chování připojení

localhost může vybrat Unix socket v závislosti na ovladači. Použijte 127.0.0.1 k vynucení TCP pro MySQL. Nestandardní port lze zadat samostatně:

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

U instalace PostgreSQL s více schématy lze nastavit:

$db_schema = 'public';

Předpona tabulky musí odpovídat nainstalovanému schématu:

$db_tbl_prefix = 'mrbs_';

Trvalá připojení jsou ve výchozím nastavení vypnuta. Zapínejte je pouze tehdy, pokud měření prokáže skutečnou potřebu a rozumíte jejich vlivu na transakce a zámky.

Nastavení adres URL a reverzní proxy

MRBS obvykle odvodí vlastní adresu URL z požadavku. Pokud je to kvůli reverzní proxy, předponě cesty nebo neobvyklému nastavení virtuálního hostitele nespolehlivé, zkopírujte příslušná nastavení ze souboru systemdefaults.inc.php a veřejnou základní adresu zadejte výslovně.

Externí adresa URL musí používat protokol a název serveru, které vidí uživatelé. Proxy nastavte tak, aby předávala důvěryhodné údaje o protokolu a serveru a odmítala nedůvěryhodné hlavičky Host.

Po změně chování adresy URL otestujte:

  • přesměrování po přihlášení;
  • odkazy v e-mailu;
  • adresy URL iCalendar;
  • výstupní odkazy kiosků;
  • odkazy v režimu více webů;
  • HTTP-to-HTTPS přesměrování.

Ověřování a relace

Metoda ověřování kontroluje identitu; metoda relace ji získává a uchovává.

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

Externí systémy přidávají svá vlastní nastavení, například:

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

Ukázkové uživatele ani hesla nepřebírejte do produkční konfigurace. Výslovně nastavte přiřazení role správce a otestujte běžného uživatele i správce. Viz kapitola Ověřování.

Kontrola přístupu

Nastavení pod $auth řídí veřejnou viditelnost a privilegované chování při rezervaci:

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

Související nastavení posuzujte společně. Veřejný kalendář, veřejné sestavy, režim kiosku a soukromé rezervace mohou zpřístupnit různé údaje.

Kalendář a rozhraní

Mezi běžné globální přepisy patří:

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

Formát data a času závisí na národním prostředí. Chcete-li jej změnit, zkopírujte raději celý příslušný záznam $datetime_formats, než abyste jej po částech sestavovali znovu.

Pravidla rezervace

Řada pravidel rezervací přísluší konkrétní oblasti a spravuje se v databázi. Globální nastavení mohou vynucovat limity napříč oblastmi nebo omezovat dostupné možnosti.

Změny pravidel seskupte do jedné zřetelně označené části a zdokumentujte jejich provozní důvod:

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

Na hranicích nastavených limitů otestujte opakované a vícedenní rezervace i rezervace správců.

E-mail

Zvolte způsob odesílání a nastavte odesílatele, příjemce, události a přenos:

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

Ověřování certifikátu ponechte zapnuté. Viz kapitola E-mailová oznámení.

Jazyk a místní terminologie

Nastavte pevný výchozí jazyk pouze v případě, že vyjednávání prohlížeče není vhodné:

$default_language_tokens = 'de';

Jednotlivé popisky můžete změnit bez úpravy souborů 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';

Pomocí $vocab_override zachováte místní terminologii i při aktualizacích. Úplný postup popisuje kapitola Texty a překlady.

Vlastní pole

Vlastním databázovým sloupcům lze pomocí konfigurace přiřadit popisek a způsob zobrazení:

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

Nejprve je nutné provést změny databáze. Vlastní sloupec entry vyžaduje identický sloupec v repeat. Podporované typy, příklady schémat, ověřování, soukromí, pořadí polí a testování viz Vlastní pole.

Načtení citlivých údajů z jiného souboru

config.inc.php může obsahovat další soubor, ale cesta musí být absolutní:

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

Vložený soubor má vracet nebo přiřazovat pouze očekávané hodnoty a musí být čitelný pro proces PHP. Uchovávejte jej mimo kořenový adresář webu.

Proměnné prostředí lze také číst explicitně:

$db_password = getenv('MRBS_DB_PASSWORD');

Ověřte, že požadovaná hodnota skutečně existuje; prázdný citlivý údaj nikdy bez upozornění nepřijímejte.

Provoz více webů

Režim více webů používá globální konfiguraci a konfiguraci jednotlivých webů v adresáři sites/<site>/. Každý web potřebuje přinejmenším vlastní předponu tabulek:

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

Ověřování, pošta, motiv a další nastavení se mohou lišit podle webu. Viz kapitola Provoz více webů.

Ladění

Chování ladění povolte pouze dočasně a nikdy jej nevystavujte nedůvěryhodným uživatelům. Výstup ladění specifický pro integraci může obsahovat data adresáře, záhlaví, podrobnosti o poštovním serveru nebo osobní informace.

Zapisování přihlašovacích údajů do protokolu ponechte vypnuté:

$auth['log_credentials'] = false;

Údržba s ohledem na aktualizace

Při každé aktualizaci MRBS:

  1. Zálohujte aktivní konfiguraci.
  2. Začněte od nového vydání config.inc.php-sample.
  3. Porovnejte své dosavadní změny s novými výchozími hodnotami.
  4. Přeneste pouze záměrná nastavení.
  5. Odstraňte zastaralé proměnné hlášené kontrolami kompatibility.
  6. Spusťte ověření syntaxe a funkční testy.

Nekopírujte do nové konfigurace kompletní starý soubor s výchozími hodnotami. Skryli byste tím nové výchozí nastavení a zkomplikovali další aktualizace.

Kontrolní seznam ověření

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

Poté ověřte:

  • verzi aplikace a databáze na stránce Nápověda;
  • připojení k databázi a předpona tabulky;
  • časové pásmo místnosti a chování při přechodu na letní čas;
  • mapování přihlášení, odhlášení, vypršení platnosti a správce;
  • veřejné zobrazení a zobrazení soukromých údajů;
  • vytváření, úpravu, odstraňování a opakování rezervací i hraniční hodnoty pravidel;
  • odesílatel e-mailu, příjemci a TLS;
  • sestavy, exporty, režim kiosku a režim více webů, pokud je používáte;
  • protokoly bez hesel nebo soukromých dat.

Doporučené rozvržení souboru

Udržujte soubor krátký a seskupený:

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

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

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

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

// Site-specific overrides
// ...

U každé méně zřejmé změny uveďte, proč ji instalace potřebuje.