Taking Back Control: My Pragmatic Laravel Infrastructure Stack
Hey everyone, Jamie here.
After my brief and... educational... experience in a heavily abstracted corporate environment, I've been spending a lot of time thinking about the fundamentals. I've missed the feeling of knowing my stack, from the kernel all the way up to the application logic. When you're dealing with endless meetings, opaque processes, and time tracking, you start to crave simplicity, control, and raw performance.
For me, that means getting back to the metal (or as close as is practical).
Running my application hosting, has given me some strong opinions on what makes a stable, efficient, and joyful stack to work with. When I'm not forced to use a pre-defined corporate setup, I have a go-to stack for my Laravel applications. It's lean, it's modern, and it's incredibly robust.
Let's talk about my preferred setup: AlmaLinux, Caddy, and a side of Proxmox.
The Foundation: AlmaLinux
For years, the default “VPS” operating system for most web developers has been Ubuntu. It's a fantastic, user-friendly distro, and I've used it on countless projects.
But when it comes to a production server that I want to set up and then forget about for five years, I lean on the Red Hat (RHEL) ecosystem. With CentOS Stream becoming a rolling release, AlmaLinux has stepped in perfectly as the 1:1 binary compatible, free RHEL fork.
Why AlmaLinux over Ubuntu?
- Rock-Solid Stability: It's built on the RHEL foundation, which is designed for enterprise-grade stability and long-term support (LTS). The release and update cycle is predictable and thoroughly vetted.
- Security-First Mindset: Features like SELinux (Security-Enhanced Linux) are integrated from the ground up. While it has a steep learning curve and is the first thing many devs (myself included, on a bad day) turn off, it provides a level of granular security that's hard to beat.
- No-Nonsense: It feels like a pure, professional server OS. It doesn't come with a lot of the cruft or changing defaults that can sometimes happen in other communities. It's just a stable, secure, and predictable foundation for running services.
The Modern Web Server: Caddy
This is where I get really opinionated. I've spent decades configuring Apache and Nginx. Apache is powerful but feels ancient, and .htaccess files are a source of endless pain. Nginx is a performance marvel, but let's be honest, the configuration syntax is verbose, and setting up SSL with Certbot is an extra step I just don't want to do anymore.
Then I found Caddy.
Caddy is a modern, open-source web server written in Go, and it's an absolute game-changer for a few key reasons:
- Automatic HTTPS by Default: This is its killer feature. You point a domain at your server, write a 3-line config file, and Caddy automatically provisions and renews Let's Encrypt (and ZeroSSL) certificates for you. No cron jobs, no Certbot scripts, no manual renewal. It just works.
- The Caddyfile: The configuration file is laughably simple. It's clean, readable, and built for humans.
Want to run a standard Laravel app? Here's a basic Caddyfile for my-laravel-app.com:
my-laravel-app.com {
# Set the root directory to your app's public folder
root * /var/www/my-laravel-app/public
# Enable compression
encode zstd gzip
# Handle the "front controller" pattern
file_server
try_files {path} {path}/ /index.php?{query}
# Proxy PHP requests to PHP-FPM
php_fastcgi unix//run/php-fpm/www.sock
}
That's it. That's the entire file. It handles the HTTPS, the front-controller pattern, and the PHP-FPM connection in 12 clean lines. It makes Nginx config look like assembly language. It's fast, secure by default, and removes so much cognitive overhead.
The Host: VPS or Proxmox?
So, where do I run this AlmaLinux + Caddy stack? It comes down to two choices, depending on the scale.
1. The Rented VPS (The Pragmatic Default)
For most individual projects, this is the way to go. I'll spin up a VPS from a provider like Hetzner, Vultr, or DigitalOcean. Within minutes, I have a root shell on a clean AlmaLinux install. I can install Caddy, PHP-FPM, and my database, deploy my app, and be live in under an hour.
It's the perfect balance of cost, control, and low maintenance. You're not managing hardware, but you have full control over the OS and software.
2. The Proxmox Power-Play
This is where my inner infrastructure nerd comes out. For larger setups or when I want to run multiple isolated services, I turn to Proxmox.
Proxmox is an open-source virtualization platform. You rent one big, powerful bare-metal server and install Proxmox on it. From there, you can create and manage your own Virtual Machines (VMs) and, more importantly, lightweight Linux Containers (LXC).
This gives you a private cloud. I can have:
- A full VM running AlmaLinux for my primary database server.
- A lightweight LXC (using minimal resources) for each Laravel app, each with its own Caddy + PHP-FPM install.
- A separate LXC just for running my queue workers.
- Another LXC for a Redis server.
This is the ultimate in control and efficiency. You're isolating every part of your application, which is great for security and resource management, all on a single piece of rented hardware. It's more complex, but it's how you build a truly resilient, multi-tenant setup—which is exactly what I do for my hosting clients.
Conclusion: The Joy of a Curated Stack
This stack isn't a “PaaS” (Platform-as-a-Service) like Vapor or Heroku. It's not a one-click deploy. It requires you to know your way around a Linux shell and understand how the pieces fit together.
But after my last role, I'm reminded that this is what I love. I don't want the “black box.” I want a setup where I've chosen every component for a specific reason. This stack—AlmaLinux for stability, Caddy for modern simplicity, and Proxmox for ultimate control—is performant, secure, and, most importantly, a genuine pleasure to work with.
What's your go-to “pragmatic” infrastructure stack? Let me know in the comments.
Cheers,
Jamie