When your website or web application has outgrown your shared hosting account, it is time to move it to the cloud, or into a virtual private server (VPS). Nowadays, VPS providers offer better value in terms of CPU and RAM resources than the shared hosting counterparts. However, I can recall when I wanted to move my website to Amazon Web Services a few years ago, and it took me days to deploy the server and get it ready with PHP, MySQL and Apache.

Fortunately, that is not the case today as we have the help of some cool tools and third party services.

I took a look at three similar services – RunCloud, ServerPilot and Laravel Forge – and compared them to see which performs best. These are SaaS tools that can help deploy, configure, manage, and monitor VPS on any cloud hosting providers like AWS, Linode, Vultr, Digital Ocean, and others.

Registration was easy. You don’t need a credit card and you can even use your Facebook, Google, or GitHub account. If you don’t fancy using your social media account, then just use your email address.

With RunCloud, what you need to do is deploy a fresh Ubuntu 16.04 LTS VPS on almost any VPS hosting provider. Throughout this tutorial I used a Linode VPS which costs $5 per month.

When your server is ready, you go back to RunCloud and enter your server details like the IP address to get your connection command.

You will get a very long one-line command like this.

All that you need to do is run the command in your server as the root user and let it run. It will probably take about 15 to 20 minutes for the process to complete, and once you are done, you can start to manage your server from within the web panel.

Managing Your Server

Next you need to create a Web Application. That is like a virtual host in the web server. When you do that, you can select your PHP version, and you can assign your domain name to the Web Application. You can assign more than one.

The UI is very user friendly and intuitive and you can find whatever you need rather quickly and easily. My most basic need would be to be able to create virtual hosts (Web Application), assign domain names and create databases and perhaps deploy my application from GitHub or any other Git server. There is also a script installer that supports WordPress, Joomla, Concrete5, PHPMyAdmin and a few more common PHP tools.

If you do PHP development and use Git, RunCloud supports deploying your script from GitHub, Bitbucket, Gitlab and also your own custom Git server installation.

We’ll look into performance later.

ServerPilot.io is probably the oldest among the three, and most well-marketed. When I ask around if anybody is using a server management tool, it will probably be ServerPilot.io.

ServerPilot.io has a Free account that you can use with limited features, and there are also the Coach ($10/mo) and Business ($49/mo) plans. Please bear in mind, these prices are for server deployments and not per account to ServerPilot.

Coach has more features like free SSL via LetsEncrypt, server health stats and other. The Business package is more like a mini NewRelic or an application performance monitoring service. You can see slow script request, application resources stats and more.

Of course the Free package is good enough, but limited compared to their Coach and Business options.

Connecting A Server

This feels similar to RunCloud. You also need a fresh Ubuntu 16.04 VPS server to start. If you have the root password to your server, you don’t need to copy and paste the installer command via SSH. You can enter your server IP address and your root password, and ServerPilot will get your server ready in a few minutes.

However, if you don’t want to enter the root password of your server into ServerPilot, then you can opt not to do that. You can get install run command, and copy and paste that via SSH into your server.

Honestly, server deployment process feels pretty smooth and fast. I was amazed with that. Once done, I was redirected to create an App right away. Here, an App is like the virtual host. Once that was done, there is an option to install WordPress. I thought I’d give that a try. You can also select your PHP version if you want. I selected PHP 7.1.

Managing Your Server

From registration to deploying a server and getting it up and running, the experience was really good and fast. You get a server running in no time at all.

When WordPress is an install option, I was hoping to see other PHP tools like Joomla and Concrete5 to be available as well. Unfortunately, they are not present, and ServerPilot.io also does not give the option to set where your web root should be other than /public .

Another thing that I was hoping to see is a way to deploy my application from GitHub. I can’t find that. And I found out from the documentation that if I want to deploy my script via Git, I would still have to do it via SSH.

This is also the case with scheduling or crontab. If you familiar with CPanel, you would hope to have scheduling built into the web panel of ServerPilot. Unfortunately, that is not the case. You can still manage your own crontab via SSH though.

Unfortunately if you just want to try this out, there is no free-level account. Price starts at $15/mo for the Growth account, and $39/mo for the Business account. The good thing is, that is for unlimited number of server deployments. However, there is a 5-day free trial for whatever account you choose to get. And if you subscribe for an annual subscription, you get a $40 discount off the Growth account, and $69 off the Business account.

The difference between these two is mainly about adding team members into your account to help you with your server administrations. The Growth account is mostly for personal users while the Business account allows you to add team members to help you out.

Connecting a Server

Unlike ServerPilot and RunCloud, Laravel Forge will connect to your cloud hosting provider via API and deploy servers there on your behalf. With this, you don’t have to deploy your server in the cloud hosting provider first, and later enter details into Laravel Forge. Laravel Forge will create them for you. For now, Laravel Forge supports Digital Ocean, AWS and Linode.

For any cloud hosting providers that are not currently supported, you can still add those into Laravel Forge under the Custom VPS option. There it works pretty much like Server Pilot and RunCloud. You will need a fresh Ubuntu 16.04 64-bit VPS, and later initiate the connect procedure in Laravel Forge. Just like RunCloud, you will need to enter the install script command via SSH.

Managing Your Server

Laravel Forge has a lot covered when it comes to managing your server. When your server is ready, you create a Site (virtual host). Since Laravel Forge is created by a PHP developer, Git is actually the main method for how you deploy your files. Or, you can get started by installing WordPress.

When creating your site, you are presented with the option to add your domain name. And you can set whether to have the wildcard sub-domain option enabled. However, there is no option for multiple domain names for a single site.

There is also Scheduling, MySQL database management and others. You can also integrate your server with Blackfire.io for application performance monitoring and Papertrail (https://papertrailapp.com/) for log analysis.

There was not much on server health information though.

All in all, Laravel Forge was primarily developed to deploy Laravel-based PHP applications with support for other PHP frameworks and scripts added later.

Performance Testing

Since I deployed three servers using these three tools, I thought I’d test them out against one another. And just to make things interesting, I figured I would add another LAMP stack that I deployed with Ubuntu 16.04 and tasksel lamp-server command.

I know that I am not really pushing the servers to their limits, but I think it is a good indicator to see how well they perform against each other.

To test the servers, I installed WordPress with its default theme and data. Then I installed Siege on a separate server to see how many requests and hits the servers can take. My Siege was set up with 25 concurrent clients settings and one (1) minute testing time.

Just as a side note, I deployed four Linode 1GB VPSes, one for each tool. They all have the same specification and resides on the same datacenter. Siege is on a fifth server.

So here are the results of the tests:

First run

Results RunCloud ServerPilot Laravel Forge Tasksel LAMP Transactions (hits) 17710 12304 18278 10703 Availability (%) 100.00 100.00 100.00 100.00 Elapsed time (secs) 59.45 59.85 59.11 59.30 Data transferred (MB) 632.61 439.57 652.97 198.14 Response time (secs) 0.06 0.10 0.06 0.11 Transaction rate (trans/sec) 297.90 205.58 309.22 180.49 Throughput (MB/sec) 10.64 7.34 11.05 3.34 Concurrency 16.95 19.66 17.26 20.42 Successful transactions 17710 12304 18278 10703 Failed transactions 0 0 0 0 Longest transactions 1.36 1.83 1.57 1.66 Shortest transactions 0.00 0.00 0.00 0.00

Second run

Results RunCloud ServerPilot Laravel Forge Tasksel LAMP Transactions (hits) 17820 13110 18386 10077 Availability (%) 100.00 100.00 100.00 100.00 Elapsed time (secs) 59.50 59.63 59.57 59.55 Data transferred (MB) 636.64 468.41 656.72 186.57 Response time (secs) 0.06 0.09 0.05 0.12 Transaction rate (trans/sec) 299.50 219.86 308.65 169.22 Throughput (MB/sec) 10.70 7.86 11.02 3.13 Concurrency 17.18 19.31 16.97 20.54 Successful transactions 17822 13110 18386 10077 Failed transactions 0 0 0 0 Longest transactions 1.33 1.77 0.95 2.38 Shortest transactions 0.00 0.00 0.00 0.00

Laravel Forge is the best being able to receive over 18000 hits to the server in a minute with 25 client concurrency. RunCloud is second with about 17000 hits to the server. ServerPilot is third where they clocked about 13000 hits. But that is still an improvement over a normal Tasksel LAMP server installation, which was able to take in about 10000 hits to the server over a 1-minute period.

Performance Result

Laravel Forge RunCloud ServerPilot Tasksel LAMP-server

Conclusions

I believe each has it’s own strength and weakness.

RunCloud

RunCloud has the best web panel, which comes with everything that you need to manage your server. It is almost like your old CPanel for shared hosting accounts. There’s a Git deployment option, server health information, multiple domains per virtual host, SSH key, firewall options, database management, file manager and editor, and the list goes on. Clearly, feature-wise, RunCloud is the best.

This is also the cheapest option with a huge bang for your buck. Just $10/mo for unlimited server deployments.

What’s lacking is the team members option. Also, when it comes to performance, Laravel Forge is better than RunCloud but some may be able to live with that, since the difference is not really that big.

ServerPilot

I was hoping that ServerPilot would perform well since they have been in the market for a while, but it turns out it’s is maybe 25% to 30% better than Tasksel, and is at third place after RunCloud.

Their web panel interface is a little disappointing too. It does not offer many features to help you manage your server.

To me, not having Git deployment and scheduling (Crontab) are two big negative points for server management.

Price-wise, after the free level, ServerPilot’s starts at $10 per server, which is the most expensive option among the three.

One thing that I can praise ServerPilot for is how fast a server gets deployed.

Laravel Forge

The best thing about Laravel Forge is their server performance. If that is what you want, then this is your choice. Their server outperformed the rest!

API integration also helps in deploying the server without having to do much. Once your Forge account is connected to AWS, DigitalOcean or Linode via API, you don’t have to go back and forth into your cloud hosting provider to get a server up and running.

The web panel and features, however, are quite basic but better than ServerPilot. You do have Git deployment and scheduling but no server health information. While you get easy wildcard sub-domain implementation, your site on Forge does not provide you the option for multiple domain names.

For more power and additional useful information, you can integrate a third party option like Blackfire.io and Papertrail. That would cost you extra, however.

Which one of these providers do you use? Or none at all? Why?