Deploy Laravel Application on Shared Hosting

In this tutorial, I will demonstrate the steps involved to deploy Laravel Application on Shared Hosting. I am demonstrating the steps on Hostgator.

The steps involved to Host Laravel Application on Shared Hosting will be pretty much same for any other Hosting as well.

Note: This tutorial will work well for Installing your Laravel Project to SiteGround, Bluehost, GoDaddy and other shared hosting servers.

Before moving forward make sure you have following Ready.

  • Shared Hosting Account Created (Sign Up for Hostgator)
  • You have Access to cPanel.
  • Laravel Application source code available via Git (GitHub / Bitbucket etc.) or any other SVN

Alright, Let's dig into the steps to Deploy Laravel Application on Shared Hosting


 

PHP Version

Laravel 5.5 requires PHP version greater than 7.0. Hostgator comes with default of 5.4.

Login to your cPanel using credentials sent to your email on Hostgator account signup.

Choose  option Change PHP Version and change the current version to >7.1 

Note : You can ignore this step if your Laravel version requires PHP 5.4 or your hosing provider by defaults provides PHP v > 7.0 

[caption id="attachment_1126" align="aligncenter" width="1598"] Change PHP Version Hostgator for Laravel[/caption]


 

SSH into Shared Hosting Box

As the first step, Open your terminal / command line and SSH into your Shared Hosting Server

Note: SSH instructions are usually included in the welcome email. Here is the general command to SSH into the Server

$ ssh [username]@[server-ip]    //Replace username with cPanel username and server-ip with Server IP Address.

Once it's able to connect to the server, It will prompt you for the SSH password, which should be same as your cPanel account password

The home directory structure of shared server looks something like this.

[caption id="attachment_1127" align="aligncenter" width="818"] Directory Structure hostgator user home[/caption]

As you can see we have a directory public_html which is a public directory for keeping our projects. www is symlink to public_html. So basically, they both points to same stuff.


 

Clone Laravel Project

Let say in your hosting server (VPS, or shared hosting…whatever), you have current www/ directory, which is accessible publicly via web domain, for example:

/Users/username-blah/www/

Now, clone your project in a new directory, which contains all your application source code, at the same level as www/, for example:

/Users/username-blah/myLaravelProject/

You can use git clone command to clone your project. Something like

$ git clone https://username@bitbucket.org/username/myLaravelProject.git

 

Make public files available to www

Next step is to copy all contents inside the myLaravelProject/public directory to www directory. The easy example is that, with the fresh Laravel 5 installation application, the  myLaravelProject/public/index.php should be copied to the www/index.php

Makes Sense?

Basically you need to run this command, on your server home directory (/home/username-blah)

$ cp -a myLaravelProject/public/. www/

Now, your www should have following contents

[caption id="attachment_1128" align="aligncenter" width="540"] Hostgator www directory structure[/caption]

Note : Make sure you copy the public/.htaccess to the www/ also. Don’t forget this, it is very important for your app routes. Without it, your routes won’t be working and there will be a blank or empty page in every route.


 

Modify www/index.php to reflect new Structure

Now let’s modify the www/index.php to reflect the new structure. Don’t modify the project/public/index.php, okay? Only modify www/index.php, remember this!

Find the following line

require __DIR__.’/../bootstrap/autoload.php’;


$app = require_once __DIR__.’/../bootstrap/app.php’;

 

And update them to the correct paths as following

require __DIR__.’/../myLaravelProject/bootstrap/autoload.php’;

$app = require_once __DIR__.’/../myLaravelProject/bootstrap/app.php’;

 

We are almost there, just couple of more steps !


 

Modify Directory Permissions

It's time to modify directory permissions of storage and bootstrap/cache directory so that it's writable.

Move to your Laravel Project into the terminal and run the following commands.

$ sudo chmod -R 777 storage

$ sudo chmod -R 777 bootstrap/cache

.env Configuration File

There is an .env file in your project which contains all the project variables dedicated to the environment in which the project is working.

Since our .env file should not be committed to your application's source control. Your application should contain a .env.example file available. You can go ahead and copy the same file and name it .env

Generate a new application encyption key

$ php artisan key:generate

Note: Make sure to clear cache via artisan command after generating the new key file (php artisan cache:clear)

Modify the .env file for other required parameters such as database variables, Mail Setting Variables. etc.

 

There you go !!! Everything should work now


 

Composer

Hostgator comes with composer (dependency manager tool) already installed and most other shared hosting server's comes with composer installed.

Check by running composer command on your terminal.

If not, you can easily install composer with following commands.

$ cd /User/username-blah/project/

$ curl -sS https://getcomposer.org/installer | php — –filename=composer

Now you can execute composer to manage dependencies.

$ php composer install

$ php composer dumpautoload -o

$ php artisan config:cache

$ php artisan route:cache

 

That's it ! Have fun with deployed Laravel Project.

Comments