Colorfield logo

Drupalicious

Published on

Drupal and Docker the easy way with Lando

Authors
Lando logo

Ever thought about spinning up a Drupal 7 or 8 dev environment that is close to your production setup in minutes (Apache or Nginx, PHP 5.6 or 7.1, MySQL or Postgres, or ...)? Even better, you will be able to share the configuration with your team straight on your Git repository as a YAML file.

Lando provides development environments (LAMP, LEMP, MEAN, ...) and other recipes for Drupal 6 to 8, Laravel, Backdrop, ... .

Lando is for developers who want to quickly specify and painlessly spin up the services and tools needed to develop their projects. It's a free, open source, cross-platform, local development environment and DevOps tool built on Docker container technology.

Install Lando

For macOS, download the latest version on GitHub.
More info and other platforms

Init a Drupal 8 environment

Lando strength is close to zero configuration. You can override it if needed, but by default your setup for this recipe will be Apache, PHP 7.1 and MySQL 5.7.

# Create a Drupal project. Assumes that you have Composer installed.
composer create-project drupal-composer/drupal-project:8.x-dev my_drupal_project --stability dev --no-interaction

# Cd into the created directory.
cd my_drupal_project

# Launch the interactive session.
lando init

# Or just specify the Drupal 8 recipe.
lando init --recipe drupal8
Lando init

Get app information

lando info

This command will print the default config from the recipe : PHP version, MySQL credentials, ...

{
  "appserver": {
    "type": "php",
    "version": "7.1",
    "via": "apache",
    "webroot": "web",
    "config": {
      "conf": "/Users/christophe/.lando/services/config/drupal8/php.ini"
    }
  },
  "database": {
    "type": "mysql",
    "version": "latest",
    "creds": {
      "user": "drupal8",
      "password": "drupal8",
      "database": "drupal8"
    },
    "internal_connection": {
      "host": "database",
      "port": 3306
    },
    "external_connection": {
      "host": "localhost",
      "port": true
    },
    "config": {
      "confd": "/Users/christophe/.lando/services/config/drupal8/mysql"
    }
  }
}

Start your environment

lando start

Noticed the enabled SSL? Sweet!

Lando start

Install your site with Drush

lando drush site-install standard --account-name=admin --account-pass=admin --db-url='mysql://drupal8:drupal8@database/drupal8' --site-name=Dev85
Site installed

Among other tools, in the Drupal 8 recipe, we now have

  • lando composer
  • lando db-import / db-export
  • lando drupal
  • lando mysql
  • lando php

Just run `lando` for a complete list of commands.

Add a service

Optionaly if you want to finetune your setup, go to the .lando.yml file.
As an example, here we will add Mailhog to catch outbound mails:

# Configuration provided by the `lando init` command.
name: drupal-85-dev
recipe: drupal8
config:
  webroot: web

# Proxy settings so we get a nice URL for the mailhog ui.
proxy:
  mailhog:
    - mail.drupal8.lndo.site
services:
  # Spin up a mailhog container called "mailhog" or whatever, the name is arbitrary.
  mailhog:
    # Use the latest version
    type: mailhog
    # Mailhog expects that these services will be php services.
    hogfrom:
      - appserver
    # Optional access at localhost:1026
    portforward: 1026

Then restart Lando.

lando restart
Lando Mailhog

Now Elasticsearch, Solr, Varnish, Redis, Mongo, ... are at your fingertips :) BOOMSHAKALAKA!!!

Here is a starter for several databases, MailHog, PhpMyAdmin. If you modified your existing configuration, run lando rebuild then.

lando.yml

Resources