ข้ามไปที่เนื้อหา

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

อย่าเพิ่มแท็กปิด ?> อาจทำให้เกิดเอาต์พุตโดยไม่ตั้งใจและทำลายส่วนหัวหรือคุกกี้

การตั้งค่าขั้นต่ำ

โดยปกติไซต์ใหม่จะต้องมีเขตเวลาของห้องและการเชื่อมต่อฐานข้อมูล:

$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 ได้ขึ้นอยู่กับไดรเวอร์ ใช้ 127.0.0.1 เพื่อบังคับ TCP สำหรับ MySQL พอร์ตที่ไม่ได้มาตรฐานสามารถระบุแยกกันได้:

$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 แล้ว ให้ทดสอบ:

  • เปลี่ยนเส้นทางหลังจากเข้าสู่ระบบ
  • ลิงก์ในอีเมล
  • URL ของ iCalendar;
  • ลิงก์ทางออกคีออสก์
  • ลิงก์หลายไซต์ และ
  • 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 ที่เกี่ยวข้องทั้งหมดเมื่อแทนที่รูปแบบแทนที่จะสร้างใหม่บางส่วน

กฎการจอง

กฎการจองหลายข้อเป็นของพื้นที่และได้รับการจัดการในฐานข้อมูล การตั้งค่าส่วนกลางสามารถกำหนดขีดจำกัดในพื้นที่หรือจำกัดความสามารถได้

เก็บการแทนที่นโยบายไว้ในส่วนที่มีป้ายกำกับชัดเจนและบันทึกเหตุผลทางธุรกิจ:

// 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 ต้องอ่านไฟล์ได้ เก็บไฟล์นี้ไว้นอกไดเรกทอรีเอกสารสาธารณะของเว็บเซิร์ฟเวอร์

ตัวแปรสภาพแวดล้อมสามารถอ่านได้อย่างชัดเจน:

$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

จากนั้นตรวจสอบ:

  • เวอร์ชันแอปพลิเคชันและฐานข้อมูลบน Help;
  • การเชื่อมต่อฐานข้อมูลและคำนำหน้าตาราง
  • เขตเวลาของห้องและพฤติกรรมการออมแสง
  • การเข้าสู่ระบบ การออกจากระบบ การหมดอายุ และการแมปผู้ดูแลระบบ
  • มุมมองสาธารณะและส่วนตัว
  • สร้าง แก้ไข ลบ การเกิดซ้ำ และขอบเขตนโยบาย
  • ผู้ส่งอีเมล ผู้รับ และ 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
// ...

การแทนที่ที่ไม่ชัดเจนทุกครั้งควรอธิบายว่าทำไมการติดตั้งจึงจำเป็นต้องมี