🏠 Installing on Shared Hosting
Many of our users run Monitron SaaS on shared hosting — and that's totally fine! Shared hosting providers like cPanel, Plesk, DirectAdmin, and CyberPanel are fully supported.
This guide walks you through every single step, from uploading files to getting your first monitor running. No SSH or terminal access needed! Monitron SaaS is a true plug-and-play solution. 🎉
Zero artisan commands required! The Installation Wizard handles everything automatically — database migrations, encryption key generation, storage linking, and more. You just fill in the forms, and Monitron does the rest.
🤔 Can I Really Run Monitron on Shared Hosting?
Yes! Monitron SaaS is designed to work on shared hosting. Here's what you need:
| Requirement | Minimum | Notes |
|---|---|---|
| PHP Version | 8.4+ | Most modern hosts offer PHP 8.4 |
| MySQL / MariaDB | 5.7+ / 10.3+ | Almost always included |
| Storage Space | 100 MB+ | For the application files |
| Cron Jobs | At least 1 | Required for monitoring to work |
Shared hosting limitations to be aware of:
- Some hosts disable PHP functions like
exec(),proc_open(), orshell_exec()— Monitron works without them, but the Ping (ICMP) monitor type may not be available. - Some hosts limit cron jobs to every 5 or 15 minutes — this means your minimum check interval will be 5 or 15 minutes instead of 1 minute.
- Some hosts limit outgoing connections — this could affect monitors that check external ports (TCP, SMTP, etc.).
- Queue workers run via cron instead of Supervisor — slightly less real-time, but perfectly functional.
If your host supports Node.js or SSH access, you may have more flexibility. But this guide assumes you have only a basic cPanel-style control panel — no terminal access needed.
📋 Step-by-Step Overview
Here's what we'll do — all from your hosting control panel, no command line needed:
- ✅ Check your hosting meets the requirements
- 📦 Upload the files
- 📂 Set the document root (public folder alignment)
- 🗄️ Create a database
- 🧙 Run the Installation Wizard (handles everything else automatically!)
- ⏰ Set up the cron job
- ✅ Verify everything works
That's it — 7 simple steps, all done through your browser! 🚀
Let's go! 👇
✅ Step 1: Check Your Hosting Requirements
Before you begin, log into your hosting control panel and verify:
Check PHP Version
In cPanel:
- Go to "Select PHP Version" or "MultiPHP Manager"
- Make sure your domain is set to PHP 8.4 or higher
- If not, change it — most hosts let you switch PHP versions instantly
In Plesk:
- Go to Websites & Domains → your domain → PHP Settings
- Select PHP 8.4+ from the dropdown
- Click Apply
In DirectAdmin:
- Go to Domain Setup → your domain
- Click PHP Version
- Select 8.4 or higher
Check Required PHP Extensions
Most shared hosts include all required extensions. But double-check these are enabled:
BCMathCtypecURLDOMFileinfoJSONMbstringOpenSSLPDO(withpdo_mysql)TokenizerXMLZip
In cPanel → Select PHP Version → Extensions tab — check all the boxes above.
Don't worry if you miss one! The Installation Wizard in Step 5 will check all requirements and tell you exactly what's missing.
📦 Step 2: Upload the Files
You have two options for uploading:
Option A: Upload via File Manager (Easiest)
- Log into your hosting control panel (cPanel, Plesk, etc.)
- Open the File Manager
- Navigate to your home directory (usually
/home/yourusername/) - Upload the
monitron-saas.zipfile here (NOT insidepublic_html!) - Extract the ZIP file — this creates a
monitron/folder - You should now have
/home/yourusername/monitron/with all the app files
Option B: Upload via FTP
- Connect to your server using an FTP client (FileZilla, WinSCP, Cyberduck)
- Use the FTP credentials from your hosting panel
- Navigate to
/home/yourusername/ - Upload the extracted
monitron/folder here
🚨 Do NOT upload everything into public_html! The application files must be placed outside of the public directory for security. Only the contents of the public/ folder should be web-accessible.
Set Folder Permissions
After uploading, make sure these folders are writable. In your File Manager:
- Navigate to
/home/yourusername/monitron/storage/ - Right-click → Change Permissions → set to
755(or775if 755 doesn't work) - Check the box "Apply to all subdirectories and files" (recursive)
- Do the same for
/home/yourusername/monitron/bootstrap/cache/
📂 Step 3: Public Folder Alignment (CRITICAL!)
This is the most important step on shared hosting. Your web server's document root (usually public_html) must serve the contents of Monitron's public/ folder.
There are three ways to do this. Pick the one that works for your hosting:
Method A: Change Document Root (Recommended) ⭐
This is the cleanest approach. Point your domain's document root directly to the Monitron public/ folder.
In cPanel:
- Go to "Domains" or "Subdomains"
- Click "Create a New Domain" (or modify existing)
- Set the Document Root to:
/home/yourusername/monitron/public - Save
In Plesk:
- Go to Websites & Domains → Hosting & DNS → Hosting Settings
- Change Document Root to:
/home/yourusername/monitron/public - Click OK
In DirectAdmin:
- Go to Domain Setup
- Edit your domain
- Set the Document Root (public_html) path to:
/home/yourusername/monitron/public
This method is the safest because the application code lives completely outside the web root. No .env file or source code is ever accessible from the web.
Method B: Symlink (If You Can't Change Document Root)
If your host doesn't let you change the document root, you can create a symbolic link from public_html to Monitron's public/ folder.
Using cPanel File Manager → Terminal (if available):
# First, back up and remove the existing public_html
cd /home/yourusername
mv public_html public_html_backup
# Create a symlink
ln -s /home/yourusername/monitron/public public_html
If you don't have terminal access, some File Manager tools allow creating symlinks. Or ask your host's support to create it for you — it takes them 30 seconds!
Some shared hosts disable symlinks for security reasons. If this method doesn't work, try Method C.
Method C: Copy Public Files + Modify index.php
If you can't change the document root OR create symlinks, you can copy the public files and modify the entry point.
-
Copy everything from
monitron/public/intopublic_html/:monitron/public/* → public_html/This includes
index.php,.htaccess,favicon.ico,robots.txt,build/folder, etc. -
Edit
public_html/index.phpusing the File Manager's code editor — you need to update two lines:Find this line:
require __DIR__.'/../vendor/autoload.php';Change to:
require '/home/yourusername/monitron/vendor/autoload.php';Find this line:
$app = require_once __DIR__.'/../bootstrap/app.php';Change to:
$app = require_once '/home/yourusername/monitron/bootstrap/app.php'; -
Edit
monitron/bootstrap/app.php— add the public path override. Add this line after the$appis created:$app->usePublicPath('/home/yourusername/public_html');This tells Laravel where the public folder actually lives.
Replace /home/yourusername/ with your actual home directory path. You can find this in cPanel under "Server Information" or by looking at the File Manager's path bar.
When upgrading Monitron, remember to re-copy the public files and re-apply the index.php changes if using Method C. Methods A and B don't have this issue.
🗄️ Step 4: Create a Database
In cPanel:
- Go to "MySQL® Databases"
- Create a new database — e.g.,
yourusername_monitron - Create a new database user — e.g.,
yourusername_monuser - Set a strong password (save it, you'll need it!)
- Add the user to the database with ALL PRIVILEGES
In Plesk:
- Go to Databases → Add Database
- Database name:
monitron - Create a database user with a strong password
- Click OK
In DirectAdmin:
- Go to MySQL Management
- Create a new database and user
- Grant all privileges
Write down these three values — you'll need them in the next step:
- Database name (e.g.,
yourusername_monitron) - Database username (e.g.,
yourusername_monuser) - Database password
🧙 Step 5: Run the Installation Wizard
Now open your browser and go to:
https://your-domain.com/install
The wizard does EVERYTHING for you automatically:
- ✅ Generates a secure encryption key (APP_KEY)
- ✅ Creates the
.envconfiguration file - ✅ Runs all database migrations (creates tables)
- ✅ Creates the storage symlink
- ✅ Creates your admin account
- ✅ Sets up your first team
- ✅ Configures application settings
- ✅ Clears and optimizes caches
No terminal. No SSH. No artisan commands. Just fill in the forms!
The wizard walks you through these screens:
Screen 1: Welcome
Just a friendly intro. Click Next to continue.
Screen 2: Requirements Check
The wizard checks your PHP version, extensions, and folder permissions. If anything is red:
- PHP version too low? → Change it in your hosting panel (see Step 1)
- Missing extension? → Enable it in "Select PHP Version" → Extensions tab
- Folder not writable? → Set permissions to 755 or 775 (see Step 2)
Screen 3: Database Setup
Enter the database credentials you created in Step 4:
- Database Driver: MySQL (default)
- Host:
localhost(almost always correct on shared hosting) - Port:
3306(default for MySQL) - Database Name: e.g.,
yourusername_monitron - Username: e.g.,
yourusername_monuser - Password: the password you set
Click Test Connection — if it says "Connected!", you're good!
Screen 4: Admin Account
Fill in your details:
- Your Name: Your full name
- Email: Your email address (this is your login)
- Password: Choose a strong password
- App Name: e.g., "My Monitoring" or your company name
- App URL:
https://your-domain.com - Timezone: Select your timezone
Click Install and wait a few seconds while the wizard sets everything up.
Screen 5: Server Config
Shows you the cron job command you'll need (covered in the next step). Take note of it!
Screen 6: Complete! 🎉
You're done! Click the link to go to your dashboard.
👉 See the Installation Wizard page for a detailed walkthrough with more info on each step.
⏰ Step 6: Set Up the Cron Job
The cron job is the only thing you need to configure outside the wizard — and it's just clicking a few buttons in your hosting panel.
The cron job triggers monitoring checks. Without it, Monitron won't check your monitors!
In cPanel:
- Go to "Cron Jobs"
- Under "Add New Cron Job":
- Common Settings: Select "Once Per Minute ( * * * )"
- If your host only allows every 5 minutes, select **"Every 5 Minutes (/5 * * * )"
- Command:
cd /home/yourusername/monitron && php artisan schedule:run >> /dev/null 2>&1 - Click "Add New Cron Job"
In Plesk:
- Go to Scheduled Tasks (under your subscription)
- Click "Add Task"
- Task type: Run a command
- Command:
cd /home/yourusername/monitron && php artisan schedule:run >> /dev/null 2>&1 - Run: Every minute (or as frequently as your host allows)
In DirectAdmin:
- Go to Cron Jobs
- Add a new cron job with:
- Minute:
*(or*/5) - Hour:
* - Day of Month:
* - Month:
* - Day of Week:
* - Command:
cd /home/yourusername/monitron && php artisan schedule:run >> /dev/null 2>&1
- Minute:
Not sure about the PHP path? Some hosts require the full path to PHP. If the command above doesn't work, try replacing php with the full path:
Common PHP paths:
/usr/bin/php/usr/local/bin/php/usr/local/bin/ea-php84(EasyApache on cPanel)/opt/cpanel/ea-php84/root/usr/bin/php(cPanel with MultiPHP)/opt/plesk/php/8.4/bin/php(Plesk)
Example with full path:
cd /home/yourusername/monitron && /opt/cpanel/ea-php84/root/usr/bin/php artisan schedule:run >> /dev/null 2>&1
If your host only allows cron every 5 or 15 minutes, Monitron will still work! But your monitors will only be checked at that interval. For most websites, this is perfectly acceptable.
What About Queue Workers?
On a VPS you'd normally run a separate queue worker process. On shared hosting, you don't need to! Monitron's scheduler automatically processes queued jobs during each cron run. The single cron job handles both scheduling AND queue processing.
If you want slightly faster queue processing, you can add a second cron job (optional):
cd /home/yourusername/monitron && php artisan queue:work --stop-when-empty --max-time=55 >> /dev/null 2>&1
But this is completely optional — the default setup works great for most users.
Alternative: Sync Queue Driver (Zero Cron Setup for Queues)
If you want the absolute simplest setup, you can tell Monitron to process everything immediately instead of queuing it. After installation, go to your Monitron dashboard:
- Navigate to Settings → General
- Or edit the
.envfile and change:QUEUE_CONNECTION=sync
This means checks run instantly when the scheduler fires. Fine for under 20 monitors.
✅ Step 7: Verify Everything Works
1. Log into the Dashboard
Visit https://your-domain.com/admin and log in with the admin credentials you created in the wizard.
2. Create a Test Monitor
- Click "Monitors" in the sidebar
- Click "New Monitor"
- Select "HTTP(S)" as the type
- Enter
https://www.google.comas the address - Set the interval to 1 minute (or 5 minutes if your cron is limited)
- Click "Create"
3. Wait for a Check
- Wait for the next cron run (1-5 minutes depending on your cron interval)
- Refresh the page
- The monitor status should change from Pending to Up ✅
- You should see a response time and uptime percentage
4. If the Monitor Stays on "Pending"
Don't panic! Check these things:
- Is the cron job set up? Check your hosting panel → Cron Jobs
- Is the PHP path correct? Try using the full path to PHP
- Check the log file: Use File Manager to open
monitron/storage/logs/laravel.log— it will tell you exactly what's wrong
🔧 Shared Hosting Tips & Tricks
💡 Finding Your Home Directory Path
Not sure what your home path is? In cPanel File Manager, look at the path bar at the top. It usually shows something like:
/home/yourusername/
💡 PHP Memory Limit
If you get "out of memory" errors, increase the PHP memory limit:
In cPanel → "Select PHP Version" → Options tab:
memory_limit=256M(or higher)max_execution_time=120upload_max_filesize=10Mpost_max_size=12M
Or add to your .htaccess (in your public web folder):
php_value memory_limit 256M
php_value max_execution_time 120
💡 Handling SSL / HTTPS
Most shared hosts now offer free SSL via Let's Encrypt:
In cPanel:
- Go to "SSL/TLS Status" or "Let's Encrypt" or "AutoSSL"
- Enable SSL for your domain
- It usually activates within minutes
After SSL is active, make sure your App URL in the Monitron settings uses https://.
💡 Fixing "500 Internal Server Error"
This is the most common issue on shared hosting. Here's the debugging checklist:
- Check
.htaccess: Make sure the.htaccessfile exists in your public folder with the Laravel rewrite rules - Check PHP version: Must be 8.4+
- Check permissions:
storage/andbootstrap/cache/must be writable (755 or 775) - Check
.env: Make sure it exists and has correct database credentials (the wizard creates this for you) - Check the error log: In cPanel → "Errors" or check
storage/logs/laravel.logvia File Manager
💡 Email Configuration on Shared Hosting
Most shared hosts provide SMTP email. After installation, go to Settings → Email in your Monitron dashboard and configure:
- SMTP Host:
localhostormail.your-domain.com - SMTP Port:
25(localhost) or465(SSL) - Username: Your email address (e.g.,
[email protected]) - Password: Your email account password
Or if you prefer an external service (Gmail, SendGrid, etc.), see the Email Settings guide.
💡 Storage Link on Shared Hosting
The Installation Wizard automatically creates the storage symlink for you. If for some reason it didn't work (some hosts block symlinks), Monitron will still function — file uploads will just be served differently. No action needed on your part.