How to install Caddy on Linux 9

Share on Social Media

In this Linux tutorial, you will learn how to install Caddy on Linux that includes Red Hat based distribution.

What is Caddy?:

Caddy is an open-source web server and reverse proxy server written in the Go programming language. It’s known for its simplicity, speed, and its ability to automatically configure and manage SSL certificates for secure HTTPS connections. Caddy is designed to be easy to use, making it accessible to both beginners and experienced developers. It’s often used for hosting websites, APIs, and web applications, and it’s particularly popular in the DevOps and cloud-native communities for its lightweight and efficient design.

Features in Caddy Web Server:

Caddy is known for its simplicity and powerful features, making it a popular choice for web server and reverse proxy needs. Some of its notable features include:

Automatic HTTPS: Caddy is renowned for its seamless integration with Let’s Encrypt, allowing it to automatically obtain and manage SSL certificates for secure HTTPS connections. This is a standout feature that simplifies the process of securing websites.

HTTP/2 Support: Caddy supports HTTP/2, the latest version of the HTTP protocol. This enables faster and more efficient communication between the web server and clients.

Virtual Hosting: It allows you to host multiple websites or domains on a single instance of Caddy. This is crucial for individuals or organizations managing multiple web properties.

Reverse Proxy: Caddy can be configured as a reverse proxy, enabling it to forward requests to other servers or services. This is useful for load balancing, caching, and handling complex routing scenarios.

FastCGI Support: It can handle FastCGI requests, making it compatible with applications and frameworks that rely on this protocol.

Static File Serving: Caddy is efficient at serving static files, making it a suitable choice for hosting simple websites or web applications.

Easy Configuration (Caddyfile): Caddy uses a Caddyfile configuration format that is known for its simplicity and readability. This format makes it easy for both beginners and experienced users to set up and manage the server.

Modular Architecture: Caddy’s design is modular, allowing users to enable or disable features based on their specific requirements. It also supports the use of plugins to extend its functionality.

Middleware Support: Caddy supports various middleware modules, which can be used to add functionality like rewriting URLs, applying access controls, and more.

Metrics and Monitoring: It provides basic metrics about request/response rates and latencies, which can be useful for monitoring server performance.

IPv6 Support: Caddy is compatible with IPv6, ensuring that it can handle traffic from devices and networks using this newer internet protocol.

Graceful Restart and Zero Downtime: Caddy allows for graceful restarts, meaning it can reload configurations and apply changes without interrupting ongoing requests.

Web-based Administration Interface (Caddy API): Caddy provides a simple web-based interface for monitoring server status, reloading configurations, and more.

JSON Configuration Option: While the Caddyfile format is preferred for its readability, Caddy also allows advanced users to configure it using JSON.

These features collectively make Caddy a powerful and user-friendly choice for web server needs, particularly for those looking for a streamlined experience with robust security features.

Caddy vs Apache:

Caddy and Apache are both web servers, but they have significant differences. Here’s a comparison:

Ease of Configuration:

Caddy: Known for its simplicity and user-friendly configuration. It uses a Caddyfile format that is easy to understand and requires minimal setup for basic use. Automatic SSL certificate management is a key feature.

Apache: Known for its powerful but sometimes complex configuration files, which use a syntax that might be less intuitive for beginners.

Automatic HTTPS:

Caddy: It’s a standout feature. Caddy automatically configures and manages SSL certificates using Let’s Encrypt, providing secure HTTPS connections by default.

Apache: While it supports HTTPS, setting up and managing SSL certificates usually requires additional steps and tools.

Performance:

Caddy: Written in Go, it’s known for its speed and efficiency, making it suitable for high-performance use cases. It’s particularly adept at serving static files.

Apache: It’s powerful and feature-rich but can be slightly slower compared to Caddy, especially when serving static content.

Modules and Extensions:

Caddy: Offers a modular architecture, allowing users to enable or disable features as needed. There’s an active community creating various plugins.

Apache: Known for its extensive module system. There’s a vast library of modules available for various functionalities, giving it a high level of flexibility.

Community and Ecosystem:

Caddy: While growing, it has a smaller community compared to Apache. This means that the available resources, tutorials, and third-party integrations may be more limited.

Apache: One of the oldest and most widely used web servers. It has a massive community with a wealth of documentation, tutorials, and support forums.

Use Cases:

Caddy: Particularly popular in situations where ease of use, automatic HTTPS, and quick deployment are crucial. It’s often used for static sites, APIs, and microservices.

Apache: Widely used across various types of web applications and is well-suited for complex setups and environments with a diverse range of requirements.

Operating System Support:

Caddy: Supports a variety of operating systems, including Linux, macOS, Windows, and BSD variants.

Apache: Compatible with an even broader range of operating systems, including many UNIX and UNIX-like systems.

Ultimately, the choice between Caddy and Apache will depend on your specific requirements, familiarity with the servers, and the type of projects you’re working on. Caddy’s simplicity and built-in features make it a strong choice for many modern web development needs, while Apache’s extensive feature set and widespread use continue to make it a staple in the web server landscape.

Video to install Caddy on Linux:

YouTube player

Environment Specification:

We are using a minimal Rocky Linux 9 virtual machine with following specifications.

  • CPU – 3.4 Ghz (2 cores)
  • Memory – 4 GB
  • Storage – 40 GB
  • Operating System – Rocky Linux release 9.2 (Blue Onyx)
  • Hostname – caddy-01.centlinux-com.preview-domain.com
  • IP Address – 192.168.18.83/24

Initial Configurations:

Login to your Rocky Linux server as root user by means of a ssh client.

Set a hostname and Local DNS resolution for your Linux machine.

# hostnamectl set-hostname caddy-01.centlinux-com.preview-domain.com
# echo "192.168.18.83 caddy-01 caddy-01.centlinux-com.preview-domain.com" >> /etc/hosts

Execute following command at Linux bash, to update software packages in your operating system.

# dnf update -y

If the above command updates your Linux Kernel, then you should reboot before installing Caddy web server.

# reboot

After reboot, check the Linux OS and Linux Kernel versions.

# cat /etc/os-release
NAME="Rocky Linux"
VERSION="9.2 (Blue Onyx)"
ID="rocky"
ID_LIKE="rhel centos fedora"
VERSION_ID="9.2"
PLATFORM_ID="platform:el9"
PRETTY_NAME="Rocky Linux 9.2 (Blue Onyx)"
ANSI_COLOR="0;32"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:rocky:rocky:9::baseos"
HOME_URL="https://rockylinux.org/"
BUG_REPORT_URL="https://bugs.rockylinux.org/"
SUPPORT_END="2032-05-31"
ROCKY_SUPPORT_PRODUCT="Rocky-Linux-9"
ROCKY_SUPPORT_PRODUCT_VERSION="9.2"
REDHAT_SUPPORT_PRODUCT="Rocky Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="9.2"

# uname -r
5.14.0-284.30.1.el9_2.x86_64

Install Caddy on Linux:

Execute following command to install COPR plugin for dnf command.

# dnf install -y 'dnf-command(copr)'

Enable Caddy repository by using following command.

# dnf copr enable @caddy/caddy
Enabling a Copr repository. Please note that this repository is not part
of the main distribution, and quality may vary.

The Fedora Project does not exercise any power over the contents of
this repository beyond the rules outlined in the Copr FAQ at
<https://docs.pagure.org/copr.copr/user_documentation.html#what-i-can-build-in-copr>,
and packages are not held to any quality or security level.

Please do not file bug reports about these packages in Fedora
Bugzilla. In case of problems, contact the owner of this repository.

Do you really want to enable copr.fedorainfracloud.org/@caddy/caddy? [y/N]: y
Repository successfully enabled.

Now, you can install Caddy on Linux server.

# dnf install -y caddy

After successful installation, disable the Caddy repository.

# dnf copr disable @caddy/caddy
Repository successfully disabled.

Verify the version of Caddy server.

# caddy version
v2.7.4 h1:J8nisjdOxnYHXlorUKXY75Gr6iBfudfoGhrJ8t7/flI=

You can check, we have installed caddy 2.7, which is the latest version of caddy web server at the time of this writing.

Enable and start Caddy web service.

# systemctl enable --now caddy
Created symlink /etc/systemd/system/multi-user.target.wants/caddy.service → /usr/lib/systemd/system/caddy.service.

Configure Linux Firewall:

Like Apache, Nginx or any other web server, Caddy also user default service ports i.e.

  1. port 80 for http
  2. port 443 for https

Therefore, you must allow these ports in your Linux firewall, to make your websites accessible from the network.

# firewall-cmd --permanent --add-service={http,https}
success

# firewall-cmd --reload
success

Accessing Caddy Web Service:

Open URL http://caddy-01.centlinux.com in a web browser.

Caddy Default Web Page

Conclusion:

In this Linux tutorial, you have learned how to install Caddy on Linux 9.