How to host multiple sites in a single Wordpress installation on Ubuntu 14.04

This document describes how to install and configure WordPress MU with the latest version in market of WordPress 4 on Ubuntu 14.04. WordPress started in 2003 with a single bit of code to enhance the typography of everyday writing and with fewer users than you can count on your fingers and toes. Since then it has grown to be the largest self-hosted blogging tool in the world, used on millions of sites and seen by tens of millions of people every day. This tutorial explains the process of installing WordPress 4.0 on Ubuntu 14.04 in the form of a simple-to-follow guide.

1 Preliminary Note

This tutorial is based on Ubuntu 14.04 server, so you should set up a basic Ubuntu 14.04 server installation before you continue with this tutorial. The system should have a static IP address. I use 192.168.0.100 as my IP address in this tutorial and server1.example.com as the hostname.  You must have a LAMP server installed in Ubuntu 14.04 as mentioned in the tutorial to continue further.

2 Database initialization

I will create  the database for the WordPress 4.0 as follows:

mysql -u root -p

Here we are adding database=wordpressdb user=wordpressuser and password=wordpresspassword:

CREATE DATABASE wordpressdb;
CREATE USER [email protected] IDENTIFIED BY 'wordpresspassword';
GRANT ALL PRIVILEGES ON wordpressdb.* TO [email protected];

Further moving ahead:

FLUSH PRIVILEGES;
exit

Restart services

service apache2 restart
service mysql restart

 

3 Installation of WordPress 4.0

We will first make a directory temp in which I will the download the latest version of the WordPress as follows:

mkdir temp
cd temp
wget http://wordpress.org/latest.zip

We need to install unzip as by default it is now installed:

apt-get install unzip

Further moving ahead if you  wish to work with images, install plugins and site updation with SSH credentials then we will install php5-gd libssh2-php

apt-get update
apt-get install php5-gd libssh2-php

unzip the WordPress zip file in the following created folder:

unzip -q latest.zip -d /var/www/html/

Now give appropriate permissions in the directory

chown -R www-data.www-data /var/www/html/wordpress
chmod -R 755 /var/www/html/wordpress

Further we need to manually create the uploads directory beneath the wp-content directory at our document root. This will be the parent directory of our content: 

mkdir -p /var/www/html/wordpress/wp-content/uploads

We need to allow the web server itself to write to this directory. We can do this by assigning group ownership of this directory to our web server. This will allow the web server to create files and directories under this directory, which will permit us to upload content to the server. Proceed like this:

chown -R :www-data /var/www/html/wordpress/wp-content/uploads

Now we need to copy it to the default configuration file location to get WordPress to recognize the file. The sample configuration file is available at /var/www/html/wordpress:

cd /var/www/html/wordpress/

cp wp-config-sample.php wp-config.php

nano wp-config.php

[...]

// ** MySQL settings - You can get this info from your web host ** // /** The name of the database for WordPress */ define('DB_NAME', 'wordpressdb'); /** MySQL database username */ define('DB_USER', 'wordpressuser'); /** MySQL database password */ define('DB_PASSWORD', 'wordpresspassword');

[...]

Change values as you gave at the time of database initialization.

3.1 Multiple site configuration

Now we will proceed with the multiple site configuration, for this we need to add these lines to our wp-config.php file just above the /* That’s all, stop editing! Happy blogging. */ line.

nano /var/www/html/wordpress/wp-config.php

/* Multisite */
define('WP_ALLOW_MULTISITE', true);
/* That's all, stop editing! Happy blogging. */

Now we will activate the apache Mod_Rewrite module:

a2enmod rewrite

Now we will change the default virtual host file for Apache as follows:

nano /etc/apache2/sites-enabled/000-default.conf

[...]
<Directory /var/www/html> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory>

Restart Apache2 to make the services affective:

service apache2 restart

After that we will be installing the Wordpress 4 within browser.

4 Web installation

Open a browser of your choice and go to the URL http://192.168.0.100/Wordpress:

Select language and press Continue:

 

Now give the values as I gave in my case

Site Title = Wordpress-testsite
Admin Email = [email protected]
Username = admin
Admin password = howtoforge
Confirm Admin Password = howtoforge

The above values will differ in you case, you can give any values of your choice. After giving the values press Install WordPress:


 

Now we will proceed towards the login page by pressing LogIn:

Give the credentials as you selected at the time of web WordPress installation. This will be your default welcome window of WordPress. 



You can check the WordPress version in browser as:

4.1 Multiple sites configuration 

Now goto Tools-->Network setup

Give the entries as follows

Network Title = Wordpress-testsite multisite
Network admin email = [email protected]

and press Install

It will yield the following window:

Add the following to your wp-config.php file in /var/www/html/wordpress/ above the line reading /* That’s all, stop editing! Happy blogging. */:

nano /var/www/html/wordpress/wp-config.php

Give the entries as per the your output after the multisite installation. In my case it was:

[...]
/* Multisite */ define('WP_ALLOW_MULTISITE', true); define('MULTISITE', true); define('SUBDOMAIN_INSTALL', false); define('DOMAIN_CURRENT_SITE', '192.168.0.100'); define('PATH_CURRENT_SITE', '/wordpress/'); define('SITE_ID_CURRENT_SITE', 1); define('BLOG_ID_CURRENT_SITE', 1); /* That's all, stop editing! Happy blogging. */
[...]

Note: In my case I am using 192.168.0.100 which will be different in your case

Add the following entries to your .htaccess file in /var/www/html/wordpress/, replacing other WordPress rules:

nano /var/www/html/wordpress/.htaccess

RewriteEngine On
RewriteBase /wordpress/
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

Now relogin to the WordPress. After successfully setting up the Multisite Network, you need to switch to the Network Dashboard to configure network settings, add new sites, and do lots of other things. Take your mouse over to My Sites menu in the admin toolbar, a flydown popup will appear. Click on Network Admin-->Dashboard.



It will direct you to the Dashboard of the WordPress multisite.




Now you can create new site by clicking Sites-->Add New



Just add the values as per your requirement.

Congratulations! You now have a fully functional WordPress 4.0 instance with multiple site network on your Ubuntu 14.04 :)

Share this page:

5 Comment(s)

Add comment

Comments

From: john d

thank you

one more thing, how did you move the window close/maximize... buttons to the right?

From: evan c.

Thanks a lot!

It works fine.

From: Marcello Ravazza

Perfect ! Thanks

I found this minor bug

chown -R :www-data /var/www/html/wordpress/wp-content/uploads

must be changed in

chown -R www-data:www-data /var/www/html/wordpress/wp-content/uploads

From: Sara Khan

Thanks for the posting the installation method of the word process. It really us to instal word process..

From: harshita

hii, i am getting blank page on multisites -> subpats  , i mean dashbord  only shows for main site,  when i want to open child sites i am getting balnk page (white screen with(localhost/wordpress/childsite))....please help me to resolve my issue.