Introduction
WordPress is a famous content management system based on PHP and MySQL, distributed under the terms of the GNU GPLv2 (or later). In most cases it is installed by using Apache or NGINX as web servers, or, as we explained in this tutorial, it can run on an isolated environment like Docker containers.
Alongside these choices, there is a new web server which is rapidly gaining popularity: Caddy.
Caddy (or Caddy web server), is an open source, HTTP/2 web server which enables HTTPS by default, without requiring external configuration. Caddy also has a strong integration with Let’s Encrypt.
This tutorial explains how to install and configure WordPress on top of your Caddy web server, installed following our guide.
Install PHP
As we said in the introduction, WordPress requires a web server, MySQL and PHP. First of all, install PHP and the extensions required by WordPress, by executing the following command:
# apt-get install php7.0-fpm php7.0-mysql php7.0-curl php7.0-gd php7.0-mbstring php7.0-mcrypt php7.0-xml php7.0-xmlrpc
Verify that the PHP was correctly installed by checking its version:
$ php -v
Install and Configure MariaDB
MariaDB is also available in the repository, so just use apt:
# apt-get install mariadb-client mariadb-server
MariaDB is a MySQL fork, and it uses its name for the systemd service:
# systemctl start mysql
Set MariaDB root password to secure your database:
# mysql_secure_installation
You will be asked for the following configuration parameters:
Enter current password for root (enter for none): PRESS ENTER Set root password? [Y/n] Y ENTER YOUR PASSWORD Remove anonymous users? [Y/n] Y Disallow root login remotely? [Y/n] Y Remove test database and access to it? [Y/n] Y Reload privilege tables now? [Y/n] Y
Once that step is complete you can access the MariaDB database with your password:
$ mysql -u root -p
Create New Database and User
Start the MariaDB shell:
$ mysql -u root -p
Use the MariaDB prompt to create a new database for WordPress. In this tutorial, we use wordpressdb as the database name, and wordpressusr as the username for the WP installation. So our code looks like this:
mysql> CREATE DATABASE wordpressdbmysql> CREATE USER wordpressusr@localhost IDENTIFIED BY 'usr_strong_password'; mysql> GRANT ALL PRIVILEGES ON wordpressdb.* to wordpressusr@localhost IDENTIFIED BY 'usr_strong_password';DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Next, you can flush privileges and exit:
mysql> FLUSH PRIVILEGES; mysql> EXIT;
Install WordPress
Downloading and installing WordPress is quite an easy process, which requires executing just the following commands:
# cd /var/www # wget wordpress.org/latest.zip # unzip latest.zip
Change WordPress permissions with:
# chown -R www-data:www-data wordpress
Rename the WordPress config file and edit it:
# cd wordpress # mv wp-config-sample.php wp-config.php # $EDITOR wp-config.php
Here, change the database informations, using those specified during the MariaDB configuration process:
DB_NAME = wordpressdb DB_USER = wordpressusr DB_PASSWORD = usr_strong_password
Configure Caddy and Start WordPress Installation Wizard
This tutorial assumes you installed Caddy web server already. Edit its configuration file:
# $EDITOR /etc/caddy/Caddyfile
In this file, paste the following content:
<span class="highlight">example.com</span> {
tls <strong><span class="highlight">admin@example.com</span></strong>
root /var/www/wordpress
gzip
fastcgi / /run/php/php7.0-fpm.sock php
rewrite {
if {path} not_match ^\/wp-admin
to {path} {path}/ /index.php?_url={uri}
}
}
Note:
is the email address that will be used for Let’s Encrypt certificate request.
Restart Caddy:
# systemctl restart caddy
As a last step, with a web browser, go to your website. This will start the WordPress GUI installation wizard which will finish the installation process and give you access to the WordPress dashboard.
Conclusion
At the end of the previous steps, a new WordPress instance will run on top of this new, tiny and powerful web server. Caddy will require certificates from Let’s Encrypt and enable automatically HTTPS connections, without any other manual configuration.