Frequently Asked Questions ========================== This FAQ collects recurring questions from the LibreBooking GitHub issues and discussions and points to the longer documentation when you need the full setup or configuration details. Why do I get a white page, HTTP 500, or ``Unknown Error`` after install or upgrade? ----------------------------------------------------------------------------------- Start with the basics: 1. Confirm that ``config/config.php`` exists and the database credentials are correct. 2. Confirm that ``tpl``, ``tpl_c``, and ``uploads`` are writable by the web server. 3. Confirm that the configured log directory is writable by the web server so LibreBooking can write error logs there. For example, some deployments use permissions such as ``0755``, but the exact mode depends on your server user and group setup. 4. Enable logging and set the log level to ``debug`` so the real exception is written to disk. 5. Re-check PHP requirements and loaded extensions. In practice, many "unknown error" reports come down to one of three causes: incorrect database credentials, missing Composer dependencies, or directory permission problems. See :doc:`INSTALLATION` and/or :doc:`BASIC-CONFIGURATION`. Related threads: - ``__ - ``__ - ``__ Why does LibreBooking fail with ``Class "Smarty" not found``? ------------------------------------------------------------- LibreBooking depends on Composer-managed PHP packages, including Smarty. If you deploy the source tree without running ``composer install``, the application will load PHP files from the repository but fail when it reaches a class provided by ``vendor/``. Install dependencies in the application root: .. code-block:: bash composer install --no-dev For development, use ``composer install`` instead. If you are deploying to shared hosting, run Composer before upload or on the target host if the host supports it. See :doc:`INSTALLATION`. Related thread: - ``__ Which URL should I use for the installer? ----------------------------------------- Use the ``Web`` directory with the correct case: .. code-block:: text https://example.com/Web/install On case-sensitive hosts, ``/web/install`` and ``/Web/Install`` are different paths and may return 404 or 500 errors even when the application is deployed correctly. You must also set ``install.password`` in ``config/config.php`` before the installer can run. See :doc:`INSTALLATION` and :doc:`BASIC-CONFIGURATION`. Related threads: - ``__ - ``__ Why do my URLs redirect to ``/Web/Web/``? ----------------------------------------- This usually means ``script.url`` is configured incorrectly. Set ``script.url`` to the base URL of LibreBooking's ``Web`` directory exactly once, for example: .. code-block:: php 'script.url' => 'https://example.com/librebooking/Web', Do not append ``/Web`` twice, and do not point it at a specific page such as ``/Web/index.php`` or ``/Web/schedule.php``. LibreBooking builds application links by appending page paths to ``script.url``, so a value that already contains an extra ``/Web`` will produce broken URLs such as ``/Web/Web/...``. See :doc:`BASIC-CONFIGURATION`. Related threads: - ``__ - ``__ What account do I use to sign in right after installation? ---------------------------------------------------------- There is no universal built-in administrator password for normal production installs. After installation, register an account using the email address configured as ``admin.email`` in ``config/config.php``. That user will receive administrator permissions. If self-registration is disabled, temporarily enable it so the administrator account can be registered with the configured ``admin.email`` address. See :doc:`INSTALLATION` and :doc:`BASIC-CONFIGURATION`. Related thread: - ``__ How do I hide reservation details from other users? --------------------------------------------------- Use the privacy settings in ``config/config.php``, especially ``privacy.view.reservations``. That setting controls whether users can see reservation details for resources they are not allowed to manage. If you need per-resource behavior instead of a global privacy policy, that is not a simple configuration toggle today and may require custom code or a workflow change. See :doc:`BASIC-CONFIGURATION`. Related thread: - ``__ Why does LDAP authentication fail after migrating from older versions? ---------------------------------------------------------------------- Check the LDAP host value in ``config/Ldap.config.php``. In LibreBooking, the host must include the LDAP scheme prefix, for example ``ldap://ldap.example.com`` or ``ldaps://ldap.example.com``. If you migrate settings from older Booked Scheduler or Librebooking versions and keep only the bare hostname, LDAP bind and login can fail even though the hostname itself is correct. See :doc:`LDAP-Authentication`. Related thread: - ``__ How do I configure Microsoft Entra ID / Azure AD login? ------------------------------------------------------- LibreBooking uses a server-side OAuth flow. In Microsoft Entra ID, register LibreBooking as a **Web** application, not a single-page application (SPA). Use: - Redirect URI: ``https://your-host/Web/microsoft-auth.php`` - A client secret **value**, not the secret ID - Standard OAuth endpoints for your tenant If Entra reports that PKCE is required, the app was likely registered as an SPA. If token exchange fails with an invalid secret error, verify that you copied the secret value and not the identifier shown beside it in the portal. Your IdP must also return the attributes LibreBooking needs. In practice, missing email claims can prevent auto-provisioning from succeeding. If you want new external-auth users to be created automatically on first login, enable ``registration.allow.self``. Otherwise new users can be redirected back with a self-registration-disabled error instead of being signed in. See :doc:`Oauth2-Configuration` and :doc:`ADVANCED-CONFIGURATION`. Related thread: - ``__ Can LibreBooking automatically create external-auth users and route them to the right schedule? ----------------------------------------------------------------------------------------------- LibreBooking can create users during external authentication, but custom tenant-specific behavior such as choosing a schedule by email domain or assigning groups automatically is not a simple configuration setting. For organization-specific routing, you will likely need to customize the external authentication flow so it updates fields such as ``default_schedule_id`` after the identity provider returns user data. See :doc:`Oauth2-Configuration` and :doc:`ADVANCED-CONFIGURATION`. Related thread: - ``__ What is the correct order for a manual database installation or upgrade? ------------------------------------------------------------------------ For a fresh manual install, use this order: 1. ``create-db.sql`` if you need LibreBooking to create the database 2. ``create-user.sql`` if you want to create a dedicated database user 3. ``create-schema.sql`` 4. All scripts in ``database_schema/upgrades/`` in version order 5. ``create-data.sql`` 6. ``sample-data-utf8.sql`` if you want demo data 7. ``sample-data-large-utf8.sql`` if you want a larger demo dataset (must be loaded after ``sample-data-utf8.sql``) Alternatively, the helper script ``database_schema/setup-database.sh`` automates these steps and optionally loads sample data. If your hosting control panel or DBA already created the database and database user, you can skip ``create-db.sql`` and ``create-user.sql`` and start with ``create-schema.sql``. For upgrades, run only the pending scripts from ``database_schema/upgrades/`` or use the supported upgrade tooling described in the installation guide. See :doc:`INSTALLATION`. Related threads: - ``__ - ``__ How should I approach a shared-hosting or cPanel deployment? ------------------------------------------------------------ Shared hosting can work, but it is less forgiving than Docker or a managed Linux host. At minimum, verify the following: - PHP 8.2 or newer is available. - Required PHP extensions are enabled. - ``composer install`` has been run. - ``config/config.php`` points at the correct database host, database name, user, and password. - ``tpl``, ``tpl_c``, and ``uploads`` are writable. - The application is served from the correct document root and URLs use ``/Web/...`` with the correct case. If your hosting panel prefixes database names and usernames, use those exact prefixed values in the LibreBooking database configuration. See :doc:`INSTALLATION` and :doc:`BASIC-CONFIGURATION`. Related threads: - ``__ - ``__