Laravel News: Deployer

4 days ago 1

Deployer is a free, open-source deployment tool written in PHP by Anton Medvedev. It helps you easily deploy your PHP application to a server. By automating common deployment tasks such as pulling code, running migrations, and clearing caches, Deployer reduces the risk of human error and ensures consistent, repeatable deployments across environments.

Features

  • Ability to configure your server, setup a firewall, install PHP and MySQL or Postgres, configure HTTPS, etc.
  • Zero downtime deployments with the ability to rollback to the previous release.
  • Ready to use recipes for most frameworks and applications (including a recipe for Laravel).

Installation

Install Deployer using Composer:

composer global require deployer/deployer

Once installed, navigate to your project directory and run:

dep init

After answering a few questions, this will create a deploy.php or deploy.yaml file for your deployment recipe. This file defines hosts, tasks, and dependencies on other recipes.

Tasks are set using the task function. You can also describe a task with the desc function.

It is recommended to use an identity key or private key when connecting to a server. You can add it to your ~/.ssh/config file.

Host *

IdentityFile ~/.ssh/id_rsa

Next, run the following command to provision your server:

dep provision

The provision command will ask about PHP versions, database preferences, and other requirements and install everything required to run your application.

Lastly, you can deploy your project with:

dep deploy

After your first successful deployment, your deployment path will look like this:

~/www // deploy_path

|- current -> releases/1 // Symlink to current release

|- releases // Directory for all releases

|- 1 // Latest release

|- ...

|- .env -> shared/.env // Symlink to shared .env file

|- shared // Shared files between releases

|- ...

|- .env // Shared .env file

|- .dep // Deployer configuration files

Additionally, you will need to modify your web server configuration to serve your application from the current directory. An example configuration for Nginx could be as follows:

root /home/deployer/www/current/public;

index index.php;

location / {

try_files $uri $uri/ /index.php?$query_string;

}

Example deploy.php file

namespace Deployer;

host('my-server')

->set('hostname', 'my-server.org')

->set('deploy_path', '~/www');

->set('remote_user', 'deployer');

desc('Define my first task');

task('task_a', function () {

run('whoami');

});

desc('Run npm build process');

task('task_b', function () {

cd('{{release_path}}');

run('npm install');

run('npm run prod');

});

// Group tasks

desc('Deploys your project');

task('deploy', [

'task_a',

'task_b',

]);

Deployer can also be configured to work with either GitHub Actions or GitLab CI/CD.

Learn more by reading the documentation and view the source code on GitHub.

Read Entire Article