לדלג לתוכן

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 יכול לבחור שקע יוניקס בהתאם למנהל ההתקן. השתמש ב-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 בדרך כלל שואב את כתובת האתר שלו מהבקשה. כאשר פרוקסי הפוך, קידומת נתיב או הגדרה חריגה של מארח וירטואלי הופכים את זה לא אמין, העתק את הגדרות כתובת האתר הרלוונטיות מ-systemdefaults.inc.php והגדר בסיס ציבורי מפורש.

כתובת האתר החיצונית חייבת להשתמש בסכימה ובמארח שראו המשתמשים. קבע את התצורה של ה-proxy כך שיעביר מידע מהימן על סכימה ומארח, ודחה כותרות מארח לא מהימנות.

לאחר שינוי התנהגות כתובת האתר, בדוק:

  • הפניות מחדש לאחר הכניסה;
  • קישורים באימייל;
  • כתובות אתרים של 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');

ודא שהערך הנדרש קיים, ואל תקבל ערך סודי ריק ללא התראה.

ריבוי אתרים

Multisite משתמש בתצורה גלובלית בתוספת תצורה ספציפית לאתר תחת 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
// ...

כל עקיפה לא ברורה צריכה להסביר מדוע ההתקנה זקוקה לכך.