How to Host Multiple WordPress sites on Cloud

I have a few WordPress blogs, a couple of PHP based websites and a flask application. I recently decided to host all my websites in one place. Until recently I was using Amazon EC2 for some of these websites but it was proving to be quite costly so I decided to switch to Google Cloud.

Setup Your Instance

I have used a LAMP Stack instance from Google’s VM marketplace but honestly, you can use any instance you like. Using the LAMP stack will simply give your Apache HTTP server, MySQL and PHP installed beforehand.

Install packages

We will need to install a few packages to get things going. These packages will make PHP and MySQL available on our box.

sudo apt update sudo apt install php libapache2-mod-php mysql-server php-mysql

Configure Apache Server

Next, we need to configure our Apache server. Browse to the following folder and create the config files there:

cd /etc/apache2/sites-available/

Website 1

This is the config file for my first website. I have named it maskaravivek.com.conf

<VirtualHost *:80>
     ServerAdmin admin@maskaravivek.com
     DocumentRoot /var/www/html/maskaravivek.com/
     ServerName maskaravivek.com
     ServerAlias www.maskaravivek.com

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

ErrorLog ${APACHE_LOG_DIR}/error.log
     CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

**Note:**The config points to the /var/www/html/maskaravivek.com/ directory. This is the place where the WordPress files for my first website reside.

Website 2

This is the config file for my first website. I have named it windowsapptutorials.com.conf

<VirtualHost *:80>
     ServerAdmin admin@windowsapptutorials.com
     DocumentRoot /var/www/html/windowsapptutorials.com/
     ServerName windowsapptutorials.com
     ServerAlias www.windowsapptutorials.com

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

ErrorLog ${APACHE_LOG_DIR}/error.log
     CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

The config points to the /var/www/html/windowsapptutorials.com/ directory.

Enable Sites

Next, let us enable both these websites using the following command.

sudo a2ensite maskaravivek.com.conf sudo a2ensite windowsapptutorials.com.conf

Setup MySQL

Login into MySQL and run the following commands to create databases for both your websites.

Website 1

Create a database and user for Website 1. We create a user maskaravivek_wordpress and grant all database permissions to it.

CREATE DATABASE maskaravivek_wordpress;
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON maskaravivek_wordpress.* TO maskaravivek_wordpress@localhost IDENTIFIED BY '<password>';

Website 2

Create a database and user for Website 1. We create a user windows_app_tutorials_wordpress and grant all database permissions to it.

CREATE DATABASE windows_app_tutorials_wordpress;

GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON windows_app_tutorials_wordpress.* TO windows_app_tutorials_wordpress@localhost IDENTIFIED BY '<password>'; 

Finally, run the following command so that the changes come into effect.

FLUSH PRIVILEGES; 
quit

Install and Configure Wordpress

We need multiple copies of Wordpress on our box so we will download the latest tar of Wordpress and copy it to the respective directories specified by the Apache configs.

Download

Use the following commands to download Wordpress to thetmp folder and copy it to the respective locations.

cd /tmp/ && wget http://wordpress.org/latest.tar.gz 
tar -xzvf latest.tar.gz 
sudo cp -R wordpress/* /var/www/html/maskaravivek.com 
sudo cp -R wordpress/* /var/www/html/windowsapptutorials.com

Configure Wordpress

Next, copy the sample configs to the wp-config.php file for both the websites.

Website 1

sudo cp /var/www/html/maskaravivek.com/wp-config-sample.php /var/www/html/maskaravivek.com/wp-config.php 

Website 2

sudo cp /var/www/html/windowsapptutorials.com/wp-config-sample.php /var/www/html/windowsapptutorials.com/wp-config.php

Next, open the wp-config.php files one by one and update the database connection properties for both the websites.

sudo vim /var/www/html/maskaravivek.com/wp-config.php 

In the wp-config.php you just need to update the following 4 properties.

// ** MySQL settings - You can get this info from your web host ** // /** The name of the database for WordPress */ 
define('DB_NAME', 'examplecomdb'); 
/** MySQL database username */ 
define('DB_USER', 'examplecomuser'); 
/** MySQL database password */ 
define('DB_PASSWORD', 'type_password_here'); 
/** MySQL hostname */ define('DB_HOST', 'localhost');

Similarly, update the config for 2nd website.

sudo vim /var/www/html/windowsapptutorials.com/wp-config.php

Final Touches

Next, update permissions for /var/www/html folder to make it executable.

sudo chown -R www-data:www-data /var/www/html 
sudo chmod -R 755 /var/www/html

Finally, run the following commands to update and restart the Apache Web service.

sudo apachectl configtest 
sudo a2enmod rewrite 
sudo systemctl restart apache2.service

That’s it. Both your websites are now setup. Browse to the following location to access your WordPress website.

http://<ip_address>/windowsapptutorials.com

This will redirect you to the Wordpress setup screen. Just follow the wizard to complete your setup.


Written on March 24, 2020 by Vivek Maskara.

Originally published on Medium

Vivek Maskara
Vivek Maskara
SDE @ Remitly

SDE @ Remitly | Graduated from MS CS @ ASU | Ex-Morgan, Amazon, Zeta

Related