🏠 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.2+ | Most modern hosts offer PHP 8.2 or 8.3 |
| 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.2 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.2+ from the dropdown
- Click Apply
In DirectAdmin:
- Go to Domain Setup → your domain
- Click PHP Version
- Select 8.2 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-php82(EasyApache on cPanel)/opt/cpanel/ea-php82/root/usr/bin/php(cPanel with MultiPHP)/opt/plesk/php/8.2/bin/php(Plesk)
Example with full path:
cd /home/yourusername/monitron && /opt/cpanel/ea-php82/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.2+
- 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.
🏢 Hosting Provider-Specific Guides
Hostinger
- Go to hPanel → Websites → Manage
- PHP Configuration: Set to 8.2+ under Advanced → PHP Configuration
- File Manager: Upload to
/home/yourusername/ - Document Root: In Domains → point to
/home/yourusername/monitron/public - Database: Databases → MySQL Databases → Create new
- Wizard: Visit
https://your-domain.com/install - Cron: Advanced → Cron Jobs → Add with minimum interval
Namecheap (cPanel)
- PHP Version: cPanel → Select PHP Version → 8.2
- Upload: File Manager → upload to
/home/yourusername/outsidepublic_html - Document Root: Use Subdomains or Addon Domains to point to
monitron/public - Database: cPanel → MySQL® Databases
- Wizard: Visit
https://your-domain.com/install - Cron: cPanel → Cron Jobs → Every minute
SiteGround
- PHP Version: Site Tools → Devs → PHP Manager → 8.2
- Upload: Site Tools → Site → File Manager → upload outside
public_html - Document Root: Use Site → Site Settings to change the document root
- Database: Site Tools → Site → MySQL → Create
- Wizard: Visit
https://your-domain.com/install - Cron: Site Tools → Devs → Cron Jobs → Add
Bluehost (cPanel)
- PHP Version: cPanel → MultiPHP Manager → Set to 8.2
- Upload: File Manager → upload to
/home/yourusername/ - Document Root: Cannot easily change — use Method C (copy public files)
- Database: cPanel → MySQL® Databases
- Wizard: Visit
https://your-domain.com/install - Cron: cPanel → Cron Jobs → Minimum every 5 minutes
GoDaddy (cPanel)
- PHP Version: cPanel → Select PHP Version → 8.2
- Upload: File Manager → upload outside
public_html - Document Root: Create a subdomain pointing to
monitron/public, or use Method C - Database: cPanel → MySQL® Databases
- Wizard: Visit
https://your-domain.com/install - Cron: cPanel → Cron Jobs
A2 Hosting
- PHP Version: cPanel → Select PHP Version → 8.2+
- Upload: File Manager → upload to
/home/yourusername/ - Document Root: Domains → Edit → Point to
monitron/public - Database: cPanel → MySQL® Databases
- Wizard: Visit
https://your-domain.com/install - Cron: cPanel → Cron Jobs → Every minute (allowed on most plans)
❓ Shared Hosting FAQ
Q: Do I need SSH or terminal access?
No! Monitron SaaS is completely plug-and-play. The Installation Wizard handles database setup, key generation, migrations, and everything else automatically. You just need a web browser and your hosting control panel.
Q: Do I need to run any commands?
No! There are zero command-line requirements. Everything is handled through the web-based Installation Wizard and your hosting control panel's cron job interface.
Q: Do I need Composer?
No! Monitron SaaS ships with all dependencies pre-installed in the vendor/ folder. No Composer needed.
Q: Will Monitron be slower on shared hosting?
A bit, compared to a VPS. Shared hosting shares CPU and memory with other users, so checks may occasionally take slightly longer. For most users monitoring under 50 websites, you won't notice a difference.
Q: Can I monitor 100+ websites on shared hosting?
It depends on your host's resource limits. For 100+ monitors, we recommend:
- Setting check intervals to 5 minutes instead of 1 minute
- Choosing a host with generous resource allocations (A2 Hosting Turbo, SiteGround GoGeek, etc.)
For 200+ monitors, consider upgrading to a VPS.
Q: My host only allows cron every 15 minutes. Is that OK?
Yes! Monitron will still work. Your monitors will be checked every 15 minutes instead of every minute. For most websites, this is perfectly fine — you'll still get notified of downtime within 15 minutes.
Q: Can I use SQLite instead of MySQL?
Yes! The Installation Wizard supports SQLite. On the database screen, select SQLite as the driver and enter the database file path. The wizard creates the file for you.
Q: My host blocks outgoing connections on port 25 (SMTP). What now?
Many shared hosts block port 25 to prevent spam. Use an external email service instead:
- Gmail SMTP (port 587)
- SendGrid (port 587)
- Mailgun (port 587)
- Amazon SES (port 587)
See the Email Settings guide for configuration details.
Q: How do I update Monitron on shared hosting?
- Back up your database (cPanel → Backup Wizard or phpMyAdmin → Export)
- Upload the new version files via File Manager (overwrite existing)
- If you used Method C, re-copy the public files to
public_htmland re-apply theindex.phpchanges - Visit
https://your-domain.com/update— the updater handles database migrations automatically - Done! No terminal needed.
See the Upgrading guide for full details.
Q: I see a blank white page. What's wrong?
This usually means a PHP error is being suppressed. Try:
- Open
monitron/storage/logs/laravel.login your File Manager — the error details are there - Common causes:
- Wrong PHP version (needs 8.2+)
- Missing PHP extension
- Wrong database credentials
storage/folder not writable
- If there's no log file, check cPanel → "Errors" for PHP errors
Q: Can I run Monitron in a subdirectory (e.g., example.com/monitron/)?
We don't officially recommend it, but it's possible with extra configuration. It's much easier to use a subdomain like status.example.com.
🎉 You Did It!
Congratulations! Monitron SaaS is now running on your shared hosting! 🥳
No SSH. No terminal. No artisan commands. Just a clean, working monitoring platform. ✨
Here's what to do next:
- 📡 Add your first real monitors
- 🔔 Set up notification channels
- 📊 Create a public status page
- 🤖 Explore AI features (if your host allows outgoing HTTPS to OpenAI/Anthropic)
- ⬆️ Upgrade to a VPS when you outgrow shared hosting
🆘 Need Help?
If you're stuck:
- Check the Troubleshooting guide
- Look at
storage/logs/laravel.logvia File Manager for error details - Make sure your cron job is running (check cPanel → Cron Jobs for recent runs)
- Verify file permissions (storage and bootstrap/cache should be 755 or 775)
- Contact your hosting provider's support — they're often happy to help with PHP configuration and cron setup