How to deploy Laravel in cPanel the right way

Hafiz Mohammed
2 min readFeb 3, 2020

--

Many articles that I read has wrong way of deploying Laravel application on shared hosted environment inside cPanel.

Most of them stated that uploading the project folders inside the cPanel and copy the public folder to public_html and modify the Laravel framework ( public/index.php).

I believe the following steps is the correct way to deploy and easier way to maintain continuous integration and continuous delivery.

Step 1 : Login to cPanel

Step 2 : Install Composer

Configure your shell environment to use composer

echo 'alias composer="php -d allow_url_fopen=On /home/USERNAME/composer.phar"' >> ~/.bashrc
source ~/.bashrc

Change USERNAME to your own username.

Download composer

curl -k -O https://getcomposer.org/installer

Install composer

php -d allow_url_fopen=On installer

Step 3: Configure Git

Generate SSH key

ssh-keygen -t rsa -b 4096 -C "cPANEL USERNAME"

Copy the key content for adding to your Github/Bitbucket repo

cat ~/.ssh/id_rsa.pub

Using Bitbucket for this project

Go to https://bitbucket.org/USERNAME/REPO/admin/access-keys

Add key>Paste the content and save.

Using Github

Go to https://github.com/USERNAME/REPO/settings/keys and follow the above step.

Change USERNAME and REPO to your own username and repo.

Step 4: Setup your application

Create a folder for your application let say “myapp” and clone your project inside that folder

git clone git@github.com:username/repo.git myapp

Inside your “myapp” folder run

composer install

Then change your environmental variables in the .env file

Generate a new application key

php artisan key:generate

Then migrate all your database

php artisan migrate

Set the correct folder permissions

chmod -R 775 storage

Step 5:Make your app accessible for public

Back up your public_html folder and remove it.

Then create a symlink

ln -s /home/user/app/public /home/user/public_html

Create a symlink for your storage

ln -s /home/user/app/storage/app/public /home/user/public_html/storage

Run storage link

php artisan storage:link

Your app should work now and you can easily git pull in the cPanel.

You can also have a deploy script that can pull from github and run composer update and database migration.

# Turn on maintenance modephp artisan down # Pull the latest changes git pull origin master# Install/update composer dependeciescomposer install --no-interaction --prefer-dist --optimize-autoloader --no-dev # Run database migrationsphp artisan migrate --force # Clear cachesphp artisan cache:clear# Clear and cache routesphp artisan route:clear
php artisan route:cache
# Clear and cache configphp artisan config:clear
php artisan config:cache
# Turn off maintenance modephp artisan up

YOU ARE DONE! HAPPY CODING!

--

--

Hafiz Mohammed

Passionate Full Stack Developer | Tech Enthusiast | Loves Basketball