# 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](https://code-server.dev), and [Claude Code](https://docs.claude.com/en/docs/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: ```bash 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`](./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): ```bash 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 system** — `apt 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 (`-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 Code** — `npm 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/` then open the tunneled port (8080) in your browser. - **Use Claude Code:** `cd /var/www/ && claude` - **Run the frontend dev server:** `cd /var/www//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:** ```bash nano /etc/ssh/sshd_config.d/turnkey.conf # set: AllowTcpForwarding yes ``` **Ubuntu:** ```bash 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`](./claude-project-prompt.md) as the system/instruction prompt.