# Deploying PQS on XAMPP Lite 8.5 (on-demand) PQS runs from a **portable XAMPP Lite 8.5** stack (PHP 8.5 + MariaDB 11.4 + Apache) so the whole system can be stood up on demand at a venue with no internet. This folder holds the one-shot database installer. > For the full, verified step-by-step (including the headless/scripted method > and validation results), see **[DEPLOYMENT-WALKTHROUGH.md](DEPLOYMENT-WALKTHROUGH.md)**. > This page is the short version. ## Stack layout (this XAMPP Lite build) ``` xampp_lite_8_5\ XL-Control-Panel.x64.exe <- start/stop Apache + MySQL here apps\apache\ <- Apache (serves PHP 8.5 as a module) apps\mysql\ <- MariaDB 11.4 (root, no password) apps\php\ <- PHP 8.5 www\ <- document root (http://localhost/ -> www\) ``` ## Quick start 1. **Drop the app into the web root**, named `pqs`: ``` xampp_lite_8_5\www\pqs\ ``` (The app uses `/pqs/...` URLs, so the folder must be `pqs`.) 2. **Start Apache + MySQL** from `XL-Control-Panel.x64.exe`. 3. **Create the database** (one time). From `apps\mysql\bin`: ``` mysql.exe -u root < ..\..\..\www\pqs\install\pqs_install.sql ``` Or import `install\pqs_install.sql` via phpMyAdmin (http://localhost/phpmyadmin). This creates the `pqs` database, the `pqs`/`pqs` user, every table (all InnoDB) and the static seed (mechs, maps, game types, default config, pods). 4. **Open the app:** | Screen | URL | |--------|-----| | Registration kiosk | http://localhost/pqs/callsign.php | | Registration console | http://localhost/pqs/registration.php | | Game/ops console | http://localhost/pqs/console.php | | Queue wall | http://localhost/pqs/combinedqueue.php | No build step, no internet. ## Notes - **Credentials.** The app connects as `pqs`/`pqs` on `localhost` (see `includes/db.php`) — a formality on an air-gapped LAN. - **Timezone.** Set once in `includes/db.php` (`PQS_TIMEZONE`, default `America/Chicago`). - **PHP target.** Code targets PHP 7.4+; verified on XAMPP Lite's **PHP 8.5.5** with zero warnings/deprecations from app code. - **`time.php` (optional clock sync).** Uses PowerShell `Set-Date` on Windows, which only works if Apache runs **as administrator**. Skip it if the host clock is already correct. ## Re-running / resetting The installer is **not** idempotent for the seed data — re-running it duplicates rows and fails on the `gameconfig` unique key. To reset to a clean database: ```sql DROP DATABASE pqs; ``` then load `pqs_install.sql` again. (The `CREATE DATABASE/USER ... IF NOT EXISTS` lines are harmless on their own; it's the seed `INSERT`s that must not run twice.) ## Fresh install vs. upgrading an existing DB - **Fresh XAMPP deploy →** use `install/pqs_install.sql` (this folder). Every table is created as InnoDB, so no migrations are needed. - **Upgrading a pre-existing (older MyISAM) database →** run the incremental `dev/migrations/001-*.sql` and `002-*.sql` instead, which convert the affected tables to InnoDB in place.