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.