This is a Laravel + Vue.js e-commerce template that will make it easy for you to start your own online store.
Stack: Laravel 12 + Vue 3 + Inertia + PrimeVue, served by RoadRunner (Laravel Octane) with MariaDB for storage. Queues, retries and the Horizon dashboard run on Redis — the old Temporal workflows were replaced by sync controllers and Laravel Jobs.
Production: https://shop.cloud-workflow.com
- Setup docker and docker-compose on your local machine.
- Create the
.local_datafolder in the root directory of the project. - Install git. Fetch this project from Github (git clone).
- Copy
.env.exampleand rename it to.env. Edit the file (database connection). - Run
docker compose up(you may need to restart it 3-4 times on a first boot). - Front-end assets:
cd frontend && npm install(npm run buildwritespublic/build, which is committed).
Populate the database
docker compose exec roadrunner /bin/bash
composer install
php artisan migrate
php artisan db:seed --class=DatabaseSeeder
localhost— main applocalhost:8025— Mailhog (catches outgoing dev mail)localhost:3307— MariaDB,localhost:6380— Redis
docker compose exec -T roadrunner php artisan test
They run against the shop_test database inside the same MariaDB container (second schema, created by
.docker/mariadb/init/), so RefreshDatabase never touches the dev shop database.
HTTPS locally
mkdir ssl && cd ssl && mkcert -install
(the certificate files in ssl/ are gitignored)
Development runs QUEUE_DRIVER=sync, so jobs execute inline and no worker is needed. To exercise the worker path:
docker compose exec roadrunner php artisan horizon
The dashboard lives at /horizon and is only reachable by a logged-in admin (see
App\Providers\HorizonServiceProvider).
To reset the RoadRunner server execute
docker compose exec roadrunner rr -c /etc/.rr.yaml reset
To observe RoadRunner workers execute
docker compose exec roadrunner rr -c /etc/.rr.yaml workers -i
Reset after changing routes or rebuilding assets: the workers cache both the routes and the Vite manifest.
How to use xdebug with roadrunner
. Set in the rr settings: pool.num_workers: 1, pool.debug: false.
If you have any active XDebug listener while starting RoadRunner with XDebug enabled — disable it. This will prevent false-positive debug session.
Start server, enable listener and run:
docker compose exec roadrunner rr -c /etc/.rr.yaml reset http
Docker Compose stack (compose.yaml): RoadRunner + Horizon + MariaDB + Redis, with nginx running on the host and
proxying TLS-terminated traffic to RoadRunner. The deploy steps, the server-side .env layout and the traps worth
knowing are documented in AGENTS.md; the host nginx vhost is in
.docker/nginx/prod/.
Uladzimir Sadkou: hofirma@gmail.com
