Lewati ke isi

config.inc.php secara mendalam

web/config.inc.php adalah file konfigurasi milik instalasi untuk MRBS. Ini berisi perilaku spesifik situs dan biasanya berisi rahasia. Perlakukan itu sebagai konfigurasi produksi, bukan sebagai file sumber aplikasi.

Buat filenya

MRBS dikirimkan web/config.inc.php-sample, namun sengaja tidak mengirimkan config.inc.php yang aktif.

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

Mulailah dengan sampel dari rilis MRBS yang sama. Jangan meneruskan sampel lama tanpa perubahan.

Bagaimana konfigurasi dimuat

Bootstrap bersama memuat konfigurasi dalam urutan ini:

  1. systemdefaults.inc.php
  2. areadefaults.inc.php
  3. config.inc.php
  4. site_config.inc
  5. validasi internal dan penanganan kompatibilitas

Tugas selanjutnya akan menggantikan tugas sebelumnya. Inilah sebabnya mengapa config.inc.php singkat dapat menggantikan default aplikasi tanpa mengubah file rilis.

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

Nilai area yang sudah disimpan dalam database diedit melalui Ruangan. Mengubah areadefaults.inc.php atau menimpa config.inc.php tidak menulis ulang area yang sudah ada.

Sintaks PHP

Konfigurasi merupakan kode PHP yang dapat dijalankan. Setiap pernyataan diakhiri dengan titik koma. String dapat menggunakan tanda kutip tunggal atau ganda:

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

Gunakan boolean PHP asli, bukan string:

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

Array dapat menggunakan sintaks PHP yang didukung:

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

Jangan tambahkan tag penutup ?>. Ini dapat menyebabkan keluaran yang tidak disengaja dan merusak header atau cookie.

Pengaturan minimal

Situs baru biasanya memerlukan zona waktu ruangan dan koneksi 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;

Gunakan zona waktu di mana ruangan berada. Ini dapat berbeda dari zona waktu server.

Konfigurasi basis data

Pilih basis data

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

atau:

$dbsys = 'pgsql'; // PostgreSQL

Perilaku koneksi

localhost dapat memilih soket Unix tergantung pada drivernya. Gunakan 127.0.0.1 untuk memaksa TCP untuk MySQL. Port non-standar dapat ditentukan secara terpisah:

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

PostgreSQL instalasi dengan beberapa skema dapat diatur:

$db_schema = 'public';

Awalan tabel harus sesuai dengan skema yang ditetapkan:

$db_tbl_prefix = 'mrbs_';

Koneksi persisten dinonaktifkan secara default. Aktifkan mereka hanya setelah mengukur kebutuhan nyata dan memahami interaksi mereka dengan transaksi dan kunci.

URL dan pengaturan proksi terbalik

MRBS biasanya mendapatkan URL-nya dari permintaan. Ketika proksi terbalik, awalan jalur, atau pengaturan host virtual yang tidak biasa membuat ini tidak dapat diandalkan, salin pengaturan URL yang relevan dari systemdefaults.inc.php dan tetapkan basis publik eksplisit.

URL eksternal harus menggunakan skema dan host yang dilihat oleh pengguna. Konfigurasikan proxy untuk meneruskan skema tepercaya dan informasi host, serta menolak header host yang tidak tepercaya.

Setelah mengubah perilaku URL, uji:

  • pengalihan setelah login;
  • tautan di email;
  • URL iCalendar;
  • tautan keluar kios;
  • tautan multisitus; dan
  • HTTP-ke-HTTPS pengalihan.

Autentikasi dan sesi

Autentikasi memverifikasi identitas; metode sesi memperoleh dan menyimpannya.

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

Sistem eksternal menambahkan pengaturannya sendiri, misalnya:

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

Jangan menyalin contoh pengguna atau kata sandi ke dalam produksi. Akses administrator peta secara eksplisit dan menguji pengguna normal serta administrator. Lihat Autentikasi.

Kontrol akses

Pengaturan di bawah $auth mengontrol visibilitas publik dan perilaku pemesanan istimewa:

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

Tinjau pengaturan terkait bersama-sama. Kalender publik, laporan publik, kios, dan pemesanan pribadi dapat memaparkan informasi yang berbeda.

Kalender dan antarmuka

Penggantian global yang umum meliputi:

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

Pemformatan tanggal dan waktu memperhatikan lokal. Salin seluruh entri $datetime_formats yang relevan saat mengganti format daripada merekonstruksinya sebagian.

Aturan pemesanan

Banyak aturan pemesanan yang dimiliki suatu area dan dikelola dalam database. Situasi global dapat memberikan batasan antar wilayah atau membatasi kemampuan.

Simpan penggantian kebijakan dalam satu bagian yang diberi label dengan jelas dan dokumentasikan alasan bisnisnya:

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

Uji pemesanan berulang, beberapa hari, dan administrator pada batas kebijakan.

E-mail

Pilih metode pengiriman, lalu konfigurasikan pengirim, penerima, peristiwa, dan transmisinya:

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

Tetap aktifkan verifikasi sertifikat. Lihat Pemberitahuan email.

Bahasa dan kata-kata lokal

Tetapkan bahasa default tetap hanya ketika negosiasi browser tidak sesuai:

$default_language_tokens = 'de';

Ganti label satu per satu tanpa mengedit 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';

Penggunaan $vocab_override mempertahankan kata-kata lokal selama peningkatan. Alur kerja lengkap tercakup dalam Teks dan terjemahan.

Bidang khusus

Kolom database khusus dapat diberi label dan dibentuk melalui konfigurasi:

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

Perubahan database harus diselesaikan terlebih dahulu. Kolom khusus entry memerlukan kolom yang identik di repeat. Lihat Bidang khusus untuk tipe yang didukung, contoh skema, validasi, privasi, urutan bidang, dan pengujian.

Sertakan rahasia dari file lain

config.inc.php dapat menyertakan file lain, tetapi jalurnya harus absolut:

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

File yang disertakan hanya boleh mengembalikan atau menetapkan nilai yang diharapkan dan harus dapat dibaca oleh proses PHP. Simpan file tersebut di luar direktori publik server web.

Variabel lingkungan juga dapat dibaca secara eksplisit:

$db_password = getenv('MRBS_DB_PASSWORD');

Validasi bahwa nilai yang diperlukan ada alih-alih menerima rahasia kosong secara diam-diam.

Multisitus

Multisite menggunakan konfigurasi global ditambah konfigurasi khusus situs di bawah sites/<site>/. Minimal, setiap situs memerlukan awalan tabel terisolasi:

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

Autentikasi, email, tema, dan pengaturan lainnya dapat berbeda di setiap situs. Lihat Multisitus.

Men-debug

Aktifkan perilaku debug hanya untuk sementara dan jangan pernah memaparkannya kepada pengguna yang tidak tepercaya. Output debug khusus integrasi dapat berisi data direktori, header, detail server email, atau informasi pribadi.

Tetap nonaktifkan pencatatan kredensial:

$auth['log_credentials'] = false;

Pemeliharaan yang aman untuk ditingkatkan

Untuk setiap peningkatan MRBS:

  1. Cadangkan konfigurasi aktif.
  2. Mulai dari rilis baru config.inc.php-sample.
  3. Bandingkan penggantian lama dengan default baru.
  4. Transfer hanya pengaturan yang disengaja.
  5. Hapus variabel usang yang dilaporkan oleh pemeriksaan kompatibilitas.
  6. Jalankan validasi sintaksis dan tes fungsional.

Hindari menyalin seluruh default lama ke dalam konfigurasi baru; yang menyembunyikan default baru dan mempersulit peningkatan selanjutnya.

Daftar periksa validasi

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

Kemudian verifikasi:

  • versi aplikasi dan database di Help;
  • koneksi database dan awalan tabel;
  • zona waktu ruangan dan perilaku musim panas;
  • login, logout, kadaluwarsa, dan pemetaan administrator;
  • pandangan publik dan pribadi;
  • membuat, mengedit, menghapus, mengulang, dan batasan kebijakan;
  • pengirim email, penerima, dan TLS;
  • laporan, ekspor, kios, dan multisite jika digunakan; dan
  • log tanpa kata sandi atau data pribadi.

Tata letak file yang disarankan

Jaga agar file tetap pendek dan dikelompokkan:

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

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

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

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

// Site-specific overrides
// ...

Setiap penggantian yang tidak jelas harus menjelaskan mengapa instalasi memerlukannya.