WordPress is free, open-source, and the most popular content management system based on PHP and MySQL. It is a customizable CMS supporting plugins that allows you to set up blogs and websites easily. WordPress provides a rich set of features and benefits including publishing tools, flexibility, simplicity, media management, user management, an easy theme system, customizability, and more. If your Linux system has 1 CPU and 4GB RAM, you can run multiple WordPress sites on a single server. Apache virtual host allows you to host multiple WordPress sites on a single server with a single IP address and multiple domain names.
In this tutorial, we will learn how to host multiple WordPress sites on a single VPS.
Prerequisites
- A fresh Ubuntu 18.04 server VPS on the Atlantic.Net Cloud Platform.
- Two valid domain names or subdomain names are pointed at your VPS IP address.
- In this tutorial, we will use site1.example.com and site2.example.com subdomains to host WordPress sites.
Step 1 – Install a LAMP Server
Before starting, you will need to install Apache web server, MariaDB server, PHP and other PHP modules on your server. You can install all of them with the following command:
apt-get install apache2 mariadb-server php7.2 libapache2-mod-php7.2 php7.2-common php7.2-mbstring php7.2-xmlrpc php7.2-soap php7.2-gd php7.2-xml php7.2-intl php7.2-mysql php7.2-cli php7.2-mcrypt php7.2-ldap php7.2-zip php7.2-curl unzip -y
Once all the packages are installed, open the php.ini file and tweak some settings:
nano /etc/php/7.2/apache2/php.ini
Change the following lines:
memory_limit = 256M upload_max_filesize = 100M max_execution_time = 360 date.timezone = America/Chicago
Save and close the file. Then, start Apache and MariaDB service and enable them to start after system reboot with the following command:
systemctl start apache2 systemctl start mariadb systemctl enable apache2 systemctl enable mariadb
Step 2 – Configure Database for WordPress
Next, you will need to create a separate database and user for each WordPress site. Here, we will create a wpdb1 database with wpuser1 for site1.example.com and wpdb2 database with wpuser2 for site2.example.com.
To do so, log in to MariaDB shell with the following command:
mysql -u root -p
Provide your root password when prompt then create a wpdb1 and wpdb2 database with the following command:
MariaDB [(none)]> CREATE DATABASE wpdb1; MariaDB [(none)]> CREATE DATABASE wpdb2;
Next, create a wpuser1 and wpuser2 user, and set the password with the following command:
MariaDB [(none)]> GRANT ALL ON wpdb1.* TO 'wpuser1'@'localhost' IDENTIFIED BY 'password'; MariaDB [(none)]> GRANT ALL ON wpdb2.* TO 'wpuser2'@'localhost' IDENTIFIED BY 'password';
Next, flush the privileges and exit from the MariaDB shell with the following command:
MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> EXIT;
Step 3 – Download and Install WordPress
Next, you will need to download the latest version of WordPress from their official website. You can download it with the following command:
wget http://wordpress.org/latest.tar.gz
Once downloaded, extract the downloaded file with the following command:
tar -xzvf latest.tar.gz
Next, copy the extracted directory to the Apache root directory for each site:
cp -r wordpress /var/www/html/site1.example.com cp -r wordpress /var/www/html/site2.example.com
Next, rename the sample configuration file for each site with the following command:
mv /var/www/html/site1.example.com/wp-config-sample.php /var/www/html/site1.example.com/wp-config.php mv /var/www/html/site2.example.com/wp-config-sample.php /var/www/html/site2.example.com/wp-config.php
Next, open the configuration file for site1 with the following command:
nano /var/www/html/site1.example.com/wp-config.php
Define the database connection info as shown below:
/** The name of the database for WordPress */ define('DB_NAME', 'wpdb1'); /** MySQL database username */ define('DB_USER', 'wpuser1'); /** MySQL database password */ define('DB_PASSWORD', 'password'); /** MySQL hostname */ define('DB_HOST', 'localhost');
Save and close the file. Then, open the configuration file for site2 with the following command:
nano /var/www/html/site2.example.com/wp-config.php
Define the database connection info as shown below:
/** The name of the database for WordPress */ define('DB_NAME', 'wpdb2'); /** MySQL database username */ define('DB_USER', 'wpuser2'); /** MySQL database password */ define('DB_PASSWORD', 'password'); /** MySQL hostname */ define('DB_HOST', 'localhost');
Save and close the file when you have finished.
Note: Make sure database, user and password value matches with that which you have created earlier.
Next, set up proper permissions for each site with the following command:
chown -R www-data:www-data /var/www/html/site1.example.com chown -R www-data:www-data /var/www/html/site2.example.com
Step 4 – Configure Apache for WordPress
Next, you will need to create an Apache virtual host file for each site.
First, create an Apache virtual host file for site1 with the following command:
nano /etc/apache2/sites-available/site1.example.com.conf
Add the following lines:
<VirtualHost *:80> ServerAdmin [email protected] DocumentRoot /var/www/html/site1.example.com/ ServerName site1.example.com <Directory /var/www/html/site1.example.com/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/site1.example.com_error.log CustomLog ${APACHE_LOG_DIR}/site1.example.com_access.log combined </VirtualHost>
Save and close the file. Then, create an Apache virtual host file for site2 with the following command:
nano /etc/apache2/sites-available/site2.example.com.conf
Add the following lines:
<VirtualHost *:80> ServerAdmin [email protected] DocumentRoot /var/www/html/site2.example.com/ ServerName site2.example.com <Directory /var/www/html/site2.example.com/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/site2.example.com_error.log CustomLog ${APACHE_LOG_DIR}/site2.example.com_access.log combined </VirtualHost>
Save and close the file. Then, enable the virtual host configuration file for both sites with the following command:
a2ensite site1.example.com a2ensite site2.example.com
Next, enable the Apache rewrite module and restart the Apache service with the following command:
a2enmod rewrite systemctl restart apache2
Step 5 – Access WordPress Web Installation Wizard
WordPress is now installed and configured for two sites. Now, open your web browser and type the URL http://site1.example.com and http://site2.example.com. You will be redirected to the WordPress installation wizard. Now, follow the WordPress installation wizard and complete the setup for each site.
Conclusion
Congratulations! You have successfully installed and configured two WordPress sites on a single Ubuntu 18.04 VPS. You can also deploy more WordPress sites on a single VPS. If you’re ready to set up your VPS with Atlantic.Net, learn more about our VPS Hosting Solutions here.