webappAIO/README.md
2026-08-04 11:26:25 +03:00

5.1 KiB

webappAIO LXC Bootstrap

Spin up a fully configured development container in one step: SSH, Apache/PHP/MariaDB or SQLite, a Laravel API backend (backend/) + React/Vite frontend (frontend/), 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
  • Git repository to clone (leave blank to scaffold a bare backend/frontend pair instead — see below)
  • Database: mysql or sqlite
  • MariaDB username/password/database (only if you chose mysql)
  • Seeded Super Admin email/username/password

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.

Blank GIT_REPO vs. cloning this repo

  • Blank scaffolds a fresh Laravel install in backend/ and a fresh Vite React-TS app in frontend/, with the core packages already required (Sanctum, spatie/laravel-permission, pragmarx/google2fa-laravel, php-mqtt/laravel-client) — the foundation to build the rest of claude-project-prompt.md's architecture on top of, not the finished app.
  • GIT_REPO=https://git.innovator.bh/ghassan/webappAIO.git clones this repo, which already contains the full RBAC + 2FA + MQTT-realtime + Users-management implementation described in that prompt.

Fully unattended install

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

APP_NAME=myapp \
GIT_REPO="" \
DB_TYPE=sqlite \
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
GIT_REPO Git URL to clone; blank scaffolds a bare backend/frontend pair (blank)
DB_TYPE mysql or sqlite sqlite
DB_USER MariaDB username (mysql only) laravel_user
DB_PASS MariaDB password (mysql only) random
DB_NAME MariaDB database name (mysql only) laravel_db
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 + required extensions, MariaDB or SQLite, Composer, Node.js, clones or scaffolds 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, DB type, 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.