How To Host a Website with HTTPS Using Caddy on Linux

A web server is a server-side application designed to process HTTP requests between client and server. HTTP is the basic and very widely used network protocol.

Apache HTTP Server played an important role in designing what the web is today. It alone has a market share of 37.3%. Nginx comes second in the list having a market share of 32.4%. Microsoft IIS and LiteSpeed come at numbers 3 and 4 having a market share of 7.8% and 6.9% respectively.

Recently, I came across a web server named Caddy. When I tried to inquire about its features and deployed it to testing, I must say it is amazing. A web server that is portable and does not need any configuration file. I thought it is a very cool project and wanted to share it with you. Here we have given Caddy a try!

What is Caddy?

Caddy is an alternative to an apache web server with easy to configure and use. Matthew Holt – The Project leader of Caddy claims that Caddy is a general-purpose webserver, claims to be designed for humans and it is probably the only of its kind.

Caddy is the only first web server that can acquire and renew SSL/TLS certificates automatically using Let’s Encrypt.

Features of Caddy

  1. Speedy HTTP requests using HTTP/2.
  2. Capable Web Server with least configuration and hassle-free deployment.
  3. TLS encryption ensures, encryption between communicating applications and users over the Internet. You may use your own keys and certificates.
  4. Easy to deploy/use. Just one single file and no dependency on any platform.
  5. No installation required.
  6. Portable Executables.
  7. Run-on multiple CPUs/Cores.
  8. Advanced WebSockets technology – interactive communication session between browser and server.
  9. Server Markdown documents on the fly.
  10. Full support for the latest IPv6.
  11. Creates a log in a custom format.
  12. Serve FastCGI, Reverse Proxy, Rewrite and Redirects, Clean URL, Gzip compression, Directory Browsing, Virtual Hosts, and Headers.
  13. Available for All known Platform – Windows, Linux, BSD, Mac, Android.

What makes caddy Different?

  1. Caddy aims at serving the web as it should be in the year 2020 and not traditional style.
  2. It is designed not only to serve HTTP requests but also to humans.
  3. Loaded with the Latest features – HTTP/2, IPv6, Markdown, WebSockets, FastCGI, templates, and other out-of-box features.
  4. Run the executables without the need of Installing it.
  5. Detailed documentation with the least technical description.
  6. Developed keeping in mind the need and ease of Designers, Developers, and Bloggers.
  7. Support Virtual Host – Define as many sites as you want.
  8. Suited for you – no matter if your site is static or dynamic. If you are human it is for you.
  9. You focus on what to achieve and not how to achieve it.
  10. Availability of support for most platforms – Windows, Linux, Mac, Android, BSD.
  11. Usually, you have one Caddy file per site.
  12. Set up in less than 1 minute, even if you are not that much computer friendly.
Testing Environment

I will be testing it on the CentOS server, as well as Debian Server, but the same instructions also work on RHEL and Debian based distributions. For both the server I am going to use 64-bit executables.

Operating Systems: CentOS 8 and Debian 10 Buster
Caddy Version: v2.0.0

Installation of Caddy Web Server in Linux

No matter you are on what platform and which kind of architecture you are using, caddy provides ready to use binary packages, that can be installed using your default package manager as shown.

Install Caddy in Fedora, RedHat, CentOS

We will be installing the latest version of the Caddy web server from the CORP repository under Fedora or RHEL/CentOS 8.

# dnf install 'dnf-command(copr)'
# dnf copr enable @caddy/caddy
# dnf install caddy

On RHEL/CentOS 7 use the following commands.

# yum install yum-plugin-copr
# yum copr enable @caddy/caddy
# yum install caddy

Install Caddy in Debian and 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

Once installed caddy web server, you can start, enable, and check the status of the service using following systemctl commands.

# systemctl start caddy
# systemctl enable caddy
# systemctl status caddy

Now open your browser and point your browser to the following address and you should be able to see the caddy welcome page.

http://Server-IP
OR
http://yourdomain.com
Caddy Web Server
Caddy Web Server

Setting Up Domains with Caddy

To set up a domain, first, you need to point your domain’s A/AAAA DNS records at this server in your DNS control panel. Next, create a document root directory for your website "example.com" under folder /var/www/html as shown.

$ mkdir /var/www/html/example.com

If you’re using SELinux, you need to change the file security context for web content.

# chcon -t httpd_sys_content_t /var/www/html/example.com -R
# chcon -t httpd_sys_rw_content_t /var/www/html/example.com -R

Now open and edit the caddy configuration file at /etc/caddy/Caddyfile.

# vim /etc/caddy/Caddyfile

Replace :80 with your domain name and change the site root to /var/www/html/example.com as shown.

Configure Caddy Web Server
Configure Caddy Web Server

Reload the Caddy service to save the configuration change.

# systemctl reload caddy

Now create any HTML page (you may create your own) and save the page under document root directory for your website.

# touch /var/www/html/example.com/index.html

Add the following sample Html code to your website’s index page.

# echo '<!doctype html><head><title>Caddy Test Page at TecMint</title></head><body><h1>Hello, World!</h1></body></html>' | sudo tee /var/www/html/index.html

Now visit again your site to see your page.

Hosting Website with Caddy
Hosting Website with Caddy

If everything is correctly configured, your domain will be served over an HTTPS protocol indicating that your connection is secure.

Conclusion

If you are newbies and want to set up a webserver without getting your hands dirty with configuration, this tool is for you. Even if you are an experienced user who needs is instant and simple web server Caddy is worth a try. With a little configuration, you may also set folder permission, control authentication, error pages, Gzip, HTTP redirect, and others, if you need to set up a more complex and advanced webserver.

Don’t take Caddy as a replacement for Apache or Nginx. Caddy is not designed to handle high traffic production environment. It is designed for a quick webserver setup when your concern is speed and reliability.

References

Complete user Guide / Full Documentation of Caddy Web Server

We have brought this documentation which aims at quick review and installation instructions with images where ever necessary. If you come across any pros/cons of the project or any suggestion, you may give it to us in our comment section.

For me this project is too young still works flawlessly and seems powerful and promising. The biggest plus point I see is caddy doesn’t need to carry its configuration file everywhere. It aims at providing the best of Nginx, Lighttpd, vagrant, and Websocketd. That’s all from my side. Keep connected to Tecmint. Kudos

Ravi Saive
I am an experienced GNU/Linux expert and a full-stack software developer with over a decade in the field of Linux and Open Source technologies

Each tutorial at TecMint is created by a team of experienced Linux system administrators so that it meets our high-quality standards.

Join the TecMint Weekly Newsletter (More Than 156,129 Linux Enthusiasts Have Subscribed)
Was this article helpful? Please add a comment or buy me a coffee to show your appreciation.

4 thoughts on “How To Host a Website with HTTPS Using Caddy on Linux”

  1. The problem is Matthew Holt is an arrogant developer, therefore his product is not worth considering for the production environment.

    Recently I posted a question to the Caddy community forum about installing Caddy to which Mathew pointed me to the Caddy standard documentations to which I stated the documentation is more like a dictionary and not as an instructional guide which was agreed by Mathew himself.

    But the response from Methew was that I should learn how to use computers first before I attempt to use his product. My response to him was that a though he was arrogant in his response and that he should spend more time on documentation than on insulting people. His response to my message was to mark my response as an appropriate message.

    With that attitude, I don’t think any company should install this product in a production environment.

    Reply
  2. Don’t take Caddy as a replacement of Apache or Nginx. Caddy is not designed to handle high traffic production environment. It is designed for quick web server setup when you concern is speed and reliability.

    Totally wrong, Caddy is designed as a replacement.

    Reply

Got something to say? Join the discussion.

Thank you for taking the time to share your thoughts with us. We appreciate your decision to leave a comment and value your contribution to the discussion. It's important to note that we moderate all comments in accordance with our comment policy to ensure a respectful and constructive conversation.

Rest assured that your email address will remain private and will not be published or shared with anyone. We prioritize the privacy and security of our users.