Here is a guide for installing Caddy Web Server (with PHP-FPM) on Ubuntu 16.04:


The Caddy Web Server is an HTTP / 2-based open-source server. This server can run on a variety of systems, making it very preferred by programmers. Whatever your operating system, you can use this server without experiencing any constraints. With the ease of running on Windows, Mac OS, Linux, Android to the BSD operating system, this server is one of the most favorite servers to this day. One that is considered the most fun feature of the Caddy Web Server is the HTTPS automation feature (by default) without requiring additional configuration.


If you are a Ubuntu 16.04 user, installing this server on your computer is probably something difficult. But do not worry because in this article we provide a step by step guide how to install Caddy Web Server with PHP-FPM on your Ubuntu 16.04. First of all we will do Caddy installation on local environment followed by PHP-FPM configuration for PHP based application.


Before starting the installation process, make sure we meet the following requirements:

  • Ubuntu Server 16.04
  • Access rights to root


Installation steps

Install Caddy Web Server

In this first step we will use a installer script which can automatically download binary files and also execute (against those files) to the bin directory. So we need to find the installer script.

Open: wget -O getcaddy
chmod + x getcaddy


After getting the installer script, we need to run it with sudo.

Open: sudo ./getcaddy personal http.ipfilter, http.ratelimit


To be known:

  • ‘getcaddy’ is the caddy installer
  • ‘personal’ is our installation license
  • ‘http.ipfilter’ is the one used for caddy plugin installation


Basic Configuration of Caddy Web Server

This is the second step we should do. We will create a new user, a new directory for the configuration file, a new directory for the caddy log file and finally, the new directory as the container for the caddy web root directory.
To create a new user, we can use the ‘/bin.false’ option as described below:

useradd -M -s /bin/false caddy


Then we need to run the following mkdir command. The goal is to create a caddy directory.

mkdir -p /etc/caddy
mkdir -p /var/log/caddy
mkdir -p /var/www/html


The next step is to change ownership to the caddy user as follows:

chown -R caddy:root /etc/caddy /var/log/caddy


After this step is done, we will create a new configuration file that we will call ‘caddyfile’. We need to open the ‘/etc/caddy‘ directory followed by a new configuration with vim command.

cd /etc/caddy/
nano Caddyfile


Next we need to stick to the basic configuration there as shown below: {
     root /var/www/html
     log /var/log/caddy/caddy.log
     tls off

Finally, save and exit!


To note, ‘tls off’ means we are running caddy on the local server. You do not need to enable this option if you are on a live server.


Running caddy on Ubuntu 16.04

This is the third step and in this step we will run Caddy Web Server. We also need to create an index.html file for it. As before, use vim to create a new service file. This new file will be called ‘caddy.service’.

vim /etc/systemd/system/caddy.service


Use the following configuration:

 Description=Caddy HTTP/2 Unit Web Server
 ExecStart=/usr/local/bin/caddy -agree=true -log=/var/log/caddy/caddy.log -conf=/etc/caddy/Caddyfile -root=/dev/null
 ExecReload=/bin/kill -USR1 $MAINPID

Save and exit.


Then use the systemctl command to start our caddy service. Use the following procedure:

systemctl re-daemon
systemctl started caddy


Whenever we are on system boot, enable them

systemctl activate caddy


Now we find your new server running on Ubuntu 16.04

Create a new index.html file:


We have to create a new index.html file in the web root directory ‘/var/www/html’. To make the file we need to go to that directory first. Use the command as follows:

cd /var/www/html
echo 'Caddy webserver is working' > index.html


The final step in making the index.html file is to change the file owner status to the file user. Use the command as follows:

chown -R caddy:caddy /var/www/html

We now have a new index.html file. Open the browser and type the domain name that has been set in the ‘Caddyfile’ configuration. We will be taken to our new index page.



Install PHP and PHP-FPM 7.0

This is the fourth step and in this step we will install PHP-FPM from the Ubuntu repository.


First run the command as follows:

sudo apt install -y php7.0-fpm php7.0-cli curl


After we complete the installation, the configuration file for PHP-FPM is the next step. Now we have to open the directory ‘/etc/php/7.0/fpm’ and edit the configuration file pool ‘www’conf’. Use vim again.

cd /etc/php/7.0/fpm
vim pool.d/www.conf


Clear the signs below:

listen.owner = www-data = www-data
listen.mode = 0660

Save and exit.


Upon exit we need to add the caddy user to the ‘www-data’ group. Do the commands below:

usermod -a -G www-data caddy


Enable PHP-FPM service every time we are on system boot. How to activate it is as follows:

systemctl start php7.0-fpm
systemctl enable php7.0-fpm


After the activation, all installation and configuration process of PHP-FPM has been completed. Now we can use PHP-FPM on our Caddy server.

We may need to check the PHP-FPM socket file with the following command:

netstat -pl | grep php


Add PHP-FPM support to the Caddy server

This is the fifth step and in this step we need to open the ‘/etc/caddy’ configuration directory. To edit the ‘Caddyfile’ configuration file we need to use vim.

cd /etc/caddy
nano Caddyfile


After the configuration file has been edited, we need to add PHP-FPM configuration according to our domain name. Examples are as follows: {
     root /var/www/html
     log /var/log/caddy/caddy.log
     errors /var/log/caddy/errors.log
     tls off
     # PHP-FPM Configuration for Caddy
     fastcgi / /run/php/php7.0-fpm.sock php {
         ext .php
         split .php
         index index.php

Save and exit.


After logging out, we need to restart the server to start the PHP-FPM service correctly.

systemctl restart caddy
systemctl restart php7.0-fpm

The Caddy web server configuration with PHP-FPM has been done perfectly.


Final test

This is the last step. We need to make sure everything that has been done is functioning as we expect it to be. First we need to go to the web root directory ‘/var/www/html’ and then create a new file we’ll call ‘info.php’.

cd /var/www/html
echo '' > phpinfo.php


Access our browser and we type as follows:
(Replace with your domain name)


Bingo! We now get your PHP page.


Caddy Webserver successfully installed on Ubuntu 16.04.


No responses yet

Leave a Reply

Your email address will not be published. Required fields are marked *