Install Caddy Web Server | Linux Guide for Centos, Ubuntu

Setup of Caddy web server on Linux shown with server icons and SSL certificates

When working to improve our processes for web server deployment and management at IOFLOOD we believe installing Caddy can be a helpful tool. From our experience, Caddy simplifies the process of configuring SSL/TLS certificates and reverse proxies with HTTP/2 support for web applications. Through this guide, we aim to share our expertise and best practices to enable our dedicated cloud service customers and fellow developers to optimize their web server setups.

In this tutorial, we will guide you on how to install the Caddy web server on your Linux system. We will show you methods for both APT (Debian and Ubuntu) and YUM-based distributions (CentOS and AlmaLinux), delve into compiling Caddy from source, installing a specific version, and finally, how to use the Caddy command and ensure it’s installed correctly.

So, let’s dive in and begin installing Caddy on your Linux system!

TL;DR: How Do I Install Caddy on Linux?

You can install Caddy on Linux using the command curl https://getcaddy.com | bash -s personal.

curl https://getcaddy.com | bash -s personal

# Output:
# Downloading Caddy for linux/amd64 (personal license)...
# Extracting...
# Putting caddy in /usr/local/bin (may require password)
# Caddy v2.4.5 (h1:ikiFs0aU40PZg5B+X8PZkZzY+P4IZDBXO4xlgJRL2k4=)
# Successfully installed

This command will download and install Caddy on your Linux system. But there’s much more to learn about installing Caddy, including how to compile it from source, install a specific version, and configure it for HTTPS. Continue reading for a more detailed guide and advanced installation options.

Quick Installation for Caddy

Caddy is a powerful and flexible open-source web server with a focus on simplicity and security. It’s renowned for its easy configuration, automatic HTTPS setup, and capability to serve static sites or reverse proxy. Whether you are a web developer, a system admin, or a tech enthusiast, Caddy can be a handy tool in your arsenal.

Let’s get started with installing Caddy on your Linux system. We will cover the installation process for both APT (Debian and Ubuntu) and YUM-based distributions (CentOS and AlmaLinux).

Installing Caddy with APT on Debian and Ubuntu

Start by updating your system package list:

sudo apt update

# Output:
# Hit:1 http://archive.ubuntu.com/ubuntu bionic InRelease
# Get:2 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
# Fetched 88.7 kB in 2s (44.2 kB/s)
# Reading package lists... Done

Next, install Caddy:

sudo apt install -y caddy

# Output:
# Reading package lists... Done
# Building dependency tree
# Reading state information... Done
# caddy is already the newest version (2.4.5).
# 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Now, Caddy is installed on your Debian or Ubuntu system.

Installing Caddy with YUM on CentOS and AlmaLinux

Firstly, update your system package list:

sudo yum update

# Output:
# Loaded plugins: fastestmirror, ovl
# Loading mirror speeds from cached hostfile
#  * base: mirror.lug.udel.edu
#  * extras: mirror.lug.udel.edu
#  * updates: mirror.lug.udel.edu
# No packages marked for update

Then, install Caddy:

sudo yum install -y caddy

# Output:
# Loaded plugins: fastestmirror, ovl
# Loading mirror speeds from cached hostfile
#  * base: mirror.lug.udel.edu
#  * extras: mirror.lug.udel.edu
#  * updates: mirror.lug.udel.edu
# No package caddy available.
# Error: Nothing to do

If you encounter an error stating ‘No package Caddy available’, it means Caddy is not in the default repository. In such a case, you would need to enable the EPEL repository and try again. However, that goes into the realm of advanced usage, which we will cover in the next section.

Remember, the installation process might require your system’s password and could take a few minutes depending on your internet speed.

Installing Caddy from Source Code

For advanced users, installing Caddy from source can provide more control over the installation process. Here’s how you can do it.

First, you need to install the Go language as Caddy is written in Go. You can install it using the command below:

sudo apt install golang

# Output:
# Reading package lists... Done
# Building dependency tree
# Reading state information... Done
# golang is already the newest version (2:1.10~4ubuntu1).
# 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Next, you can download and build Caddy from the source code:

go get github.com/caddyserver/caddy/caddy

cd $GOPATH/src/github.com/caddyserver/caddy/caddy
go build

# Output:
# go: downloading github.com/caddyserver/caddy v1.0.5
# go: downloading github.com/mholt/certmagic v0.10.12

This will create a caddy binary in the current directory.

Installing Different Versions of Caddy

Different versions of Caddy may come with different features or bug fixes. Therefore, it’s important to choose a version that suits your needs.

Installing Different Versions from Source

You can specify a version while downloading the source code. Use the @version syntax to specify the version. For example, to download Caddy version 2.0.0, use the following command:

go get github.com/caddyserver/caddy/[email protected]

Installing Different Versions with Package Managers

APT

For APT, you can specify a version with the = syntax. For example:

sudo apt install caddy=2.0.0

YUM

For YUM, you can use the --showduplicates option to list all versions of a package, and then specify the version with the - syntax. For example:

sudo yum --showduplicates list caddy
sudo yum install caddy-2.0.0

Version Comparison

Different versions of Caddy come with different features. Here’s a comparison of some major versions:

VersionKey FeaturesCompatibility
1.0Initial release, basic web server featuresCompatible with most Linux distributions
2.0Added automatic HTTPSCompatible with most Linux distributions
3.0Improved performance, bug fixesCompatible with most Linux distributions

Basic Usage of Linux Caddy

Basic Caddy Usage

After installing Caddy, you can start it with the following command:

caddy start

Verifying Caddy Installation

You can verify that Caddy is installed correctly by checking its version:

caddy version

# Output:
# v2.4.5 h1:ikiFs0aU40PZg5B+X8PZkZzY+P4IZDBXO4xlgJRL2k4=

This command will output the version of Caddy, confirming that it’s installed correctly.

Alternative Web Servers

While Caddy is a great choice for a web server, there are other popular alternatives like Apache and Nginx. Each of these has its unique features, advantages, and disadvantages. Let’s take a closer look.

Apache: The Veteran Web Server

Apache HTTP Server, commonly known as Apache, is one of the oldest and most widely used web servers. It’s known for its power, flexibility, and broad community support.

Here’s how to install Apache on Debian or Ubuntu:

sudo apt update
sudo apt install apache2

# Output:
# Reading package lists... Done
# Building dependency tree
# Reading state information... Done
# apache2 is already the newest version (2.4.29-1ubuntu4.16).
# 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

And on CentOS or AlmaLinux:

sudo yum update
sudo yum install httpd

# Output:
# Loaded plugins: fastestmirror, ovl
# Loading mirror speeds from cached hostfile
#  * base: mirror.lug.udel.edu
#  * extras: mirror.lug.udel.edu
#  * updates: mirror.lug.udel.edu
# Package httpd-2.4.6-93.el7.centos.x86_64 already installed and latest version
# Nothing to do

Apache’s key advantage is its wide range of modules, allowing for extensive customization. However, it can be more complex to configure than Caddy, especially for beginners.

Nginx: The Speedy Contender

Nginx is another popular web server known for its speed and efficiency. It’s particularly well-suited for serving static content and acting as a reverse proxy.

Here’s how to install Nginx on Debian or Ubuntu:

sudo apt update
sudo apt install nginx

# Output:
# Reading package lists... Done
# Building dependency tree
# Reading state information... Done
# nginx is already the newest version (1.14.0-0ubuntu1.7).
# 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

And on CentOS or AlmaLinux:

sudo yum update
sudo yum install nginx

# Output:
# Loaded plugins: fastestmirror, ovl
# Loading mirror speeds from cached hostfile
#  * base: mirror.lug.udel.edu
#  * extras: mirror.lug.udel.edu
#  * updates: mirror.lug.udel.edu
# Package nginx-1.16.1-1.el7.ngx.x86_64 already installed and latest version
# Nothing to do

Nginx’s key advantage is its speed and efficiency, especially under heavy load. However, it lacks some of the advanced customization options offered by Apache.

In conclusion, while Caddy is a great choice for a web server, Apache and Nginx are powerful alternatives, each with their unique strengths. Your choice of a web server would depend on your specific needs and expertise level.

Installation Issues with Caddy

While Caddy is designed for ease of use, you might encounter some issues during installation and configuration. Here are some common problems and their solutions.

Issue: Unable to Locate Package Caddy

When installing Caddy using a package manager like APT or YUM, you might encounter an error message stating that the package ‘caddy’ can’t be located. This usually happens because Caddy is not available in the default repositories.

sudo apt install caddy

# Output:
# Reading package lists... Done
# Building dependency tree
# Reading state information... Done
# E: Unable to locate package caddy

To resolve this issue, you can add the official Caddy repository to your system. Here’s how you can do it for Debian or Ubuntu:

echo "deb [trusted=yes] https://apt.fury.io/caddy/ /" \
    | sudo tee -a /etc/apt/sources.list.d/caddy-fury.list
sudo apt update
sudo apt install caddy

Issue: Caddy Service Not Starting

After installing Caddy, you might find that the Caddy service is not starting. This could be due to various reasons, including incorrect configuration or conflicts with other services.

You can check the status of the Caddy service with the following command:

sudo systemctl status caddy

# Output:
# ● caddy.service - Caddy
#    Loaded: loaded (/lib/systemd/system/caddy.service; disabled; vendor preset: enabled)
#    Active: inactive (dead)
#      Docs: https://caddyserver.com/docs/

If the Caddy service is not running, you can try to start it with the following command:

sudo systemctl start caddy

If the service still doesn’t start, you can check the Caddy logs for any error messages:

journalctl -u caddy

These troubleshooting tips should help you overcome common issues when installing and configuring Caddy. Remember, the Caddy community and documentation are also great resources for resolving any problems.

What are Web Servers?

To fully appreciate what Caddy brings to the table, it’s crucial to understand the role of web servers in web development. But what exactly is a web server?

In simple terms, a web server is a software or hardware that serves content, like web pages, to users over the internet. When you type a URL into your browser, you’re essentially sending a request to a web server. The server then responds by sending back the requested content, which your browser displays.

Practical Uses of Caddy Web Servers

Web servers play a critical role in web development. They host the websites and web applications that developers create, making them accessible to users worldwide. Without web servers, the internet as we know it would not exist.

Web servers handle various tasks, including processing user requests, sending responses, managing network traffic, and ensuring secure data transmission. They also handle dynamic content, interacting with databases to serve up-to-date data.

Serving Web Content with Caddy

Caddy, like other web servers, serves web content. However, it stands out with its focus on simplicity and security. Installing Caddy on your Linux system means you have a reliable tool to serve your web content with ease.

Consider this example of serving a static website with Caddy. Suppose you have a website with HTML, CSS, and JavaScript files in a directory named my_website. You can serve this website using Caddy with the following command:

caddy file-server --root my_website

# Output:
# 2022/01/01 12:00:00.000 INFO    using provided configuration    {"config_file": "", "config_adapter": ""}
# 2022/01/01 12:00:00.001 INFO    serving static files    {"root": "/home/user/my_website"}
# 2022/01/01 12:00:00.001 INFO    tls.cache.maintenance   started background certificate maintenance   {"cache": "0xc0002e0060"}
# 2022/01/01 12:00:00.001 INFO    autosaved config (load with --resume flag)      {"file": "/home/user/.config/caddy/autosave.json"}
# 2022/01/01 12:00:00.001 INFO    serving initial configuration

In this example, Caddy starts a file server that serves the content of the my_website directory. Any user can now access your website by navigating to your server’s IP address or domain name in their browser.

This command showcases the simplicity of Caddy. With just a single command, you can serve a static website. This ease of use, combined with its robust features, makes Caddy a great choice for your web server needs.

Development with Web Servers

Web servers are the backbone of the internet, and understanding their workings is crucial for anyone involved in web development or hosting. They are the conduit between the user’s browser and the content they wish to access.

DNS, SSL Certificates, and HTTP/2

To gain a deeper understanding of web servers, it’s worth exploring related concepts like DNS (Domain Name System), SSL certificates, and HTTP/2.

DNS is the system that translates human-friendly domain names to IP addresses that machines can understand. It’s like the phonebook of the internet, ensuring that when you type a website’s name into your browser, you’re directed to the correct server.

SSL certificates are digital certificates that provide authentication for a website and enable an encrypted connection. These certificates communicate to the client that the web service host demonstrated ownership of the domain to the certificate authority at the time of certificate issuance.

HTTP/2 is the second major version of the HTTP network protocol, used by the World Wide Web. It is based on Google’s SPDY protocol and focuses on performance improvements. Its primary changes include multiplexing and header compression.

Further Resources for Mastering Web Servers

To continue your journey in mastering web servers, here are some resources that provide in-depth knowledge and tutorials:

  1. Mozilla Developer Network (MDN) Web Docs offers a comprehensive guide on web servers, their workings, and related concepts.

  2. Let’s Encrypt is a free, automated, and open certificate authority that provides SSL certificates. It’s a great resource to understand how SSL certificates work and how to set them up.

  3. HTTP/2 Explained is a detailed guide on HTTP/2, its benefits, and how it improves over HTTP/1.1.

These resources should provide a solid foundation for understanding web servers and related concepts. Remember, the more you understand about the backend, the better you can utilize these tools in your web development journey.

Recap: Caddy Linux Installation

Throughout this comprehensive guide, we’ve delved into the process of installing Caddy on a Linux system. Our journey began with the basics of installing Caddy using a simple command, and then we ventured into more advanced territory, compiling Caddy from source, and installing specific versions.

We’ve tackled common hurdles that you might encounter while installing Caddy, such as ‘unable to locate package’ and ‘service not starting’, and provided solutions for each. We also explored alternative web servers, Apache and Nginx, giving you a broader perspective on the landscape of tools for serving web content.

Here’s a quick comparison of the web servers we’ve discussed:

Web ServerEase of UseFlexibilitySpeed
CaddyHighModerateHigh
ApacheModerateHighModerate
NginxModerateModerateHigh

Whether you’re a beginner just starting out with Caddy, or an intermediate user looking to deepen your knowledge, we hope this guide has been a valuable resource in your journey. The power to serve web content efficiently is now in your hands. So, go ahead and explore the possibilities with Caddy. Happy coding!