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.
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
- Base system —
apt update/upgrade, installssudo curl git wget unzip. - SSH — installs and enables
openssh-server; on TurnKey Core containers enablesAllowTcpForwarding, on other distros enablesPermitRootLogin yes(needed for VS Code Remote-SSH / port tunneling). - Docker + Mosquitto — installs Docker Engine + Compose plugin, generates per-role Mosquitto broker credentials, brings up the
mosquittocontainer (MQTT on 1883, WebSockets on 9001). - Laravel + React stack — Apache, PHP + SQLite extension, Composer, Node.js, clones this repo into
backend/(Laravel) andfrontend/(Vite React-TS), sets permissions, configures an Apache vhost pointing atbackend/public, generates.env(DB, MQTT, Super Admin, Sanctum/CORS), runskey:generate,migrate, anddb:seed. - Queue worker — installs and starts a systemd unit (
<app-name>-queue) runningphp artisan queue:work, required for MQTT events to actually publish. - code-server — browser-based VS Code, so you can edit the app over SSH without a local editor.
- Claude Code —
npm install -g @anthropic-ai/claude-code. - 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 -- --hostthen tunnel port 5173. - Log in: the Super Admin credentials printed at the end of setup (also in
backend/.envasSUPER_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.