Ghassan Yusuf 7198895444 Serve frontend as static build behind Apache with API reverse-proxied
Build the React app during provisioning and serve it on :80 directly, proxying /api and /sanctum to an internal Laravel vhost on 127.0.0.1:8001. Fixes the login page not appearing at the container's root URL, since previously only the Laravel API vhost was configured and nothing served the built frontend.
2026-08-04 12:38:47 +03:00
2026-08-04 11:26:25 +03:00
2026-08-04 11:26:25 +03:00
2026-08-04 11:26:25 +03:00
2026-08-04 11:26:25 +03:00
2026-08-04 11:26:25 +03:00
2026-08-04 11:26:25 +03:00

webappAIO LXC Bootstrap

Spin up a fully configured development container in one step: SSH, Apache/PHP/SQLite, the Laravel API backend (backend/) + React/Vite frontend (frontend/) from this repo, a self-hosted Mosquitto MQTT broker (Docker), code-server, and Claude Code — all from a single command pasted into a fresh Proxmox LXC.

Quick start

In an empty, freshly created LXC, logged in as root:

curl -fsSL https://git.innovator.bh/ghassan/webappAIO/raw/branch/main/bootstrap.sh -o bootstrap.sh && bash bootstrap.sh

You'll be prompted for:

  • Project name
  • Seeded Super Admin email/username/password

The script always clones this repo (https://git.innovator.bh/ghassan/webappAIO.git) — the full RBAC + 2FA + MQTT-realtime + Users-management app described in claude-project-prompt.md — and always uses SQLite. Neither is prompted for.

When it finishes you'll have a running API, a Mosquitto broker, code-server, and Claude Code installed, plus a Super Admin account ready to log in with.

Fully unattended install

Skip every prompt by exporting variables before running the script (useful for scripted LXC provisioning):

APP_NAME=myapp \
SUPER_ADMIN_EMAIL=admin@myapp.test \
SUPER_ADMIN_USERNAME=admin \
SUPER_ADMIN_PASSWORD='change-me' \
INSTALL_CODE_SERVER=yes \
INSTALL_CLAUDE_CODE=yes \
bash bootstrap.sh
Variable Description Default
APP_NAME Project directory name under /var/www laravel-app
SUPER_ADMIN_EMAIL Seeded Super Admin email superadmin@example.com
SUPER_ADMIN_USERNAME Seeded Super Admin username superadmin
SUPER_ADMIN_PASSWORD Seeded Super Admin password random
INSTALL_CODE_SERVER Install code-server yes
INSTALL_CLAUDE_CODE Install Node.js + Claude Code yes
FIX_SSHD Auto-relax sshd config (TurnKey TCP forwarding / Ubuntu root login) yes

What the script does

  1. Base systemapt update/upgrade, installs sudo curl git wget unzip.
  2. SSH — installs and enables openssh-server; on TurnKey Core containers enables AllowTcpForwarding, on other distros enables PermitRootLogin yes (needed for VS Code Remote-SSH / port tunneling).
  3. Docker + Mosquitto — installs Docker Engine + Compose plugin, generates per-role Mosquitto broker credentials, brings up the mosquitto container (MQTT on 1883, WebSockets on 9001).
  4. Laravel + React stack — Apache, PHP + SQLite extension, Composer, Node.js, clones this repo into backend/ (Laravel) and frontend/ (Vite React-TS), sets permissions, configures an Apache vhost pointing at backend/public, generates .env (DB, MQTT, Super Admin, Sanctum/CORS), runs key:generate, migrate, and db:seed.
  5. Queue worker — installs and starts a systemd unit (<app-name>-queue) running php artisan queue:work, required for MQTT events to actually publish.
  6. code-server — browser-based VS Code, so you can edit the app over SSH without a local editor.
  7. Claude Codenpm install -g @anthropic-ai/claude-code.
  8. Prints a summary with the app path, container IP, Super Admin credentials, and next steps.

After install

  • Edit the app: code-server /var/www/<app-name> then open the tunneled port (8080) in your browser.
  • Use Claude Code: cd /var/www/<app-name> && claude
  • Run the frontend dev server: cd /var/www/<app-name>/frontend && npm run dev -- --host then tunnel port 5173.
  • Log in: the Super Admin credentials printed at the end of setup (also in backend/.env as SUPER_ADMIN_*).

Manual SSH config notes (if you skip FIX_SSHD)

TurnKey Core:

nano /etc/ssh/sshd_config.d/turnkey.conf
# set: AllowTcpForwarding yes

Ubuntu:

nano /etc/ssh/sshd_config
# set: PermitRootLogin yes

Standard Claude Code project prompt

For a consistent architecture baseline (mobile-first React frontend, Laravel API backend, RBAC, MQTT real-time updates, SQLite↔PostgreSQL portability, security-first defaults), start every new Claude Code session in the project with claude-project-prompt.md as the system/instruction prompt.

Description
No description provided
Readme 324 KiB
Languages
PHP 34.9%
TypeScript 33.7%
Blade 23.8%
Shell 4.2%
CSS 3.2%
Other 0.2%