Skip to content
←Back to articles
6 min read

The €0 Laravel Stack for the Cheap Client: Surviving Production Without Spending a Dime on SaaS

How to run a Laravel app in production with Netflix-level monitoring and a filter-coffee budget. A practical guide to surviving the cheap client without spending a dime on SaaS.

#Laravel #DevOps #PHP #Open Source #Production #Freelance
The €0 Laravel Stack for the Cheap Client: Surviving Production Without Spending a Dime on SaaS

We all know this classic project management cliché: the client wants an app that handles Netflix-level traffic with Formula 1 responsiveness, but their monthly budget for hosting and third-party tools barely covers a filter coffee. No way are they pulling out a credit card for Datadog, unlimited Sentry, Laravel Forge, or Heroku.

As a developer, you're always trying to balance competing priorities: delivering clean tech without blowing the budget, while refusing to sail blind in production. Because let's be honest, the client will forget all your hard work on micro-optimizations, but they'll definitely remember the exact time the site went down during their happy hour.

Good news: with a low-cost VPS, a few open-source tools, and a bit of engineering grit, you can build a seriously robust infrastructure.

A quick disclaimer before we start: free doesn't mean cost-free. The VPS, backup storage, installation time, and maintenance still require resources. The goal isn't to rebuild Datadog all by yourself in a basement, but to get the essentials without stacking up subscriptions.

1. System Health & Monitoring: Keeping an Eye on the Machine

Laravel Health — Knowing if the App is OK

spatie/laravel-health lets you set up health checks for your application: database availability, disk space, memory usage, queues, and other custom checks tailored to your setup. You can even configure notifications when a check fails.

Keep in mind: it's not a magic wand that automatically monitors your entire server. Laravel also provides a native health check route, typically at /up, to verify that the app boots properly.

Healthchecks — Monitoring Scheduled Tasks

Healthchecks is an open-source tool that monitors scheduled tasks and background jobs using heartbeats.

The principle is simple: your job sends a signal when it starts or finishes. If that signal doesn't arrive within the expected timeframe, you get an alert. Perfect for ensuring your Laravel Scheduler tasks or nightly imports are actually running.

Uptime Kuma — Verifying the Site Actually Responds

Uptime Kuma is a fantastic open-source alternative for monitoring application uptime. It checks HTTP(S) responses, measures response times, tracks SSL certificates, and sends alerts via Telegram, Discord, etc.

The pro tip: ideally, host your monitoring tool on a separate infrastructure from the server it's watching. If your VPS goes down and takes Uptime Kuma with it, you won't get any warnings.

2. Error Alerts & Logs: Zero Guesswork, Zero Euros

Monolog & Laravel — Catching Important Errors

You don't need heavy machinery to get notified when something breaks. Laravel relies on Monolog and offers multiple log channels. You can configure a dedicated channel to pipe critical errors straight to Slack or Telegram.

Just keep it clean: focus on critical exceptions rather than minor warnings, and avoid dumping full stack traces into public chat channels for security reasons.

Laravel Log Viewer — Exploring Logs Without Playing Hacker

opcodesio/log-viewer gives you a clean web interface to browse and filter Laravel logs. Much better than chaining tail -f and grep commands over SSH at 3 AM.

Just make sure to protect access tightly with proper authentication and network restrictions. Exposing a log viewer publicly is an open invitation for data leaks.

GlitchTip — A Self-Hosted Sentry Alternative

GlitchTip is an open-source error-tracking platform compatible with Sentry's API and SDKs. It centralizes exceptions, groups them, and tracks their evolution with native Laravel integration.

You get the Sentry experience while keeping everything self-hosted. Keep in mind that self-hosting doesn't eliminate hardware limits—events and historical data still consume server resources.

3. Profiling & Optimization: Measure Before Tweaking

Laravel Pulse — Seeing What's Happening Inside the App

Laravel Pulse provides a dashboard to observe slow database queries, exceptions, background jobs, and resource utilization in real-time.

It's great for spotting bottlenecks, but it's not a full distributed tracing profiler. On a small VPS, don't blindly enable every single collector; start with what you actually need.

OPcache: The Real PHP Production Reflex

Before chasing millisecond gains with exotic tweaks, make sure OPcache is properly configured. It keeps precompiled PHP bytecode in memory, avoiding script parsing on every request.

JIT is a different story—useful for heavy mathematical computations, but don't expect a standard Laravel app to run 2 or 3 times faster just by flipping a switch. Database queries and network IO usually weigh far more.

Laravel Benchmark — Timing What Matters

Laravel provides Illuminate\Support\Benchmark to measure block execution durations cleanly in code. It's handy for testing hypotheses, though it shouldn't replace full profiling.

4. Backups & Resilience: Sleeping Soundly

Spatie Laravel Backup — Automating Backups

spatie/laravel-backup handles database and file backups, compresses them, and pushes them to configured remote storage while managing retention cleanups.

The golden rule: a backup stored on the same VPS as the app isn't a real backup. If the disk fries, you lose both. Always push backups to an independent destination and regularly test restoring them!

Log Failovers: Planning for Failures

Laravel lets you combine logging channels using stack drivers. While local files are a reliable fallback, nothing is truly magic if your disk runs out of space. True resilience means making sure the plumbing actually works under pressure.

5. Maintenance & Deployment: Avoiding Friday Night Outages

Dokku — Deploying Without Breaking the Bank

Dokku is an open-source deployment platform that brings an Heroku-like experience to your own server via simple git push commands, complete with automated Let's Encrypt SSL and zero-downtime deploys.

The hidden cost? You are responsible for administering, securing, and maintaining it yourself.

Laravel Pennant — Toggling Features Without Redeploying

Laravel Pennant provides native feature flags, allowing you to test rollouts or instantly disable a misbehaving feature without pushing a whole new git commit. While it doesn't replace proper code rollbacks, it gives you incredible operational flexibility.

6. Summary Table: The Pragmatic Choice

Need | My ChoiceApp Health | Laravel /up route, plus Laravel Health if needed
HTTP Availability | Uptime Kuma on independent infrastructure
Scheduled Tasks | Healthchecks (self-hosted or managed)
App Errors | Monolog logs, then GlitchTip if needed
Log Exploration | Laravel Log Viewer (secured!)
Performance | OPcache, targeted benchmarks, Laravel Pulse
Backups | Spatie Laravel Backup to remote storage
Deployment | Dokku if the complexity fits
Progressive Rollout | Laravel Pennant

Summary: Free License, Not Free Labor

With this setup, you can turn a low-cost VPS into a solid monitoring, backup, and deployment machine without breaking your client's bank account.

The goal isn't to replace every SaaS invoice with a confusing sprawl of Docker containers, but to choose wisely what deserves to be self-hosted. Being pragmatic in production doesn't mean spending zero euros at all costs; it means avoiding 100 €/month bills for features the project doesn't actually need.

What's your go-to trick for keeping projects clean when the client's budget is tighter than skinny jeans in 2012?

PK

Peter K

Senior Full-Stack Engineer • Freelance France

Get in touch →