コンテンツにスキップ

config.inc.php の詳細

web/config.inc.php は、MRBS のインストール所有の設定ファイルです。これにはサイト固有の動作が含まれており、通常はシークレットが含まれています。これをアプリケーションのソース ファイルとしてではなく、運用設定として扱います。

ファイルを作成する

MRBS は web/config.inc.php-sample を出荷しますが、アクティブな config.inc.php は意図的に出荷しません。

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

同じMRBS リリースのサンプルから始めます。古いサンプルをそのまま持ち越さないでください。

設定のロード方法

共有ブートストラップは次の順序で設定を読み込みます。

  1. systemdefaults.inc.php
  2. areadefaults.inc.php
  3. config.inc.php
  4. site_config.inc
  5. 内部検証と互換性の処理

後の割り当ては以前の割り当てをオーバーライドします。これが、リリース ファイルを変更せずに、短い config.inc.php でアプリケーションのデフォルトを置き換えることができる理由です。

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

データベースに保存済みのエリア設定は、部屋 画面から編集します。areadefaults.inc.php や config.inc.php の値を変更しても、既存のエリアは書き換えられません。

PHP 構文

設定ファイルは実行可能な PHP コードです。各文はセミコロンで終わります。文字列には一重引用符または二重引用符を使用できます。

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

文字列ではなく、実際の PHP ブール値を使用します。

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

配列では、サポートされている PHP 構文のいずれかを使用できます。

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

終了タグ ?> を追加しないでください。偶発的な出力が発生したり、ヘッダーや Cookie が壊れたりする可能性があります。

最低限の設定

新しいサイトには通常、部屋のタイムゾーンとデータベース接続が必要です。

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

部屋が位置するタイムゾーンを使用してください。サーバーのタイムゾーンとは異なる場合があります。

データベース設定

データベースを選択してください

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

または:

$dbsys = 'pgsql'; // PostgreSQL

接続動作

localhost はドライバーに応じて Unix ソケットを選択できます。 MySQL に TCP を強制するには、127.0.0.1 を使用します。非標準ポートは個別に指定できます。

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

PostgreSQL 複数のスキーマを使用したインストールでは、以下を設定できます。

$db_schema = 'public';

テーブルのプレフィックスは、インストールされているスキーマと一致する必要があります。

$db_tbl_prefix = 'mrbs_';

永続的な接続はデフォルトでは無効になっています。実際のニーズを測定し、トランザクションやロックとの相互作用を理解した後でのみ、それらを有効にしてください。

URLとリバースプロキシの設定

MRBS は通常、リクエストから URL を取得します。リバース プロキシ、パス プレフィックス、または異常な仮想ホスト設定により信頼性が低下する場合は、関連する URL 設定を systemdefaults.inc.php からコピーし、明示的なパブリック ベースを設定します。

外部 URL は、ユーザーに表示されるスキームとホストを使用する必要があります。信頼できるスキームとホスト情報を渡し、信頼できないホスト ヘッダーを拒否するようにプロキシを設定します。

URL の動作を変更した後、以下をテストします。

  • ログイン後のリダイレクト。
  • 電子メール内のリンク。
  • iCalendar URL。
  • キオスクの出口リンク。
  • マルチサイトリンク。
  • HTTP-to-HTTPS リダイレクト。

認証とセッション

認証は身元を確認します。セッション メソッドがそれを取得して保持します。

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

外部システムは、次のような独自の設定を追加します。

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

サンプルのユーザーやパスワードを運用環境にコピーしないでください。マップ管理者は明示的にアクセスし、管理者だけでなく一般ユーザーもテストします。 認証 を参照してください。

アクセス制御

$auth の設定は、一般公開と特権的な予約動作を制御します。

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

関連する設定を一緒に確認します。公開カレンダー、公開レポート、キオスク、およびプライベート予約では、さまざまな情報が公開される可能性があります。

カレンダーとインターフェース

一般的なグローバル オーバーライドには次のものがあります。

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

日付と時刻の形式はロケールを認識します。フォーマットを部分的に再構築するのではなく、フォーマットをオーバーライドする場合は、関連する $datetime_formats エントリを完全にコピーしてください。

予約ルール

多くの予約ルールはエリアに属し、データベースで管理されます。グローバル設定では、エリア全体に制限を課したり、機能を制限したりできます。

ポリシーのオーバーライドを明確にラベル付けされた 1 つのセクションにまとめ、ビジネス上の理由を文書化します。

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

定期的な予約、複数日の予約、および管理者の予約をポリシーの境界でテストします。

電子メール

送信方式を選択し、送信者、受信者、イベント、通信を設定します。

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

証明書の検証を有効にしておきます。 電子メール通知 を参照してください。

言語と現地の言葉遣い

ブラウザーのネゴシエーションが不適切な場合にのみ、固定のデフォルト言語を設定します。

$default_language_tokens = 'de';

編集せずに個々のラベルをオーバーライドします 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';

$vocab_override を使用すると、アップグレード中にローカルの文言が保持されます。完全なワークフローについては、テキストと翻訳 で説明しています。

カスタムフィールド

カスタム データベース列は、設定を通じてラベルを付けたり整形したりできます。

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

最初にデータベースの変更を完了する必要があります。 entry カスタム列には、repeat に同じ列が必要です。サポートされているタイプ、スキーマの例、検証、プライバシー、フィールドの順序、およびテストについては、カスタムフィールド を参照してください。

別のファイルのシークレットを含める

config.inc.php には別のファイルを含めることができますが、パスは絶対パスである必要があります。

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

読み込むファイルでは必要な値だけを返すか代入し、PHP の実行ユーザーが読み取れるようにします。Web サーバーの公開ディレクトリ外に配置してください。

環境変数は明示的に読み取ることもできます。

$db_password = getenv('MRBS_DB_PASSWORD');

空のシークレットを黙って受け入れるのではなく、必要な値が存在することを検証します。

マルチサイト

マルチサイトでは、グローバル設定と sites/<site>/ のサイト固有の設定が使用されます。少なくとも、すべてのサイトに分離テーブル プレフィックスが必要です。

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

認証、メール、テーマ、その他の設定はサイトによって異なる場合があります。 マルチサイト を参照してください。

デバッグ

デバッグ動作を一時的にのみ有効にし、信頼できないユーザーに公開しないでください。統合固有のデバッグ出力には、ディレクトリ データ、ヘッダー、メール サーバーの詳細、または個人情報が含まれる場合があります。

認証情報のログを無効のままにします。

$auth['log_credentials'] = false;

アップグレード時の安全なメンテナンス

MRBS のアップグレードごとに:

  1. アクティブな設定をバックアップします。
  2. 新しいリリースのconfig.inc.php-sampleから始めてください。
  3. 古いオーバーライドを新しいデフォルトと比較します。
  4. 意図的な設定のみを転送します。
  5. 互換性チェックによって報告された古い変数を削除します。
  6. 構文検証と機能テストを実行します。

古いデフォルトを完全に新しい設定にコピーすることは避けてください。これにより、新しいデフォルトが非表示になり、後のアップグレードが困難になります。

検証チェックリスト

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

次に、次のことを確認します。

  • アプリケーションとデータベースのバージョンはヘルプにあります。
  • データベース接続とテーブルの接頭辞。
  • 部屋のタイムゾーンと夏時間の動作。
  • ログイン、ログアウト、有効期限、および管理者のマッピング。
  • パブリックビューとプライベートビュー。
  • 作成、編集、削除、繰り返し、およびポリシー境界。
  • 電子メールの送信者、受信者、および TLS。
  • レポート、エクスポート、キオスク、マルチサイトが使用されている場合。
  • パスワードや個人データを含まないログ。

推奨されるファイル レイアウト

ファイルは短くグループ化してください。

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

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

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

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

// Site-specific overrides
// ...

明白でないオーバーライドはすべて、インストールにそれが必要な理由を説明する必要があります。