In this tutorial, we are going to provide you with step-by-step instructions on how to install WordPress with Memcached and Nginx on an Ubuntu 16.04 VPS. WordPress is one of the best open-source content management systems written in PHP.
Requirements
At the time of writing this tutorial, the latest stable version of WordPress is 4.8 and it requires:
- PHP >= 5.2.4 . Also, using MemCached is highly recommended for better site performance;
- Nginx or Apache web server;
- MySQL or MariaDB installed on your Linux VPS.
Update the system
Make sure your package list and the OS packages are up to date by running the following commands:
sudo apt-get update sudo apt-get upgrade
You can also configure automatic updates.
Install Nginx
To install the latest Nginx version from the official Nginx repository, edit the ‘/etc/apt/sources.list’ file:
sudo vi /etc/apt/sources.list
Add the following lines:
deb http://nginx.org/packages/ubuntu/ xenial nginx deb-src http://nginx.org/packages/ubuntu/ xenial nginx
Install MySQL
sudo apt-get install mysql-server
Stop and remove Apache service, then install nginx your virtual server using the following commands:
sudo service apache2 stop sudo apt-get remove apache2 sudo apt-get autoremove sudo apt-get install nginx
Configure Nginx to start on boot:
sudo update-rc.d -f nginx defaults
Install Memcached, PHP 7 and PHP modules:
sudo apt-get install memcached php-memcache php-memcached php7.0 php7.0-cli php7.0-fpm php7.0-curl php7.0-mbstring php7.0-mysql php7.0-gd php7.0-zip php7.0-intl php7.0-mcrypt libgd-tools libmcrypt-dev mcrypt php-pear libgd-dev php-pear php7.0-dev
Start the WordPress installation procedure
Download the latest version of WordPress available at the official website to a directory of your virtual server, then extract it using the following commands:
sudo apt-get install wget unzip cd /opt/ wget https://wordpress.org/latest.zip unzip latest.zip mv /opt/wordpress/ /var/www/html/wordpress/
WordPress requires a database to work as this is where data is saved, so create a new MySQL database:
mysql -u root -p mysql> create database wpdb; mysql> GRANT ALL PRIVILEGES ON wpdb.* TO 'wpuser'@'localhost' IDENTIFIED BY 'Y0Ur_Pa55w0rD'; mysql> flush privileges; mysql> quit
Add the MySQL username, password and database name to the WordPress configuration file:
mv /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php
vi /var/www/html/wordpress/wp-config.php
define('DB_NAME', 'wpdb'); define('DB_USER', 'wpuser'); define('DB_PASSWORD', 'Y0Ur_Pa55w0rD');
Create a new Nginx configuration file and add the following virtual block for your domain name:
vi /etc/nginx/sites-available/your-domain.com.conf
Add the following lines:
server { listen 80; server_name your-domain.com; root /var/www/html/wordpress/; index index.php; access_log /var/log/nginx/your-domain.com-access.log; error_log /var/log/nginx/your-domain.com-error.log; charset en_us.UTF-8; location / { try_files $uri $uri/ /index.php?$args; } location ~* .(jpg|jpeg|png|gif|ico|css|js)$ { expires 365d; }location ~* .(pdf)$ { expires 30d; } location ~ .php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
Do not forget to replace ‘your-domain.com’ with your actual domain name. Then, disable the ‘default’ Nginx configuration file:
rm /etc/nginx/sites-enabled/default
Enable the new Nginx configuration file:
ln -sf /etc/nginx/sites-available/your-domain.com.conf /etc/nginx/sites-enabled/
Open the ‘/etc/php/7.0/fpm/pool.d/www.conf’ file and change the ‘listen’ variable:
change:
listen = /run/php/php7.0-fpm.sock
to:
listen = 127.0.0.1:9000;
Locate the PHP configuration file:
# php -i | grep -i php.ini Configuration File (php.ini) Path => /etc/php/7.0/cli Loaded Configuration File => /etc/php/7.0/cli/php.ini
Edit the ‘/etc/php/7.0/cli/php.ini’ configuration file:
vi /etc/php/7.0/cli/php.ini
Add/modify the following settings:
max_execution_time = 300 max_input_time = 600 memory_limit = 256M post_max_size = 64M upload_max_filesize = 64M
All of this seems too complicated? Get a WordPress VPS from us and we’ll do all of this for you, free of charge! We’ll take care of your server 24/7
Edit the ‘memcache.ini’ configuration file:
vi /etc/php/7.0/mods-available/memcache.ini
add the following lines at the end:
session.save_handler = memcache session.save_path = "tcp://localhost:11211"
Edit /etc/memcached.conf and increase the Memcached memory limit to 128 MB or higher:
change:
-m 64
to:
-m 128
The web server user (www-data) needs to be able to write to files and directories inside the ‘/var/www/html/wordpress’ directory, so it can easily be accomplished by executing the following command:
sudo chown www-data:www-data -R /var/www/html/wordpress/
Edit the main nginx configuration file (/etc/nginx/nginx.conf) and add ‘gzip_vary on’ in the ‘http’ block:
vi /etc/nginx/nginx.conf gzip_vary on
Test the nginx configuration:
# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
If the test is successful, restart memcached, php7.0-fpm and Nginx services for the changes to take effect:
sudo service memcached restart sudo service php7.0-fpm restart sudo service nginx restart
Open http://your-domain.com/ using your favorite web browser and follow the easy instructions. Once installed, log in to the administrator back-end and configure according to your needs.
Install and configure W3 Total Cache to use Memcached
Open http://your-domian.com/wp-admin/plugins.php >> Add New >> Search for ‘W3 Total Cache’ >> click ‘Install now’ next to ‘W3 Total Cache’ title >> Activate.
Open http://your-domian.com/wp-admin/plugins.php >> click ‘Settings’ from the W3 Total Cache section :
- Minify
Minify: select 'Enable' Minify Cache Method: Memcached
Click ‘Save all settings’.
- Object Cache
Object Cache: select 'Enable' Object Cache Method : Memcached
Click ‘Save all settings’.
That is it. The WordPress installation with Memcached and Nginx is now complete.