ORVIAN ships with aDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/Elian-D/ORVIAN/llms.txt
Use this file to discover all available pages before exploring further.
compose.yaml powered by Laravel Sail using a PHP 8.5 runtime. The stack bundles everything you need: the Laravel application server, MySQL 8.4 as the primary database, Redis for cache and queues, Mailpit for local email testing, and phpMyAdmin for database inspection — all wired together in a single Bridge network called sail.
Services
The following services are defined incompose.yaml:
| Service | Image | Exposed Port(s) | Purpose |
|---|---|---|---|
laravel.test | sail-8.5/app | ${APP_PORT:-80} · ${VITE_PORT:-5173} | Laravel application + Vite HMR |
mysql | mysql:8.4 | ${FORWARD_DB_PORT:-3306} | Primary relational database |
mailpit | axllent/mailpit:latest | ${FORWARD_MAILPIT_PORT:-1025} (SMTP) · ${FORWARD_MAILPIT_DASHBOARD_PORT:-8025} (dashboard) | Local email capture and inspection |
phpmyadmin | phpmyadmin:latest | 8080 | MySQL web UI (connects to the mysql service) |
redis | redis:alpine | ${FORWARD_REDIS_PORT:-6379} | Cache, sessions, and queues |
laravel.test container depends on mysql, mailpit, and redis. Both mysql and redis include health checks that retry up to 3 times before the app container is considered ready.
The
laravel.test service declares an extra_hosts entry that maps host.docker.internal to the host gateway. This allows the container to reach services running directly on your host machine — most notably the optional Python facial-recognition microservice (FACIAL_API_URL=http://host.docker.internal:8001) that runs outside the Compose network.First-Time Setup with Docker
Copy the environment file
.env.example already contains sensible defaults for a Docker environment. You only need to fill in the values specific to your installation.Configure the database connection
Open Use
.env and set the MySQL credentials. These values are passed directly to the mysql container via its MYSQL_* environment variables:DB_HOST=mysql — the service name — not 127.0.0.1, so that Laravel resolves the container hostname correctly within the Compose network.Configure Redis for production-like behaviour
Switch all real-time drivers to Redis so the queue worker, session store, and cache all share the same Redis instance:
Start all services
If Sail’s vendor binary is already available:If you haven’t run Alternatively, if you have Docker Compose available directly:
composer install yet (fresh clone), install dependencies on the host first, then start Sail:Run migrations and seed the database
Development Without Docker
ORVIAN defaults to SQLite in.env.example (DB_CONNECTION=sqlite), making local development possible without running any database server. Laravel creates the SQLite file at database/database.sqlite automatically.
To start every development process concurrently with a single command:
concurrently:
php artisan serve— Laravel development serverphp artisan queue:listen --tries=1 --timeout=0— Queue workerphp artisan pail --timeout=0— Real-time log viewernpm run dev— Vite HMR dev server
Production Considerations
When deploying ORVIAN to a production server, keep the following in mind:- Set
APP_ENV=productionandAPP_DEBUG=false— never expose debug output or stack traces to end users. - Use MySQL or MariaDB (
DB_CONNECTION=mysql) — SQLite is unsuitable for concurrent multi-tenant workloads. - Use Redis for all real-time drivers — set
CACHE_STORE=redis,SESSION_DRIVER=redis, andQUEUE_CONNECTION=redisfor reliability and horizontal scalability. - Run a supervised queue worker — use
php artisan queue:workunder Supervisor, systemd, or a similar process manager. For simpler single-server setups,QUEUE_CONNECTION=databaseis an acceptable alternative. - HTTPS is required — the biometric scanner feature uses the browser’s
getUserMedia()API to access the webcam. All modern browsers restrict this API to secure origins (HTTPS orlocalhost). - Set
APP_URLcorrectly — this value is used to generate signed URLs, password-reset links, and QR code endpoints. An incorrectAPP_URLwill break these features. - Cache framework bootstrap artifacts for maximum throughput:
- Invalidate the version cache after each deployment so the UI reflects the correct version number:
Volumes
Two named Docker volumes persist data between container restarts:| Volume | Mounted at | Purpose |
|---|---|---|
sail-mysql | /var/lib/mysql | MySQL data directory — all database files |
sail-redis | /data | Redis persistence (RDB snapshots) |
local driver and are managed by Docker. Deleting these volumes (docker volume rm) is permanent — make sure to take database backups before pruning them.