froiden/laravel-installer
A web-based installation wizard for Laravel applications that walks users through environment setup, database configuration, and initial app setup without the command line—simplifying first-run onboarding for distributed PHP apps.
composer require froiden/laravel-installer. Laravel auto-discovers Froiden\LaravelInstaller\Providers\LaravelInstallerServiceProvider via extra.laravel in the package composer.json; if you're on a Laravel version without package discovery, register it manually in config/app.php.php artisan vendor:publish --provider="Froiden\LaravelInstaller\Providers\LaravelInstallerServiceProvider". This gives you config/installer.php and the Blade views you'll override.config/installer.php — it's the control surface for the whole flow: the PHP/extension requirements list, writable-directory permission checks, route prefix and middleware, the post-install redirect target, and app/branding name. Almost every "how do I change X" question is answered here.app/Http/Kernel.php (or bootstrap/app.php on Laravel 11+) so GET / sends a fresh deployment to /install instead of a stack trace./install, walk through requirements → permissions → database credentials → migrate/seed → done, and land on your login screen. Your job is to make that path boring and safe..env keys (DB host, name, user, password, app URL)..env mapper. Keep an .env.example in the repo that mirrors exactly the keys the installer writes, and validate the inputs before they hit the file writer (see gotchas).Artisan::call('migrate') and optionally db:seed. If your product has required seeders or a demo-data toggle, wire that into the view and controller rather than telling users to run Artisan later.installer.redirect_to (usually /login or /admin)./install when the marker is absent. Once installed, either disable the routes entirely or add an "already installed" guard so re-running the wizard is impossible.config/installer.php with your own requirements entries (e.g. bcmath, intl); add a custom requirement class or closure rather than editing vendor code..env write permissions — the PHP-FPM user must own (or be group-writable on) .env. A passing permissions step followed by a silent failure usually means the web user differs from the CLI user who created the file./install open after success. The environment step can overwrite DB credentials; anyone hitting it post-install can brick or hijack the app. Gate on the installed marker and consider removing the package from production builds..env but Laravel may still serve cached config. Run config:clear, route:clear, and cache:clear at the end of the flow, or the app boots with the old connection..env quoting — values containing spaces, #, or = need quoting. The package's writer does not always sanitize; validate DB names/passwords and reject characters that would corrupt the file.APP_KEY — if the installer doesn't generate one for you, sessions and encrypted cookies will fail with a cryptic error. Generate the key as part of the completion step.exec/proc_open are often disabled, so any shell-based migrate call fails silently. Prefer Artisan::call('migrate') from PHP.composer.json constraints against your Laravel version. On Laravel 11+ middleware registration moved to bootstrap/app.php, and older installer versions assume Kernel.php.storage/logs/laravel.log while stepping through, and check storage/framework/ is writable.redirect_to — the most common support ticket is landing on a 404 after "Installation complete." Verify the path resolves to an actual route in your app.config/installer.php, the middleware, and custom requirement classes. Avoid editing vendor/froiden/laravel-installer directly; you lose the changes on the next composer update.How can I help you explore Laravel packages today?