Website & Admin Panel
Install on cPanel (shared hosting)
Shared hosting works for small-to-medium stores. The tricky part is pointing the domain at Laravel's public/ folder. This guide uses the cleanest approach.
1. Set the PHP version
In cPanel โ Select PHP Version (or MultiPHP Manager), choose 8.3 and enable the extensions listed in Server Requirements.
2. Create the database
- MySQLยฎ Databases Create a database (e.g.
user_bringo). - Create a user with a strong password.
- Add the user to the database with All Privileges.
Note the final database name, user and password โ you'll need them for .env.
3. Upload the files
Zip the bringo/ folder, upload it with cPanel File Manager (or FTP), and extract it above your web root โ e.g. to /home/USER/bringo (not inside public_html).
Point the domain at /public
Choose whichever your host supports:
- Best: in Domains set the domain's Document Root to
/home/USER/bringo/public. - Alternative: move the contents of
bringo/publicintopublic_html, then editpublic_html/index.phpso the tworequirepaths point up to/home/USER/bringo.
4. Make the app writable
In File Manager (or Terminal), make sure these folders are writable by PHP before the next step โ Composer's post-install hook and the installer both need them.
First change into the folder you extracted the app to, then use paths relative to it. Every command on this page assumes you are inside that folder:
# examples โ use YOUR actual path
cd ~/domains/your-domain.com/public_html/shop # extracted inside public_html
# or
cd ~/bringo # extracted above the web root
# confirm you are in the right place: this must list artisan and composer.json
ls artisan composer.json
chmod -R 775 storage bootstrap/cache
chmod reports "cannot access '/home/USER/storage': No such file or directory", you ran it against your home folder instead of the app folder โ cd into the app first, as above.5. Install PHP dependencies
The package ships source only โ no vendor/ folder โ so this step is required. Open cPanel โ Terminal and run:
composer install --no-dev --optimize-autoloader
php -v and list what is installed:
ls /usr/bin/php8* /opt/alt/php8*/usr/bin/php 2>/dev/null
Then put a supported binary first on your PATH for the rest of the session โ do not just prefix Composer, because the frontend build in step 7 shells out to php artisan internally and would pick up the old version again:
# CloudLinux / Hostinger layout โ adjust to match your ls output
export PATH=/opt/alt/php84/usr/bin:$PATH
php -v # confirm it changed
composer install --no-dev --optimize-autoloader
8.3 or any newer 8.x will do โ if one version misbehaves on your host, use the highest 8.x available. See Troubleshooting if a binary fails despite reporting the right version.
That export lasts only for the current SSH session; re-run it each time you reconnect. Your cron entry needs the full path spelled out (/opt/alt/php83/usr/bin/php /path/to/artisan schedule:run) because cron does not read your shell profile.6. Create .env
Copy the template โ this is required; the site cannot boot without a .env file:
cp .env.example .env
That's all. The app generates its own key on first request, and the install wizard (step 8) writes your database details and APP_URL into the file automatically. Only touch it later for advanced options โ see the .env Reference. Make sure the file is writable โ a read-only .env blocks both the auto-generated key and the wizard.
7. Build the frontend
The compiled assets are not in the package either, so this is also required. With Terminal + Node 20.19+ available:
npm ci
npm run build
npm on the server? That is common on shared hosting and perfectly fine. First check whether it is merely off your PATH:
which node npm
ls /opt/alt/alt-nodejs*/root/usr/bin/npm 2>/dev/null
export PATH=/opt/alt/alt-nodejs20/root/usr/bin:$PATH # if one was found
If there is genuinely no Node, run npm ci && npm run build on your own computer and upload the generated public/build/ folder to the server. The output is identical โ Node is only needed to compile the assets, never to run the site. The same applies to vendor/ if Composer will not run on the host either.npm run build before opening the site. The install wizard itself renders without it, but the storefront and admin panel it hands you over to cannot. Because APP_DEBUG is false in production you will not see a helpful message โ the page is a bare โServer Errorโ (HTTP 500), and the real cause (Vite manifest not found) is written to storage/logs/laravel.log. Always read that log before guessing. Note: the build shells into php artisan, so it must run after the Composer and .env steps.8. Run the install wizard
php artisan storage:link
If storage:link is blocked, create the symlink in File Manager, or point public/storage at ../storage/app/public. Then open your domain in a browser โ you are redirected to https://your-domain.com/install automatically. The wizard walks you through: requirements check โ your Envato purchase code โ the database details from step 2 โ automatic data install โ create your admin account โ store setup. No SQL import, no manual .env editing โ see Database Setup for what happens under the hood.
9. Cron job
cPanel โ Cron Jobs, add a job that runs every minute:
# use YOUR app path and the SAME PHP binary you used for composer
* * * * * cd /home/USER/domains/YOURDOMAIN/public_html/shop && /opt/alt/php84/usr/bin/php artisan schedule:run >> storage/logs/cron.log 2>&1
php โ cron does not read your shell profile, so the export PATH from step 5 does not apply here. Logging to storage/logs/cron.log instead of /dev/null lets you confirm it actually ran; a wrong binary otherwise fails silently forever.See Cron & Queue Workers for the queue worker (important for notifications).
10. Cache & go
php artisan config:cache
php artisan route:cache