# Why Envoy
Envoy is a task runner put together by the Laravel team. When I can I like to use hosts like Pantheon and Platform.sh that give me a wealth of tools, containers in production, and a lot less DevOps headaches when something like Heartbleed happens 😱.
That said not all clients can afford the hosting costs of these providers 💸. And then Linode, Digital Ocean, or AWS become good choices starting at as little as $5/mo. So when working on your family member or friends website with affordable hosting we can use envoy
to automate our deploy steps and get some of that deploy consistency that we know and love from the big hosting providers.
This post will show you how to add envoy
as tooling to Lando. The particular app in this example is Backdrop CMS, but any PHP app can take advantage of Envoy, really any app (but non PHP devs prolly not looking for ways to add PHP to the mix 😈). Apps like WordPress, Symfony, Backdrop, Drupal, and of course Laravel are a perfect fit.
# Install Envoy
To add envoy
tooling to your .lando.yml
file add the following run
step:
services:
appserver:
run:
- cd $LANDO_MOUNT && composer install
- composer global require laravel/envoy
And a corresponding tooling
entry:
# See: https://docs.lndo.io/config/tooling.html
tooling:
envoy:
service: appserver
Now we are ready to start using Envoy, but first let's configure it.
# Configure Envoy
To use Envoy you will set up a file in the root of your project called: Envoy.blade.php
. Here is mine:
@servers(['web' => ['USER@SERVER_IP']])
@task('ll', ['on' => 'web'])
cd /var/www/serundeputy
ls -alh
@endtask
@task('deploy', ['on' => 'web'])
cd /var/www/serundeputy
@if ($branch)
git pull origin {{ $branch }}
@endif
composer install
cd /var/www/serundeputy/www
drush updb -y
drush bcim -y
drush cc all
@endtask
The Envoy.blade.php
file uses Laravel blade syntax and in it we define servers
array and some task
s. In this example you'll want to replace USER
with a user that has ssh
access to the server in question and SERVER_IP
with the ip address
of the server you are deploying to.
In the deploy
task we simply write the shell commands that we want to happen for our app. In this case move to the app directory, run composer install, and some drush commands. That is it, so simple!
You don't have to worry about different people doing different steps, forgetting steps, or typing something incorrectly. Consistency and peace of mind ☮️.
You can define as many or few task
s as you need. For example you could break out the deploy task to separate deploy-staging
and deploy-production
tasks.
# Run an Envoy Deploy
Now that we have our tasks set up in our Envoy.blade.php
file we can run them. For example to deploy
run:
lando envoy run deploy --branch=master
Running this one command runs all the tasks in the deploy
task!
# Conclusion
Consistency. No need to ssh into the server. No danger of running unwanted commands on the server. No leaving the shell open on a production server session for your cat to walk across your keyboard 🐈. Just the things you want and need to happen for your app.
Tools and Resources:
This post originally appeared on serundeputy.io