|
|
1 viikko sitten | |
|---|---|---|
| .claude | 1 viikko sitten | |
| .idea | 1 viikko sitten | |
| app | 1 viikko sitten | |
| config | 1 viikko sitten | |
| database/migrations | 1 viikko sitten | |
| docker | 1 viikko sitten | |
| docs | 1 viikko sitten | |
| framework | 1 viikko sitten | |
| public | 1 viikko sitten | |
| resources | 1 viikko sitten | |
| scripts | 1 viikko sitten | |
| storage | 1 viikko sitten | |
| tests | 1 viikko sitten | |
| .env.example | 1 viikko sitten | |
| .gitattributes | 1 viikko sitten | |
| .gitignore | 1 viikko sitten | |
| AGENTS.md | 1 viikko sitten | |
| CLAUDE.md | 1 viikko sitten | |
| Dockerfile | 1 viikko sitten | |
| command.php | 1 viikko sitten | |
| composer.json | 1 viikko sitten | |
| composer.lock | 1 viikko sitten | |
| docker-compose.yml | 1 viikko sitten | |
| phpunit.xml | 1 viikko sitten | |
| readme.md | 1 viikko sitten | |
| server.php | 1 viikko sitten | |
A warehousing app: define storage locations, create items, then receive, withdraw, and adjust stock, with an audit trail and low-stock email alerts.
To run the local development server, try:
export PHP_ENV=prod && php -S 127.0.0.1:8000 -t .
docker compose up -d --build
This starts two services:
33060 (only used if DB_CONNECTION=mysql)The default database connection is SQLite (database/database.sqlite), configured via DB_CONNECTION in .env / docker-compose.yml. On first boot the app container automatically creates the SQLite file with the correct permissions and runs migrations. To switch to MySQL instead, set DB_CONNECTION=mysql in docker-compose.yml.
To run migrations manually (e.g. after adding a new migration file):
docker compose exec app php command.php migrate
docker compose exec app php command.php migrate --fresh # drops all tables first, for a clean slate
A SQLite admin UI is available at http://localhost:9091, password admin (change it via the PHPLITEADMIN_PASSWORD environment variable in docker-compose.yml). It's a development-only tool — don't expose this port outside your local machine.
Note: host ports 9092/9091 map to the app's internal 80/8081 — the host side is deliberately different from the container side because Windows reserves 8081 and 9090 in its dynamic TCP port exclusion range (Hyper-V/WSL2), which blocks Docker from binding either. Check with netsh interface ipv4 show excludedportrange protocol=tcp if you hit a similar “ports are not available ... forbidden by its access permissions” error on another port.
This app is built on a small custom MVC framework in framework/. See docs/framework.md for how routing, controllers, views, models/migrations, validation, sessions, caching, queues, and the CLI commands all work.
If you want to run this app directly on a Raspberry Pi with nginx and php-fpm, see docs/deploy-raspberry-pi.md and use scripts/deploy-raspi.sh.
Powered by TurnKey Linux.