Files
CydandClaude Opus 4.8 f9f1dd2d13 Document verified XAMPP Lite 8.5 deployment + add launcher
- install/DEPLOYMENT-WALKTHROUGH.md: full verified runbook (operator + headless
  methods) from an actual deploy — PHP 8.5.5 + MariaDB 11.4.10 + Apache,
  app at www/pqs, DB provisioned via installer, registration/commit verified,
  zero PHP 8.5 warnings from app code.
- install/start-pqs.bat: one-command launcher (starts MariaDB + Apache, sets the
  XAMPP_LITE_ROOT/SRVROOT placeholders, provisions the DB on first run).
- install/README.md: aligned to this stack's layout (apps/, www/, control panel);
  corrected the installer 'safe to re-run' note (seed inserts are not idempotent).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 15:34:09 -05:00

80 lines
3.0 KiB
Markdown

# 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.