Skip to content
Follow
CMS Ubuntu Linux

How to Install Drupal with Nginx and Cloudflare on Ubuntu

Richard
Written by
Richard
Apr 23, 2019 Updated Apr 18, 2026 6 min read
Enable Auto Login on Ubuntu Linux: Step-by-Step Guide
Enable Auto Login on Ubuntu Linux: Step-by-Step Guide

You install Drupal with Nginx and Cloudflare on Ubuntu to build a fast, secure, and high-performance website.

Drupal is a flexible content management system (CMS) for dynamic websites, Nginx is a high-performance web server, and Cloudflare provides caching, security, and a free SSL certificate.

This combination ensures your Drupal 9 (or later) site loads quickly and stays protected from common web threats.

You get a robust platform ready for significant traffic, delivering a superior user experience by mastering this setup.

⚡ Quick Answer

Install Drupal by first configuring Cloudflare with your domain and enabling “Full (strict) SSL”. Then, install Nginx, MariaDB, and PHP on your Ubuntu server, create a database for Drupal, and finally download and configure Drupal.

Setting up Cloudflare

Setting up Cloudflare is your first step to securing and speeding up your website. You’ll need to sign up for a free account on the Cloudflare website if you don’t have one already, then log in and add your domain name to get started.

If you already have an account, log in. Click the button to add a new site. https://dash.cloudflare.com/sign-up

Type in your domain name.

Cloudflare WordPress setup
cloudflare wordpress setup

Cloudflare will look for your domain settings.

Cloudflare WordPress setup
cloudflare wordpress setup 1

Select the free plan option.

Cloudflare WordPress setup
cloudflare wordpress setup 2

Cloudflare will give you two “nameservers.” You must go to the website where you bought your domain name (like Google Domains) and replace their current nameservers with the ones Cloudflare provided.

Cloudflare WordPress setup
cloudflare wordpress setup 3

Wait for the changes to take effect. This can take up to an hour.

Cloudflare WordPress setup
cloudflare wordpress setup 4

Once your status says “Active,” go to the “Crypto” tab. Turn on “Full (strict) SSL” to keep your connection secure.

This image has an empty alt attribute; its file name is cloudflare-setup-name-servers.png
cloudflare setup name servers

Scroll down to “Origin Certificates” and create a certificate.

Cloudflare WordPress Setup
cloudflare wordpress setup 16

Follow the steps to generate a private key and certificate.

This image has an empty alt attribute; its file name is cloudflare-overview-active.png
cloudflare overview active

Note: You will need admin privileges to create these files on your server. Run these commands on your Ubuntu server to create the files:

🐧Bash / Shell
sudo nano /etc/ssl/private/cloudflare_key_example.com.pem
🐧Bash / Shell
sudo nano /etc/ssl/certs/cloudflare_example.com.pem

Download the Cloudflare Origin Pull certificate from this link: Set up authenticated Origin pulls · Cloudflare SSL docs

Run these commands to create the final security file:

🐧Bash / Shell
sudo nano /etc/ssl/certs/origin-pull-ca.pem

You should now have three files on your server. Make sure “Always Use HTTPS” is turned on in your Cloudflare settings.

Cloudflare WordPress Setup
cloudflare wordpress setup 6
Cloudflare WordPress Setup
cloudflare wordpress setup 17
This image has an empty alt attribute; its file name is cloudflare_wordpress_setup_8.png
cloudflare wordpress setup 8
WordPress Cloudflare
cloudflare wordpress setup 9
This image has an empty alt attribute; its file name is cloudflare_wordpress_setup_10.png
cloudflare wordpress setup 10

Installing Drupal and Nginx

Installing Nginx, a popular web server, is next on our list to get your Drupal site running on Ubuntu. You’ll need administrator access to run commands like ‘sudo apt update’ and ‘sudo apt install nginx’ to get it installed and ready.

First, install the Nginx web server:

🐧Bash / Shell
sudo apt update
sudo apt install nginx

Use these commands to manage the service:

🐧Bash / Shell
sudo systemctl stop nginx.service
sudo systemctl start nginx.service
sudo systemctl enable nginx.service

Test if it works by visiting your server’s address in a web browser.

This image has an empty alt attribute; its file name is cloudflare_wordpress_setup_11.png
cloudflare wordpress setup 11

Installing the Database

Drupal needs a database to store all its information, and we’ll use MariaDB for this. Installing MariaDB on your Ubuntu server is straightforward using the command ‘sudo apt-get install mariadb-server mariadb-client’.

🐧Bash / Shell
sudo apt-get install mariadb-server mariadb-client

Enable the service:

🐧Bash / Shell
sudo systemctl stop mysql.service
sudo systemctl start mysql.service
sudo systemctl enable mysql.service
🐧Bash / Shell
sudo systemctl stop mariadb.service
sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service

Secure the database with a password:

🐧Bash / Shell
sudo mysql_secure_installation

Follow the prompts to set a password and remove test settings. Test the connection:

🐧Bash / Shell
sudo mysql -u root -p
This image has an empty alt attribute; its file name is cloudflare_wordpress_setup_12.png
cloudflare wordpress setup 12

Installing PHP

Drupal runs on PHP, so we need to install it on your server. You can add the necessary repository and then install PHP version 7.2 along with required modules using commands like ‘sudo apt update’ and ‘sudo apt install php7.2-fpm’.

🐧Bash / Shell
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:ondrej/php
🐧Bash / Shell
sudo apt update
🐧Bash / Shell
sudo apt install php7.2-fpm php7.2-common php7.2-gmp php7.2-curl php7.2-intl php7.2-mbstring php7.2-xmlrpc php7.2-mysql php7.2-gd php7.2-xml php7.2-cli php7.2-zip

Open the configuration file to make sure it works well with Drupal:

🐧Bash / Shell
sudo nano /etc/php/7.2/fpm/php.ini
💻Code
file_uploads = On
allow_url_fopen = On
short_open_tag = On
memory_limit = 256M
cgi.fix_pathinfo = 0
upload_max_filesize = 100M
max_execution_time = 360
date.timezone = America/Chicago

Restart Nginx to apply changes:

🐧Bash / Shell
sudo systemctl restart nginx.service

Create a test file to verify PHP is working:

🐧Bash / Shell
sudo nano /var/www/html/phpinfo.php
💻Code

Visit your site in a browser to see the test page.

This image has an empty alt attribute; its file name is cloudflare_wordpress_setup_13.png
cloudflare wordpress setup 13

Creating the Drupal Database

Log into your database and create a space for Drupal:

🐧Bash / Shell
sudo mysql -u root -p
💻Code
CREATE DATABASE drupal;
💻Code
CREATE USER 'drupaluser'@'localhost' IDENTIFIED BY 'new_password_here';
💻Code
GRANT ALL ON drupal.* TO 'drupaluser'@'localhost' IDENTIFIED BY 'user_password_here' WITH GRANT OPTION;
💻Code
FLUSH PRIVILEGES;
EXIT;

Downloading Drupal

Downloading Drupal is made easier with Composer, a tool for managing PHP dependencies. First, install Composer using ‘curl -sS https://getcomposer.org/installer | sudo php — –install-dir=/usr/local/bin –filename=composer’, then you can download Drupal itself.

🐧Bash / Shell
sudo apt install curl git
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

Download the latest version and set file permissions:

Command Prompt
cd /var/www/html
sudo git clone --branch 8.6.0 https://git.drupal.org/project/drupal.git example.com
cd /var/www/html/example.com
sudo composer install
🐧Bash / Shell
sudo chown -R www-data:www-data /var/www/html/example.com/
sudo chmod -R 755 /var/www/html/example.com/

Configuring Nginx and Finishing Up

Configuring Nginx is the final step to get your Drupal site live, and it involves creating a server block file. You’ll set up directives like ‘listen 80’, ‘server_name’, and ‘root’ in a file like ‘/etc/nginx/sites-available/example.com’.

🐧Bash / Shell
sudo nano /etc/nginx/sites-available/example.com
🐘PHP
server {
listen 80;
listen [::]:80;
listen 443 ssl http2;
listen [::]:443 ssl http2;

server_name example.com www.example.com;
root /var/www/html/example.com;
index index.php;

ssl_certificate /etc/ssl/certs/cloudflare_example.com.pem;
ssl_certificate_key /etc/ssl/private/cloudflare_key_example.com.pem;
ssl_client_certificate /etc/ssl/certs/origin-pull-ca.pem;
ssl_verify_client on;

client_max_body_size 100M;

autoindex off;

location / {
try_files $uri /index.php?$query_string;
}

location @rewrite {
rewrite ^/(.*)$ /index.php?q=$1;
}

location ~ [^/].php(/|$) {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

location ~ ^/sites/.*/files/styles/ {
try_files $uri @rewrite;
}

location ~ ^(/+)?/system/files/ {
try_files $uri /index.php?$query_string;
}
}

Enable the site and restart Nginx:

🐧Bash / Shell
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo systemctl restart nginx.service

Visit your domain in your browser to start the Drupal setup wizard. Follow the on-screen instructions to finish.

This image has an empty alt attribute; its file name is cloudflare_wordpress_setup_15.png
cloudflare wordpress setup 15
nginx default home page test
nginx default page
mariadb welcome
mariadb ubuntu 1604
PHP Test Page
php test page
Drupal install composer
drupal ubuntu install

Don’t forget to install the Cloudflare module: https://www.drupal.org/project/cloudflare

To upgrade in the future, use this command:

🐧Bash / Shell
sudo composer update /var/www/html/example.com/core --with-dependencies
cd /var/www/html/example.com
sudo composer require drush/example.com
cd /var/www/html/example.com/vendor/drush/drush
./drush updatedb
./drush cr

Summary

This guide has walked you through installing Drupal with Nginx and Cloudflare on Ubuntu, covering everything from securing your site with Cloudflare to setting up Nginx, MariaDB, and PHP. Your Drupal site is now ready to go live.

[Y/n]

[Y/n]

[Y/n]

[Y/n]

[Y/n]

[a-z-]









Was this guide helpful?

Was this helpful?
Richard

About the Author

Richard

Tech Writer, IT Professional

Richard, a writer for Geek Rewind, is a tech enthusiast who loves breaking down complex IT topics into simple, easy-to-understand ideas. With years of hands-on experience in system administration and enterprise IT operations, he’s developed a knack for offering practical tips and solutions. Richard aims to make technology more accessible and actionable. He's deeply committed to the Geek Rewind community, always ready to answer questions and engage in discussions.

📚 Related Tutorials

How to install Drupal with Nginx on Ubuntu 24.04
CMS How to install Drupal with Nginx on Ubuntu 24.04
How to Setup WordPress with Nginx and Cloudflare on Ubuntu
CMS How to Setup WordPress with Nginx and Cloudflare on Ubuntu
How to Setup Joomla on Ubuntu with Nginx & Cloudflare
CMS How to Setup Joomla on Ubuntu with Nginx & Cloudflare
How to Install GNOME Desktop on Ubuntu 24.04
Ubuntu Linux How to Install GNOME Desktop on Ubuntu 24.04

No comments yet — be the first to share your thoughts!

Leave a Comment

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