, ,

Creating a Drupal Multisite

Up until some time last week, I didn’t actually realize that a Drupal Multisite was possible. I received a support ticket asking if Drupal Multisites doable in Reclaim Hosting’s environment, and responded by saying something along the lines of, “well since single Drupal sites are possible within Reclaim, I would imagine a Multisite is as well, though I don’t have much experience with it”. I don’t like responding that way. So I made it my mission to set one up! (Spoiler: Drupal Multisites are, in fact, possible at Reclaim.)


  • Why Drupal Multisite?
  • Getting Prepared
    • Naming our sites
    • Deciding where our sites will live
    • Set up databases
    • Create subdomains (if applicable)
  • Installing and Configuring Drupal Sites
    • Download Drupal software & upload to account
    • Creating sites.php
    • Making sites directories
    • Copying over & renaming necessary files
    • Creating Files directory
    • Create a symbolic link with cPanel’s directories
  • Drupal Site Setup Wizard
    • Follow the prompts
    • Run a FixPerms script

Why Drupal Multisite?

If you’re familiar with a WordPress Multisite, a Drupal Multisite will sound very familiar. A Drupal Multisite allows single, independent Drupal sites with separate users to run on a singular codebase with shared modules. For more information, head here.

Getting Prepared

  1. Start first by deciding where you want your sites to be called and where you want them to live. I’m going with a fruit theme today, so one of my sites will be called Apple and the other one will be called Orange. Drupal Multisite allows you to set up subdomains (site.drupal.com) or subdirectories (drupal.com/site). I’ve always thought subdomains are a bit cleaner so I’m going to use subdomains off of my brumface.com domain. If you want to use subdirectories, this guide will still apply.
  2. Before even installing Drupal software, I’m going to go ahead and create a database for each site in my cPanel. (For more info, read our guide on database management.)

-For this step, you’ll want to go to cPanel > MySQL Databases, name your database, and click create.

-Repeat this process for your second site. I called mine labrumfi_orange.

-Now we’re going to create a database user that will be assigned to both of these sites. If you go to cPanel > MySQL Databases and scroll down past your current databases, you’ll see a section where you can add new users:

I called my database username labrumfi_drupal. Set a secure password with the Password Generator and click Create User. (P.s. You’ll need these credentials later on!)

-After creating the database user, we need to assign it to our two databases. This can also be found on the cPanel > MySQL Databases page:

^Select the user and database you just created and click Add. On the following page, you’ll be asked to manage user privileges. Select All Privileges, scroll to the bottom, and click Make Changes.

-Repeat this for your second site. So since I just added labrumfi_drupal to my _apple database, I’m going to now add the same user to my _orange database. When complete, your database section should look something like this:

3. Now that that piece is done, we’re going to create our subdomains under cPanel > Subdomains. If you’re using subdirectories, skip this step. This part is pretty self-explanatory, so for the purposes of keeping this particular tutorial as short as possible, I’m going to point you to this guide on creating subdomains in cPanel. The subdomains I created were apple.brumface.com and orange.brumface.com.

^Note that I took public_html out of my document root. I’ve found that the simpler you can make your locations, the better. But that’s just personal preference.

Installing & Configuring Drupal Sites

  1. Head to drupal.org/download and download a .zip file of the latest version of Drupal.
  2. Go to File Manager and create a new folder directly in your /home directory called drupal. Upload the Drupal .zip file and extract it. Your drupal folder should now look like this:

^All of our drupal files are located inside the drupal-8.5.5 folder. We need to pull them out into the main /drupal directory. From there, you can delete the empty drupal-8.5.5 folder.

3. Now that we’ve got our files in the right place, we need to let Drupal know that we’re going to be working with more than one site. We do this by going to drupal > sites and create a sites.php file. For an example of what to add to your sites.php file, open example.sites.php. I’ve also included instructions below:

Create a sites.php file with the following text:


$sites = array(
'apple.brumface.com' => 'apple', 
'orange.brumface.com' => 'orange'

In the above example, replace ‘apple.brumface.com’ with ‘yourfirstsite.domain.com’, and replace ‘apple’ with ‘yourfoldername’. Repeat for the second site.

Note: If you’re using subdirectories (for instance, domain.com/yourfirstsite) the array would look like this:


$sites = array(
'www.brumface.com.apple' => 'apple',
'www.brumface.com.orange' => 'orange'

Make sure to save changes.

4. Ok, hang with me now- we’re going to do a little SSH action. Its simple enough, but if you need a refresher on logging into your account via terminal, I’ve added a screenshot of my login below. (You can also use the terminal function in your cPanel!)

ssh cPanelusername@server.reclaimhosting.com

^when prompted for a Password, enter your cPanel/FTP password.

-Once in terminal, navigate to /drupal/sites

For the commands below, replace ‘apple’ and ‘orange’ with your ‘site1’ and ‘site2’:

mkdir apple
mkdir orange
cp default/default.services.yml apple/services.yml
cp default/default.services.yml orange/services.yml
cp default/default.settings.php apple/settings.php
cp default/default.settings.php orange/settings.php

^With the above commands, we created our apple and orange directories and then copied and renamed the default files (default.services.yml and default.settings.php) into each one. Now when I refresh in file manager, I see the following:

5. We also need to add an empty ‘files’ folder in both in both our apple and orange directories. The ‘files’ folder will be filled during the Drupal Setup Wizard installation process further down. Feel free to create these folders in terminal or in file manager.

6. There’s one final step. When we create a subdomain in cPanel, cPanel creates a folder in File Manager for them by default. (Remember when I set my document root outside of public_html?) But since we just made our own directories within the sites folder, we have to create a symbolic link from cPanel’s default directories with our correct directories. It’s weird, I know.

ln -s drupal apple
ln -s drupal orange

Now when we navigate to apple.brumface.com or orange.brumface.com in our browser, we see the following:

Drupal Site Setup Wizard

If you need assistance with the Drupal Setup Wizard, here is a list of the settings that I used:

Language: English
Profile: Choose Standard Installation
Requirements: Run a Fix Perms script if needed
Database: Choose MySQL, MariaDB, Percona Server, or equivalent; enter the database information that you created earlier

Configure Site: Set your site information

If you stuck with me this long, congrats!

Saving Email Responses using Signatures

Although I’m just a few weeks into my new position, I’m already finding myself sending out similar emails multiple times a week. This is by no means a complaint, but rather something that just comes with the territory of working with various schools on their Domain of One’s Own initiatives. How does Reclaim Hosting handle backups? What are your graduation exit strategies? Can you resend my admin password? What is the protocol for a hacked site? You know, things like that. And while each scenario, project, account, etc. is just a little bit different, the Reclaim facts don’t change, nor do the guides and support articles that I link up to.

To save myself some time from rewriting the same email over and over again, I’ve started using the signatures in my email client, Spark. (As a heads up- Gmail tackles this with Canned Responses, but I hardly ever log into the web version of my email.) I’ve saved my most common responses as email signatures. So now when I go to respond to an email, I simply select the signature I want to respond with, customize it to the scenario at hand, and click send. Emails that used to take me half an hour to compose are now taking me ~5 minutes.

In Spark, you can create new signatures by going to Preferences > Signatures:

^You can also create new signatures while you’re composing an email!

^Click the up and down arrows next to your signature.

^A new window will pop up where you can scroll through your existing “signatures” or create a new one. Hover your mouse over the signature you want to use (it will turn blue) and click to select. Also as a small tip: make sure you add your *actual* signature to the templated responses.

Now all that’s left to do is customize your response however needed, then click send. Booyah!


Troubleshooting Slow Sites

Part of supporting online projects comes with the territory of troubleshooting slow websites. Sometimes it can be hard to know where to turn when you’re met with a “My site is slow!” support ticket– especially if the site is loading quickly on your end.  This post covers tips & tricks for figuring out those red flags that may make a site run slowly. And while the list below may not hit on every issue that will come up, it’s a great checklist to use as a starting point.

Recreate the Speed Issue

Doublecheck that this isn’t an issue with the user’s internet, and that the site is indeed having load issues. (You can always have the user test their internet connection speed here or here.)

WHM: Check the Load

^The green box referenced above. If that load begins with anything less than “5-8.” you’re in the clear and this is likely not a server issue. If the load starts getting into the 14s and 15s or higher, this issue may be greater than the single site.

WHM: Check Apache Status

Search ‘Apache’ in the top, left-hand corner and click Apache Status.

Apache handles all processes on the server and is currently set to handle up to 150 requests at any given point. If the number of processes crosses this threshold and Apache maxes out, that could definitely be the smoking gun for slow-moving sites.

WHM: Check MySQL

Search ‘mysql’ in the top, left-hand corner and then click Show  MySQL Processes.

^This list should generally be pretty small. If you see a full list like the one above where a single database is running a ton of processes, that should be your pointer that this is a site issue, not a server issue.

File Manager: Check Error Logs & Plugins

Every time you install a plugin in your dashboard, you’re asking your site to load another set of processes in your database. So naturally, if you’ve got 20+ plugins installed on your site, chances are that could be leading to slowness.

Likewise, plugin/theme/software conflictions are real, so checking the user’s error_log in their File Manager can be helpful in determining what’s going on.

You can ask the user to turn off all of their plugins, and then activate them one by one to figure out which plugin(s) may be causing the slowness. And if that’s not possible for the user…

phpMyAdmin in cPanel: Plugin Database Tables

If the site has a ton of plugins and you’re trying to figure out which one may be leading to the slowness, have a look at the database tables associated with each plugin.

Note that sites won’t function properly if one table is unusually massive. The rows column is associated with the number of entries on a given table. As you look at the screenshot above, notice that the database table called wp_prli_clicks (part of a Plugin called Pretty Links that can track site clicks) has over 58,000 entries of stored data. Yikes! So sometimes even if the plugin is working correctly and not conflicting, the user’s specific settings can be causing slowness.

phpMyAdmin in cPanel: Transient Rows

Transient Rows are essentially cached database queries that can be found on the last page of the wp_options table in phpMyAdmin. You won’t hurt anything by deleting transient rows. And depending on how many there are, deleting these might actually help speed up your site!

To delete these rows, copy the following SQL commands:

DELETE FROM `wp_options` WHERE `option_name` LIKE ('_transient_%');
DELETE FROM `wp_options` WHERE `option_name` LIKE ('_site_transient_%');

Click on the SQL tab in the wp_options table and paste the commands. Click go.

Query Monitor Plugin

And if all else fails, installing the Query Monitor Plugin on the WordPress dashboard has proven to be a helpful troubleshooting method for us in the past. This debugging tool shows you what might be going on by listing the queries on the page that you’ve loaded, and highlights any issues as they occur.


Creating a WordPress Template

I’ve written a little about SPLOTs in the past, but I’m looking forward to the opportunity over the next few days during Workshop of One’s Own to dive into their possibilities. Alan Levine will be joining us for the workshop as well to spearhead the SPLOTs session. He’ll be taking folks through their origins, potential for the future, examples of ones he’s already created, etc. I’m excited to share the floor with him to chat about how SPLOTs can be used within Domain of One’s Own environments, and how simple it is to set up a SPLOT on your DoOO server.

Keep scrolling to learn how to save your own WordPress install as a SPLOT for others to use.

Step One:

Build out your WordPress install exactly how you want it to be pushed out server-wide.

^Note that if you make changes to the install after it has been templated, those changes will not be reflected on the SPLOT. Installatron essentially takes a snapshot of what the install looks like at the time it’s saved. If you need to update your SPLOT, you’ll need to remove & replace.

Step Two:

Log into WHM. Search ‘install’ in the top, left-hand search bar. Navigate to Installatron Applications Installer & then click Installed Applications.

Step Three:

Now you should see a list of all installs (through Installatron) on the server. Search your install in the top, right-hand corner. Click the star next to the install that you’d like to turn into a SPLOT.

Step Four:

On the following page, give a title and description for your Template. These will be public. After you’ve finished, click Template in the bottom right.

Step Five:

Test it out! If I go back to my individual dashboard and install a new instance of WordPress, I now have the option to install templated package of the WordPress I’ve just created.

Removing a Template

Search ‘Install’, click Installatron Applications Installer, & click Templates.

Scroll down, select the template you’d like to remove and click the X. You’ll be asked to confirm the action, and then you’re good to go!

Now when I go to install WordPress, the template has been removed:


Email Troubleshooting

The Reclaim Team has recently brought back a professional development training session each week where larger questions and concepts are discussed. This gives us a chance to bring up any pain points that have been experienced over the last week in a place where everyone is devoted to learning for an hour. We have a #profdev slack channel where we make notes like Troubleshooting Slow Sites or Updating WHMCS, and then everyone agrees on an available time to meet. It’s been a great system and already proving to be very helpful.

The other week, our Professional Development session was focused on Troubleshooting Email. Configuring email can be tough as it is, so troubleshooting email can be a real bear. I’ve included my notes from the meeting below, as I’m planning on coming back to reference them. :) And if I can benefit from having these published, then maybe someone else can, too!

Goals for Troubleshooting:

-Look for/ Request IP address. Is it blocked?
-Request User’s email client settings
-Search for error messages
-Gathering as much information as possible using the tools below

Features & Tools in cPanel

Email Accounts

Where you can create email addresses, view existing ones, and access webmail on the server. If you can view certain emails from within the webmail client but the user can’t receive email on their local client, this is usually an issue with their Email Configuration Settings.


This allows you to send a copy of any incoming email from one address to another so that you only have one inbox to check. You can also use this section to forward all email accounts from one domain to another. If forwarders aren’t set up properly, this may be a reason for why email isn’t being relayed to the expected location.

Email Routing

If you’re planning on using Google suite and another third-party mail client, you MUST set your email routing settings to Remote Mail Exchanger.


Set up automated emails to go out if your inbox receives mail. These are your ‘Out of Office’, etc. responses.

Default Address Maintenance

This feature will “catch” emails that are sent to an invalid email address for your domain. So for instance, if someone sends an email to info@labrumfield.com, I ordinarily wouldn’t receive it because I don’t have that email address set up. This feature allows you to say, “If anyone sends mail to an email address with my domain name in it, regardless if it’s been set up or not, forward it here.”

Reclaim Hosting’s default setting is to discard these emails since they’re generally loaded with spam. So if a user has this setting turned on and then complains of an excess of spam, this could likely be the smoking gun.

Mailing List

We’ve found that this feature doesn’t work well at all, so we don’t directly support this. Instead, we recommend using GNU Mailman or Google Groups.

Track Delivery & Apache SpamAssassin

This is our go-to, one-stop shop for troubleshooting. This is where we as admins or the user can go to see what happened on the server. You can see successful email activity, failed sent emails, and deferred emails (meaning: emails are put on a queue to retry sending again). Time stamps, spam score ratings*, and event details (sender IP, user, router, etc.) are also available as well.

*Apache SpamAssassin is turned off by default, but can be enabled within the icon. It rates all incoming mail and filters what it defines as spam. SpamAssassin defines what spam is by rating it based on a set up specified rules. Everything over a 5+ rating is sent to the spam folder. You can modify the rating number and auto-delete spam under the Apache spam assassin icon.

Global Email Filters

We’ve received tickets in the past where folks had spam coming through so the users wanted to set a filter to automatically delete specific emails. cPanel has guides on this that can be found here.

Authentication & Calendar

Honestly, Reclaim Hosting isn’t all too familiar with this feature, but cPanel has written guides on setting it up here. There are so many better alternatives for managing contacts and calendars, so we rarely, if any at all, get requests for folks wanting to use their cPanel for this.


This is not that useful in our opinion. BoxTrapper “protects” you from spam by requiring all email senders not on your Whitelist confirm their identity before you can receive their mail. While that sounds great in theory, confirmation emails with a ‘noreply@’ email address would never make it to your inbox since there’s no one on the other end managing the address. This will also double your email incoming/outgoing quota.

Email disk usage

Allows you to view which email folders (inbox, spam, trash, etc.) are taking up the most space, and gives you the option to delete mail in bulk.

Email Tools in WHM

Mail Delivery Reports

This gives you the status of emails from all accounts on the server. It’s very similar to cPanel’s Track Delivery feature, but on a larger scale. This is a good starting point for admins who are troubleshooting mail delivery on the server.

Mail Queue Manager

This feature allows you to view and manage email messages queued for delivery. The only time I’ve seen the queue get backed up on the server is when there’s been a hacked account sending out a ton of email at once and hitting their ingoing/outgoing quota. So this feature can be helpful to track down what’s happening to a specific account.

ConfigServer Mail Queue

Same deal as above, but provides more options for refining your search. This is where Reclaim Hosting goes to delete queues that are backed up.

Email Processes in FTP

If you log in as Root on the server and navigate to var/log/, you can look through a couple different processes here:

  • exim_mainlog– successful activity
  • exim_paniclog– server level issues with the exim function
  • exim_rejectlog emails that were blocked due to a variety of things like spam blacklist
  • var/log/maillog– shows failed login attempts; find user’s IP address
  • messages– the catchall for mostly errors of some kind; firewall blocks
  • lfd.log– login failure demon; failed attempts
  • secure– SFTP/FTP logins

Searching through Email Processes in Terminal

grep command

grep "email@yourdomain.com" exim_mainlog

^searches email@yourdomain.com in the exim_mainlog

In order for an email to be sent/received, there are many processes that are happening behind the scenes. All of these processes are documented in the exim logs listed above, and are given the same Mail ID so we can track every process for one activity. I’ve highlighted an example of where the Mail IDs are located and what they look like above. If you’ve never looked at an exim file before, they can be a little tricky to read!

grep "mail ID" exim_mainlog

^searches mail ID in the exim_mainlog

In addition to time stamps, mail IDs, and error messages, the logs also document the user’s IP address. So in some cases, we can figure out what the user’s IP address is before he/she is able to get back to us with that information. From there, you can run the following command:

grep "IP Address" -R /var/log

^searches IP address in every file & folder in the /var/log directory

Removing the ‘Uncategorized’ Category in WordPress

If you’re lucky enough to find a WordPress theme that doesn’t display categories unless they’re used, then that’s great! Those themes do exist, but this post is for the themes that display all categories- including the default Uncategorized– whether they’re in use or not. For example:

When I go to the WordPress dashboard>Posts>Categories, I see this:

I don’t have the option to delete the Uncategorized category, which is slightly annoying. I can rename it (shown above), so that’s one workaround. But what if I just want to completely delete it?

Deleting the Uncategorized category

  1. Go to Settings>Writing
  2. Change the default category from Uncategorized to another category in use
  3. Click Save
  4. Go to Posts>Categories
  5. Check the box next to Uncategorized and click delete.

Boom! To think that I never took the time to figure this out before the other day. :) It’s so simple!!

Download PDF

Troubleshooting: My Student Can’t Connect via FTP

Though it’s a great tool for moving data in bulk, File Transfer Protocol can be tricky. There are a ton of outliers that could result in that annoying “Login Failed” message, so knowing where to look can be half the battle. Reclaim Hosting support gets questions about FTP quite often, whether from a student or an administrator, so I thought I would throw up a little troubleshooting checklist. We’ve got a great outline & explanation for all-things-FTP here, so I definitely recommend giving that a read & sending that to the user. But in short, ask yourself the following questions:

1. Is the student using a default FTP account or an FTP account that was created manually?

-If the user is working with the default account that is created automatically when they sign up, they should be connecting via SFTP. -Any manual accounts that the user created or someone created for them needed to be connected to via FTP.

2. Is the student using the proper SFTP/FTP settings?

If you’re not troubleshooting in person, the easiest way to verify this is by requesting that the user send you a screenshot of their settings, not the error they receive when they can’t connect. The user’s settings should look similar to this: ​
  • server/hostname: domain name
  • username & password: same as cPanel credentials (these were sent to the user in their account welcome email)
  • port: 22

3. Is the student using the proper credentials?

Once confirming that a connection is possible, I always send the user their credentials (regardless if they have them or not) in a one-time, secret link, and then request that they copy/paste them directly. (Sometimes the number 0 is mistaken for an uppercase O, for example.) If you ever need to reset those credentials, go to WHMCS>User Profile>Product/Services Tab & generate a new password there:

4. Is an SFTP/FTP connection possible?

Before even responding to the user, I always test an FTP connection on my end with the student’s credentials to make sure that this is indeed a user error and not a system error. 9 times out of 10 it’s a local error, but it’s still a good rule of thumb to eliminate all possible issues.

5. How many times has the student attempted to log in?

If the user has too many failed login attempts within a certain period of time, they may trigger a block on the server. In these cases, I also check their IP on the firewall to make sure that it’s unblocked and/or whitelists. I normally ask the user to send me their IP address by going here: http://ip4.me/ We have a guide for administrators on unblocking IP addresses here. Reclaim Hosting also has a separate firewall on some servers called BitNinja. If you’ve passed through all of the above steps and the student still can’t connect, shoot a support request to Reclaim with the student’s IP and we’ll make sure it’s whitelisted there as well.

Fix for Changing a Site URL in WP Dash

Occasionally we’ll get a user who is interested in changing their site URL. This is a harmless request, but could, unfortunately, break their site if they try to change their domain within their WordPress dashboard. If you log into any WordPress dashboard and go to Settings > General, there’s a section where you can change your WordPress Address (URL) and Site Address (URL). So to give folks the benefit of the doubt, this is very misleading. If we could remove this section of the WordPress settings we absolutely would, but there’s no way around it.

Let’s say a user tries to change their domain name from wpdemo.labrumfield.com to test.labrumfield.com:

The user edits their fields to match their “new URL”, scrolls down, and clicks Save.

They would then be met immediately with the following error:

If they were to attempt to log in again, they would be greeted with a WordPress dashboard that looks like this:

There’s no real way to reverse the mistake and fix this other than to log into the user’s database and correct the site URL there. To do this, go to the user’s cPanel, search php in the top search bar, and then click phpMyAdmin.

Click the database for the WordPress instance in question, and then click wp_options from the drop-down on the lefthand side. The first line should read siteurl and show the recently changed site URL. Click edit.

On the following page, correct the URL to its original name and click Go.

Now go to page 2 in wp_options. Click edit next to the home line.

Just like before, edit the URL back to its original domain, scroll down and click Go.

Now when you refresh the dashboard, all should be back to normal:


Approaching a Support Ticket

This blog post is for Domain of One’s Own support admins.

At first glance, no two support tickets look the same, which means that the process for finding a fix always looks different as well. That, mixed with a combination of vague errors & a broken dashboard can make any admin who believes he/she to be well-versed in technical domain support of any kind to feel less than adequate.

So when you’re faced with an error you’ve never seen before and aren’t sure where to turn, use the following checklist:

  1. Make sure the user’s IP isn’t blocked in CSF.
  2. Rule out the probability of a DNS resolution, Browser cache, or Network Cache Issue.
  3. Use the Error Log to eliminate the possibility of a theme and/or plugin confliction.
  4. Fix Permissions on the cPanel account.
  5. Check .htaccess files & Apache error log.

^In almost all cases, the fix can be found by starting with one of the above. If, however, you’ve made it through the list and you’re still unsure, you can always escalate the ticket to Reclaim’s support team with the following information:

  • Contact information for the user in question
    • first + last name, email address, domain name, user’s IP address
  • Screenshot of the error
  • What the user did to receive the error
  • When the issue first occurred
  • The steps you took to provide a fix

Post Icon Credit: “Support” by Gregor Cresnar from the Noun Project


Fixing Permissions

Fixing permissions of Files and Folders in an account can be a helpful step in troubleshooting a web error of your own, or someone else’s support request. Reclaim Hosting has Apache software on all servers, both Shared Hosting and Domain of One’s Own, to run behind the scenes and handle all content on the server. The software’s job is to accept requests from clients and then send responses to those requests. Apache receives a URL, translates it into a program or file name, executes it, and then sends it back to the requester. If Apache can’t complete this process, it throws an error (discussed in depth in other posts).

Sometimes permissions to handle these requests may be set too openly, which can also cause Apache to send an error to the user. All Reclaim users technically are permitted to reset their own permissions, as Reclaim servers have a shell script located at /root/fixperms.sh– this will fix permissions in the cPanel automatically (this includes all directories, not just public_html). To fix permissions on a specific account, run the following command:

sh fixperms.sh -a cpaneluser

^Make sure to replace cpaneluser with the cPanel username of the account you’d like to fix.

If you’re only really needing to fix permissions on a single directory, not the full cPanel account, navigate to the top folder in terminal and run the following commands:

find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

^Please note that these commands should never be used at the root of an account, but always in public_html subfolders.