Home Blog Waarom Caddy misschien wel de beste start is voor je volgende softwareproject

Caddy logo

Waarom Caddy misschien wel de beste start is voor je volgende softwareproject

Vind je het vreselijk om een webserver op te zetten voor je project(en) en zou je willen dat je dat helemaal kon overslaan en dat het dan nog steeds magisch werkt? Dan is Caddy misschien wel de perfecte webserver voor je volgende project!

In deze blog gaan we kijken naar een paar van de voordelen van Caddy die het voor mij meteen verkochten als de vervanger van Nginx en Apache. Dit zijn de onderwerpen die we gaan bekijken:

  1. Wat is Caddy?
  2. Hoe verhoudt Caddy zich tot andere webservers?
  3. Waarom zou je Caddy gebruiken voor je volgende softwareproject?
  4. Hoe begin je met Caddy?

Laten we er meteen in duiken en zien waar Caddy voor staat!

Wat is Caddy?

Caddy is een webserver, zoals Nginx en Apache, die verkeer van het internet naar je applicatie of statische bestanden geleid of als reverse proxy fungeert.

Maar het is zoveel meer dan alleen een webserver, het genereert ook automatisch SSL certificaten voor je website, zorgt voor caching, en de configuratie is hysterisch eenvoudig vergeleken met Nginx & Apache.

Caddy zorgt voor de dingen die je niet graag doet in projecten met Nginx en Apache. Zeker, het is niet moeilijk om SSL in te stellen voor die webservers, maar het is toch iets waar je over na moet denken. Caddy doet al dit werk voor je, dus je hoeft het alleen maar naar je applicatie te wijzen en het werkt gewoon.

Het Caddy-team heeft een uitstekende illustratie samengesteld van wat Caddy in technische termen is:

Bewegende onderdelen in Caddy

Hoe verhoudt Caddy zich tot andere webservers?

Ik denk dat het belangrijkste om naar te kijken voor de meeste ontwikkelaars de snelheid zal zijn. Hoe snel is het vergeleken met de andere webservers? Er zijn veel benchmarks op het internet te vinden die Caddy vergelijken met Nginx, bijvoorbeeld 35 Million Hot Dogs: Benchmarking Caddy vs. Nginx. Deze benchmark laat iets heel interessants zien:

  • Nginx is marginaal sneller dan Caddy in het afhandelen van verzoeken
  • Caddy is multi-threaded en zal latency gaan gebruiken wanneer het wordt bestookt door enorme aantallen HTTP verzoeken...maar het zal alle aanvragen altijd goed afhandelen
  • Nginx is single-threaded (in deze test) en zal verbindingen gaan weigeren zodra het aan zijn capaciteit zit
  • Nginx presteert alleen beter dan Caddy met een speciale prestatie-geoptimaliseerde configuratie, terwijl Caddy bij een "standaard" configuratie blijft.

Het lezen van die benchmark is je tijd waard als je meer wilt weten over de prestatievergelijking.

Ik heb helaas geen goede benchmark kunnen vinden die ook Apache omvat. Als ik er toevallig eentje vind, zal ik dit bijwerken en een link naar de vergelijking plaatsen.

Dus als je kijkt naar de prestaties van Caddy vergeleken met andere beschikbare webservers, dan zien we dat hij niet alleen vergelijkbaar is met Nginx, maar het soms zelfs overtreft. De grootste takeaway van het lezen van die benchmark is het feit dat Caddy zo snel is met de standaardinstellingen. Je hoeft geen tijd te besteden aan het optimaliseren van je configuratie om uitstekende snelheden te krijgen zoals je met Nginx zou moeten doen. Dit is wat ik wil! Ik wil dat de webserver gewoon werkt en me niet in de weg zit. Caddy voldoet hierin voor mij!

Waarom zou je Caddy gebruiken voor je volgende softwareproject?

Ik heb al een paar redenen genoemd waarom je Caddy zou moeten gebruiken voor je volgende softwareproject, maar laten we ze nog eens opnoemen:

  • Het is vergelijkbaar, zo niet sneller, dan Nginx
  • De configuratie ervan is ongelooflijk eenvoudig
  • Je hoeft niet na te denken over SSL-certificaten
  • Het is multi-threaded, dus het maakt echt gebruik van de server waarop je het draait

Laten we een paar uitstekende voordelen toevoegen aan het gebruik van Caddy voor je volgende project!

Ten eerste heeft Caddy geen dependencies. Het is een gecompileerde Go binary die overal kan draaien. Dit maakt het ideaal voor gebruik in een container in je Docker of Kubernetes omgeving.

Ten tweede biedt het dingen als load-balancing van het verkeer naar backend diensten, gezondheidscontroles, circuit breaking en caching out-of-the-box. Voor mij is dit een duidelijk voordeel, omdat dit veel tijd bespaart. Tijd die je kunt besteden aan het bouwen van je applicatie.

Tenslotte is het grootste voordeel van het gebruik van Caddy dat het ingebouwde directives heeft voor het gebruik van fastcgi. Dit helpt je om verkeer naar je PHP applicatie te leiden met een enkele regel in je configuratiebestand.

Maar hoe begin je met Caddy? Laten we dat eens uitzoeken!

Hoe begin je met Caddy?

Aan de slag gaan met Caddy is eenvoudig! Je kunt de CLI gebruiken om je configuratie te serveren en meteen een server te starten, of je kunt Docker gebruiken. Ik gebruik liever Docker omdat het perfect past in dit soort projecten van mij.

Laten we eens kijken naar de configuratie om verkeer naar onze PHP/Laravel applicatie te sturen:

(laravel) {
    root * /var/www/html/public
    encode zstd gzip
    file_server
}

(redirect_clean_url) {
    handle_path /index.php* {
        redir {uri} permanent
    }
}

:8000 {
    import laravel
    import redirect_clean_url

    handle {
        try_files {path} {path}/ /index.php?{query}
        php_fastcgi my_php_fpm_backend:9000
    }
}

Het codeblok dat begint met (laravel) en (redirect_clean_url) zijn snippets, in wezen herbruikbare blokken configuratie die je op elke plek kunt toepassen door ze te importeren: "import laravel" en "import redirect_clean_url". Als je eerder een Laravel applicatie hebt gehost, dan weet je dat je al het verkeer moet leiden naar het bestand index.php in de publieke map van je project. De "laravel" snippet stelt de document route in naar die publieke map, schakelt gzip en zstd encoding in, en vertelt Caddy om statische bestanden uit de publieke map te serveren (afbeeldingen, css bestanden, enz.).

De redirect_clean_url snippet is een belangrijke snippet om de SEO van je applicatie te verbeteren. Al het verkeer omleiden naar je index.php bestand is geweldig, maar het veroorzaakt ook een probleem: zowel https://example.com als https://example.com/index.php zijn geldige paden. Dit veroorzaakt lelijke URL's (https://example.com/index.php/blog bijvoorbeeld) en Google zou dit kunnen markeren als duplicate content. Om dit alles te voorkomen willen we al het verkeer van /index.php omleiden naar een schone URL zonder index.php erin. Deze snippet zorgt ervoor dat /index.php/blog wordt omgeleid naar /blog. Het doet dit met een 301: let op het sleutelwoord "permanent".

Het codeblok ":8000" is onze daadwerkelijke website, in dit geval localhost:8000. Je kunt dit ook vervangen door example.com en dan worden automatisch SSL-certificaten voor je domein gegenereerd en via HTTPS aangeboden. In het handle code blok vertellen we Caddy eerst te zoeken naar statische bestanden en als het die niet kan vinden, het verkeer om te leiden naar de index.php in de publieke map. Als het verkeer wordt omgeleid naar PHP, kun je het FPM backend specificeren met de "php_fastcgi" directive. In mijn geval routeert dit het verkeer naar een PHP-FPM container in dezelfde docker omgeving, maar dit kan ook http://127.0.0.1:9000 zijn of een andere plaats waar je je FPM server draait.

Nu heb je een volledig functionele webserver voor je PHP applicatie, inclusief een SSL certificaat. Dat is eigenlijk alles. Je bent klaar. Zo eenvoudig is het.

De eenvoud van dit configuratiebestand, de uitstekende prestaties van de webserver en de fantastische [documentatie] (https://caddyserver.com/docs/) maken Caddy tot mijn favoriete webserver.

Conclusie

Caddy is om verschillende redenen een uitstekende webserver: het is qua snelheid vergelijkbaar met Nginx, de configuratie is veel eenvoudiger, en je hoeft niet na te denken over SSL-certificaten. Het neemt al het vervelende werk weg bij het instellen van een webserver en helpt je weer verder met het ontwikkelen van je applicatie of website! Als je op zoek bent naar een nieuwe webserver voor je volgende project, kijk dan niet verder dan Caddy.

Gepubliceerd op: October 22nd, 2022

Ik help je met het behalen van geweldige SEO, hogere conversies, en grotere groei van jouw bedrijf

Neem nu contact op om jouw bedrijf te groeien

Roelof Jan Elsinga