Software developer 9 yrs
From L.A., live in Chattanooga
Web App development
Drupal workflow rescues
Technology strategy
Lando is for developers who want to quickly specify and painlessly spin up the services and tools needed to develop their projects.
Simple, in-repo config file:
Recipes: sensibly preconfigured stacks
Add services & tools (e.g. Solr, node)
Build and automation steps
Local dev dependency management
.lando.ymlapache
compose
dotnet
elasticsearch
go
mailhog
mariadb
memcached
mongo
mssql
mysql
nginx
node
php
phpmyadmin
 
postgres
python
redis
ruby
solr
tomcat
varnish
homebrew or
.dmg via direct download
.deb, .pkg.xz or .rpm package via direct download
# @file .lando.yml
name: bat-crm
recipe: laravel
config:
  webroot: public$ lando init --recipe laravel --webroot public --name Bat\ CRM$ lando
Usage: lando <command> [args] [options] [-- global options]
Commands:
  artisan                  Run artisan commands
  composer                 Run composer commands
  config                   Display the lando configuration
  db-export [file]         Export database from a service
  db-import [file]         Import <file> into database service
  destroy [appname]        Destroy app in current directory or [appname]
  info [appname]           Prints info about app in current directory or [appname]
  init [method]            Initialize a lando app, optional methods: github, pantheon
  laravel                  Run laravel commands
  list                     List all lando apps
  logs [appname]           Get logs for app in current directory or [appname]
  mysql                    Drop into a MySQL shell on a database service
  php                      Run php commands
  poweroff                 Spin down all lando related containers
  rebuild [appname]        Rebuilds app in current directory or [appname]
  restart [appname]        Restarts app in current directory or [appname]
  share [appname]          Get a publicly available url
  ssh [appname] [service]  SSH into [service] in current app directory or [appname]
  start [appname]          Start app in current directory or [appname]
  stop [appname]           Stops app in current directory or [appname]
  version                  Display the lando version
Global Options:
  --help, -h  Show help
  --verbose, -v, -vv, -vvv, -vvvv  Change verbosity of output
You need at least one command before moving on$ lando init --recipe laravel --webroot public --name Bat\ CRM
"NOW WE'RE COOKING WITH FIRE!!!"
Your app has been initialized!
Go to the directory where your app was initialized and run
"lando start" to get rolling.
Check the LOCATION printed below if you are unsure where to go.
Here are some vitals:
"""
 NAME      bat-crm                                             
 LOCATION  /Users/jcandan/Code/sandbox/batman-crm              
 RECIPE    laravel                                             
 DOCS      https://docs.devwithlando.io/tutorials/laravel.html 
"""$ ls -la
total 8
drwxr-xr-x@  3 jcandan  staff    96B Aug 13 20:56 .
drwxr-xr-x  13 jcandan  staff   416B Aug 13 20:56 ..
-rw-r--r--@  1 jcandan  staff    56B Aug 13 20:56 .lando.yml$ lando start
BOOMSHAKALAKA!!!
Your app has started up correctly.
Here are some vitals:
 NAME            batcrm                                 
 LOCATION        /Users/jcandan/Code/sandbox/batman-crm 
 SERVICES        appserver, database                    
 APPSERVER URLS  https://localhost:32771                
                 http://localhost:32772                 
                 http://batcrm.lndo.site                
                 https://batcrm.lndo.site     $ lando laravel new batman-crm
$ lando laravel new batman-crm
Crafting application...
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
    1/66:	https://codeload.github.com/sebastianbergmann/php-file-iterator/legacy.zip/cecbc684605bb0cc288828eb5d65d93d5c676d3c
    2/66:	https://codeload.github.com/sebastianbergmann/code-unit-reverse-lookup/legacy.zip/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18
    3/66:	https://codeload.github.com/theseer/tokenizer/legacy.zip/cb2f008f3f05af2893a87208fe6a6c4985483f8b
    4/66:	https://codeload.github.com/sebastianbergmann/php-text-template/legacy.zip/31f8b717e51d9a2afca6c9f046f5d69fc27c8686
    5/66:	https://codeload.github.com/phar-io/version/legacy.zip/45a2ec53a73c70ce41d55cedef9063630abaf1b6
    6/66:	https://codeload.github.com/sebastianbergmann/php-timer/legacy.zip/8b8454ea6958c3dee38453d3bd571e023108c91f
    7/66:	https://codeload.github.com/phpspec/prophecy/legacy.zip/4ba436b55987b4bf311cb7c6ba82aa528aac0a06
    8/66:	https://codeload.github.com/phar-io/manifest/legacy.zip/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4
    9/66:	https://codeload.github.com/myclabs/DeepCopy/legacy.zip/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8
. . .
Generating optimized autoload files
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
> @php artisan key:generate
Application key [base64:ccpYW9tAiUXAYs/eYxFlafchos8y9VZwcUd2OtMVAdI=] set successfully.
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
Application ready! Build something amazing.
$$ ls -la
total 8
drwxr-xr-x@  4 jcandan  staff   128B Aug 13 21:11 .
drwxr-xr-x  13 jcandan  staff   416B Aug 13 20:56 ..
-rw-r--r--@  1 jcandan  staff    56B Aug 13 20:56 .lando.yml
drwxr-xr-x  25 jcandan  staff   800B Aug 13 21:12 batman-crm
$$ ls -la
total 8
drwxr-xr-x@  4 jcandan  staff   128B Aug 13 21:11 .
drwxr-xr-x  13 jcandan  staff   416B Aug 13 20:56 ..
-rw-r--r--@  1 jcandan  staff    56B Aug 13 20:56 .lando.yml
drwxr-xr-x  25 jcandan  staff   800B Aug 13 21:12 batman-crm
$ mv .lando.yml batman-crm/
$$ ls -la
total 8
drwxr-xr-x@  4 jcandan  staff   128B Aug 13 21:11 .
drwxr-xr-x  13 jcandan  staff   416B Aug 13 20:56 ..
-rw-r--r--@  1 jcandan  staff    56B Aug 13 20:56 .lando.yml
drwxr-xr-x  25 jcandan  staff   800B Aug 13 21:12 batman-crm
$ mv .lando.yml batman-crm/
$ cd batman-crm
$$ ls -la
total 8
drwxr-xr-x@  4 jcandan  staff   128B Aug 13 21:11 .
drwxr-xr-x  13 jcandan  staff   416B Aug 13 20:56 ..
-rw-r--r--@  1 jcandan  staff    56B Aug 13 20:56 .lando.yml
drwxr-xr-x  25 jcandan  staff   800B Aug 13 21:12 batman-crm
$ mv .lando.yml batman-crm/
$ cd batman-crm
$ lando restart$ ls -la
total 8
drwxr-xr-x@  4 jcandan  staff   128B Aug 13 21:11 .
drwxr-xr-x  13 jcandan  staff   416B Aug 13 20:56 ..
-rw-r--r--@  1 jcandan  staff    56B Aug 13 20:56 .lando.yml
drwxr-xr-x  25 jcandan  staff   800B Aug 13 21:12 batman-crm
$ mv .lando.yml batman-crm/
$ cd batman-crm
$ lando restart
Killing batcrm_appserver_1 ... done
Killing batcrm_database_1  ... done
landoproxyhyperion5000gandalfedition_proxy_1 is up-to-date
Recreating batcrm_appserver_1 ... done
Recreating batcrm_database_1  ... done
Waiting until appserver service is ready...
Waiting until database service is ready...
Waiting until database service is ready...
BOOMSHAKALAKA!!!
Your app has started up correctly.
Here are some vitals:
 NAME            batcrm                                 
 LOCATION        /Users/jcandan/Code/sandbox/batman-crm 
 SERVICES        appserver, database                    
 APPSERVER URLS  https://localhost:32785                
                 http://localhost:32786                 
                 http://batcrm.lndo.site                
                 https://batcrm.lndo.site               
$$ ls -la# @file .env
APP_URL=http://batcrm.lndo.site
DB_HOST=database
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=laravel
# @file .env
APP_URL=http://localhost
DB_HOST=127.0.0.1
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret$ lando artisan migrate$ lando info$ lando info
{
  "appserver": {
    "type": "php",
    "version": "7.1",
    "hostnames": [
      "appserver",
      "appserver.batcrm.internal"
    ],
    "via": "apache",
    "webroot": "public",
    "config": {
      "conf": "/Users/jcandan/.lando/services/config/laravel/php.ini"
    },
    "urls": [
      "https://localhost:32785",
      "http://localhost:32786",
      "http://batcrm.lndo.site",
      "https://batcrm.lndo.site"
    ]
  },
  "database": {
    "type": "mysql",
    "version": "5.7",
    "hostnames": [
      "database",
      "database.batcrm.internal"
    ],
    "creds": {
      "user": "laravel",
      "password": "laravel",
      "database": "laravel"
    },
    "internal_connection": {
      "host": "database",
      "port": 3306
    },
    "external_connection": {
      "host": "localhost",
      "port": "32787"
    },
    "config": {
      "confd": "/Users/jcandan/.lando/services/config/laravel/mysql"
    },
    "urls": []
  }
}
$Front end tooling (node, npm, grunt)
Build steps (auto composer install)
Additional commands (phplint)
Additional services (phpmyadmin/mailhog)
Automation (do X after Y)
# @file .lando.yml
name: bat-crm
recipe: laravel
config:
  webroot: public
# @file .lando.yml
name: bat-crm
recipe: laravel
config:
  webroot: public
  database: postgres  # defaults to mariadb
# @file .lando.yml
name: bat-crm
recipe: laravel
config:
  webroot: public
  database: postgres
  xdebug: true
# @file .lando.yml
name: bat-crm
recipe: laravel
config:
  webroot: public
  database: postgres
  xdebug: true
services:
  appserver:
    run:
      - "echo 'running composer install'"
      - "cd $LANDO_MOUNT && composer install"
# @file .lando.yml
name: bat-crm
recipe: laravel
config:
  webroot: public
  database: postgres
  xdebug: true
services:
  appserver:
    run:
      - "echo 'running composer install'"
      - "cd $LANDO_MOUNT && composer install"
  node:
    type: node:9
    run:
      - "echo 'running npm install and laravel mix'"
      - "cd $LANDO_MOUNT && npm install && npm run dev"
# @file .lando.yml
name: bat-newsroom
recipe: drupal8
config:
  webroot: web
# @file .lando.yml
name: bat-newsroom
recipe: drupal8
config:
  webroot: web
  database: postgres
  xdebug: true
services:
  appserver:
    run:
      - "echo 'running composer install'"
      - "cd $LANDO_MOUNT && composer install"
# @file .lando.yml
name: bat-newsroom
recipe: drupal8
config:
  webroot: web
  database: postgres
  xdebug: true
services:
  appserver:
    run:
      - "echo 'running composer install'"
      - "cd $LANDO_MOUNT && composer install"
  node:
    type: node:9
    run:
      - "echo 'running npm install and gulp'"
      - "cd $LANDO_MOUNT/themes/custom/bat-theme && npm install"
      - "cd $LANDO_MOUNT/themes/custom/bat-theme && ./node_modules/gulp/bin/gulp.js"
# @file .lando.yml
name: bat-newsroom
recipe: drupal8
config:
  webroot: web
  database: postgres
  xdebug: true
services:
  appserver:
    run:
      - "echo 'running composer install'"
      - "cd $LANDO_MOUNT && composer install"
  node:
    type: node:9
    run:
      - "echo 'running npm install and gulp'"
      - "cd $LANDO_MOUNT/themes/custom/bat-theme && npm install"
      - "cd $LANDO_MOUNT/themes/custom/bat-theme && ./node_modules/gulp/bin/gulp.js"
    globals:
      gulp-cli: "latest"
# @file .lando.yml
name: bat-newsroom
recipe: drupal8
config:
  webroot: web
  database: postgres
  xdebug: true
services:
  appserver:
    run:
      - "echo 'running composer install'"
      - "cd $LANDO_MOUNT && composer install"
  node:
    type: node:9
    run:
      - "echo 'running npm install and gulp'"
      - "cd $LANDO_MOUNT/themes/custom/bat-theme && npm install"
      - "cd $LANDO_MOUNT/themes/custom/bat-theme && ./node_modules/gulp/bin/gulp.js"
    globals:
      gulp-cli: "latest"
events:
  post-db-import:
    - appserver: cd $LANDO_WEBROOT && drush cr -yWebsite: devwithlando.io
Docs: docs.devwithlando.io
Github: github.com/lando/lando
Slack Channel: slackpass.io/kalabox