49 lines
2.0 KiB
Markdown
49 lines
2.0 KiB
Markdown
# HomeOS
|
|
|
|
Self-built smart-home control plane — single household, self-hosted, LAN-first.
|
|
Laravel 13 · Livewire v3 · Tailwind v4 · PostgreSQL 17 + TimescaleDB · Redis/Horizon · Reverb.
|
|
|
|
Everything runs in Docker; the host needs **only Docker** (no PHP/Composer/Node).
|
|
Authoritative spec: [`handoff.md`](handoff.md) · conventions: [`rules.md`](rules.md) · guide: [`CLAUDE.md`](CLAUDE.md).
|
|
|
|
## First-run setup
|
|
|
|
```bash
|
|
cp .env.example .env # dev defaults work as-is
|
|
docker compose build # build the app image
|
|
docker compose run --rm app bash docker/app/bootstrap.sh # deps + key + assets + migrate/seed
|
|
docker compose up -d # start the full stack
|
|
```
|
|
|
|
> `docker compose up` alone is **not** the first command — `vendor/`, `node_modules`
|
|
> and `public/build` are not committed, so the bootstrap step above must run first.
|
|
|
|
Then open **http://localhost** and sign in with the seeded dev admin:
|
|
|
|
- **admin@homeos.local** / **homeos-dev** ← change this for anything but local dev.
|
|
|
|
For production, set strong values in `.env` for `DB_PASSWORD`, the `REVERB_APP_*`
|
|
keys and `HOMEOS_ADMIN_PASSWORD`, and run `php artisan key:generate`.
|
|
|
|
## Everyday commands (in-container, R8)
|
|
|
|
```bash
|
|
docker compose exec app php artisan … # artisan
|
|
docker compose exec app composer … # composer
|
|
docker compose exec app npm run build # rebuild assets (or `npm run dev` for HMR)
|
|
docker compose exec app php artisan test # test suite
|
|
docker compose logs -f app # logs
|
|
```
|
|
|
|
## Services & ports
|
|
|
|
| Service | Role | Host port |
|
|
|---|---|---|
|
|
| `app` | php-fpm + nginx + supervisor | `${APP_PORT:-80}` |
|
|
| `reverb` | websockets (proxied same-origin via nginx `/app`) | `${REVERB_HOST_PORT:-6001}` |
|
|
| `horizon` · `scheduler` | queue workers · cron | — |
|
|
| `db` | PostgreSQL 17 + TimescaleDB | `127.0.0.1:${DB_HOST_PORT:-5432}` |
|
|
| `redis` | cache / queue | — |
|
|
|
|
All ports and `HOST_UID`/`HOST_GID` are env-driven in `.env`.
|