94 lines
5.1 KiB
Markdown
94 lines
5.1 KiB
Markdown
# 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](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
|
|
- 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`](./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):
|
|
|
|
```bash
|
|
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 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 + 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 Code** — `npm 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:**
|
|
```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.
|