Um ambiente de desenvolvimento é composto por vários serviços, no mínimo temos um servidor Web e Um banco de dados, com o surgir do Docker e o maravilhoso docker-compose.yml facilitou bastante a nossa vida, mas calma, dá pra ficar ainda melhor.

O Que é o Lando?

Um superset para o Docker, o Lando fornece maneiras para os desenvolvedores executarem comandos complexos, criarem etapas e automação em seus serviços sem o uso de Dockerfile, docker-compose.yml ou longos comandos docker exec.

Mas não posso apenas usar o Docker?

Sim, mas veja bem, ele é feito para simplificar e acelerar a criação de ambiente de desenvolvimento, então sim, você pode utilizar o Docker mas o Lando vai fazer a mesma coisa com apenas um único comando.

Veja um exemplo da mesma aplicação:

Com lando.yml

name: myapp
recipe: drupal9

Com docker-compose.yml

version: "3"

services:
  mysql:
    image: mysql:8.0
    container_name: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: unless-stopped
    env_file: .env
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - internal

  drupal:
    image: drupal:8.7.8-fpm-alpine
    container_name: drupal
    depends_on:
      - mysql
    restart: unless-stopped
    networks:
      - internal
      - external
    volumes:
      - drupal-data:/var/www/html

  webserver:
    image: nginx:1.17.4-alpine
    container_name: webserver
    depends_on:
      - drupal
    restart: unless-stopped
    ports:
      - 80:80
    volumes:
      - drupal-data:/var/www/html
      - ./nginx-conf:/etc/nginx/conf.d
    networks:
      - external

networks:
  external:
    driver: bridge
  internal:
    driver: bridge

volumes:
  drupal-data:
  db-data:

Então se isso não te convenceu a usar o Lando não sei mais o que dizer.

Mão na massa

Para facilitar o entendimento vamos subir um servidor PHP e Mysql, o famoso LAMP, mas não se prensa nisso o Lando possui diversas receitas tornando possível rodar vários serviços de uma forma simples.

Instalando o Lando

O Lando tem uma documentação bem completa, antes não se esqueça de instalar o Docker então para instalá-la vamos seguir a documentação oficial.

Subindo uma aplicação LAMP

Lamp (Linux, Apache, MySQL, PHP/Perl/Python) é uma sigla para as aplicações web mais utilizadas em conjunto e, por esse motivo, existem diversas ferramentas para isso, o Lando é mais uma forma.

Primeiro vamos criar um diretório do projeto:

mkdir lamp_lando

Abrimos a pasta:

cd lamp_lando

Dentro do diretório basta inicializarmos o Lando com:

lando init

Aqui serão feitas alguma perguntas sobre o projeto, que será de acordo com a stack desejada, para o nosso projeto iremos responder da seguinte forma:

From where should we get your apps's codebase? : [current working directory]
What recipe do you want to use?: [lamp]
Where is your webroot relative to the init destination?: [.]
What do you want to call this app? [LAMP Project]

E iniciamos nossa aplicação:

lando start

Aguarde um pouco, serão baixados os containers docker, isso pode demorar um pouco dependendo do seu computador e sua internet, e assim que terminado você terá uma tela parecida com a abaixo:

   ___                      __        __        __     __        ______
  / _ )___  ___  __ _  ___ / /  ___ _/ /_____ _/ /__ _/ /_____ _/ / / /
 / _  / _ \/ _ \/  ' \(_-</ _ \/ _ `/  '_/ _ `/ / _ `/  '_/ _ `/_/_/_/
/____/\___/\___/_/_/_/___/_//_/\_,_/_/\_\\_,_/_/\_,_/_/\_\\_,_(_|_|_)


Your app has started up correctly.
Here are some vitals:

 NAME            my-lando-app
 LOCATION        /home/diego/Projects/lamp_lando
 SERVICES        appserver, database
 APPSERVER URLS  https://localhost:49185
                 http://localhost:49186
                 http://my-lando-app.lndo.site/
                 https://my-lando-app.lndo.site/

Tudo configurado para isso vamos criar um arquivo info.php com o seguinte conteúdo:

<?php

phpinfo();

E acessando o servidor do lando /info.php vamos ver nosso servidor rodando.

Listando dados do Lando

Um outro comando muito útil é o lando info ele lista todas as configurações do servidor, como endereço do servidor web, banco de dados e até as senhas do banco, segue um exemplo da saída do comando:

[ { service: 'appserver',
    urls:
     [ 'https://localhost:49185',
       'http://localhost:49186',
       'http://my-lando-app.lndo.site/',
       'https://my-lando-app.lndo.site/' ],
    type: 'php',
    healthy: true,
    via: 'apache',
    webroot: '.',
    config: {},
    version: '7.4',
    meUser: 'www-data',
    hasCerts: true,
    hostnames: [ 'appserver.mylandoapp.internal' ] },
  { service: 'database',
    urls: [],
    type: 'mysql',
    healthy: true,
    internal_connection: { host: 'database', port: '3306' },
    external_connection: { host: '127.0.0.1', port: '49182' },
    healthcheck: 'bash -c "[ -f /bitnami/mysql/.mysql_initialized ]"',
    creds: { database: 'lamp', password: 'lamp', user: 'lamp' },
    config: {},
    version: '5.7',
    meUser: 'www-data',
    hasCerts: false,
    hostnames: [ 'database.mylandoapp.internal' ] } ]

E, como mágica temos um ambiente de desenvolvimento configurado.

Ambiente de desenvolvimento, não se esqueça

Na própria documentação oficial é dito claramente que o Lando é uma ferramenta para criar e facilitar ambientes de desenvolvimento, então, em hipótese alguma o utilize em um ambiente de produção.

Alguns comandos

Antes de tudo vou deixar aqui uma lista de comandos essenciais, uns utilizados acima e outros não, mas que podem ajudar bastante.

lando config

Exibe a configuração do Lando.

lando destroy

Destrói a aplicação, apagando por completo os containers e volumes do Docker criados.

lando info

Exibe a configuração da aplicação, como endereços do servidor web e banco de dados, assim como senhas do mesmo.

lando init

Inicializa um projeto com Lando.

lando list

Lista todos os serviços rodando com Lando.

lando poweroff

Desliga todos os containers da aplicação.

lando rebuild

Recria a aplicação do zero mas mantém os dados.

lando restart

Reinicia a aplicação.

lando start

Inicia a aplicação.

lando stop

Para a aplicação.

lando ssh

Acessa o shell da aplicação.