How to deploy Laravel application

Edit this page


Apparently you already have some Laravel application and some server or shared hosting. Now you need to automate the process of deployment. Deployer will help you in this as it ships with some ready to use recipes for Laravel based application.

Let's start with installation of Deployer. Run the following commands in terminal:

curl -LO
mv deployer.phar /usr/local/bin/dep
chmod +x /usr/local/bin/dep

Next, in your projects directory run:

dep init -t Laravel

The above command will create deploy.php file for deploying Laravel. This file called recipe and based on built-in recipe laravel.php. It's contains some host configuration and example task.

First, we need to configure repository config of our application:

set('repository', '');

Second, configure host:

    ->set('deploy_path', '/var/www/html');

Make sure what ~/.ssh/config contains and you can connect to host thought ssh.

Another important parameter it is deploy_path, where you project will be located on remote host.

Let's do our first deploy:

dep deploy

If every think goes well, deployer will create next structure on remote host in deploy_path:

├── .dep
├── current -> releases/1
├── releases
│   └── 1
└── shared
    ├── .env
    └── storage
  • releases dir contains deploy releases of Laravel application,
  • shared dir contains .env config and storage which will be symlinked to each release,
  • current is symlink to last release,
  • .dep dir contains special metadata for deployer (releases log, deploy.log file, etc).

Configure your server to serve files from the current folder. For example if you are using nginx next:

server {
  listen 80;

  root /var/www/html/current/public;

  location / {
    try_files $uri /index.php$is_args$args;

Now you will be able to serve your laravel project:

Deploy Laravel Application

If you want to automatically migrate database, Laravel recipe ships with the artisan:migrate task. Add this line to your deploy.php:

after('deploy:update_code', 'artisan:migrate');

More about configuration and task declarations in our documentation.