PHP Applications
Last updated
15 PHP apps, one wizard, one install pipeline. ADR-0033.
Looking for something else? Docker Apps covers Immich, Paperless-ngx, ownCloud, Vaultwarden and 30+ others as one-click compose stacks. Python Apps covers WSGI/ASGI hosting behind nginx.
Registry
CMS & wikis
Learning & portfolio
Files & media
E-commerce
Forums
Business & marketing
Notes
| App | DB | Notes |
|---|---|---|
| WordPress | MariaDB | Primary citizen (M10). Single-use SSO drop-in. Clone supported. |
| Moodle | MariaDB / PostgreSQL | Heavy. Recommend ≥2 GB RAM on the install’s docroot user. |
| Drupal | MariaDB / PostgreSQL | Composer-based install. |
| NextCloud | MariaDB | Requires Redis + cron, both auto-wired. |
| OpenCart | MariaDB | cli_install.php failure-mode caveat handled (26-char ULID truncated to ≤20). |
Install pipeline
Every app uses the same 6-step pipeline:
- Pre-flight: verify the destination directory is empty, the chosen DB engine is available, the user has quota headroom, the chosen path is not already an install.
- DB provisioning: create DB + DB user via the agent.
- Download: fetch the app from upstream (cached on the panel host for repeat installs).
- Configure: write the app’s config file with DB creds + admin user + site URL.
- Install: call the app’s
cli_install/wp core install/ equivalent. Scan stdout forERROR:markers and a “success” sentinel (silent-exit-0 scar, OpenCart in particular exits 0 on failure). - SSO drop-in: write the single-use, self-deleting
jabali-sso-<token>.phpshim into the install dir (60 s TTL).
Admin controls
/jabali-admin/applications, per-app:
- Global enable/disable (users can’t install disabled apps).
- Pinned version (vs. “latest”).
- Per-app PHP extension prerequisites (validated against the user’s PHP version pool).
User flow
/jabali-panel/applications:
- Lists installed apps (with version, install path, last update).
- “Install new” → app picker → install wizard.
- “Open Admin” → single-use SSO drop-in (60 s TTL).
- “Update” → manual update (separate from auto-update timer).
- “Clone” → currently WP-only, others on the roadmap.
- “Delete” → destructive teardown.
CLI
jabali app list [--user <id>]
jabali app install --user <id> --domain <name> --app wordpress
jabali app delete <install-id>