Sempre que vou desenvolver uma feature nova para um cliente, a primeira coisa que faço é buscar na drupal.org alguma solução já desenvolvida pela comunidade. Se isso já é uma rotina comum de quem trabalha com projetos Drupal, porque não encontrar soluções já desenvolvidas e homologadas pela comunidade para trabalhar em seu ambiente local.
Nosso velho LAMP de cada dia
Um 'drupaleiro' iniciante que se preze sempre começa com a tríade mais conhecida LAMP, XAMP, WAMP, etc. Porém acabamos esbarrando naquele problema de cliente com versões diferentes de PHP, servidores usam Apache e outro NGINX, um MariaDB outro PostgreSQL.
Docker resolvendo nossas dores de cabeça
Pensando nisso o Docker surgiu em nossa vida para facilitar nosso dia a dia nesses monte de conflitos entre várias aplicações.
Será que preciso aprender a construir Dockerfiles, construir containers, fazer rotas para conseguir montar um ambiente local?
Não, pois alguém já fez isso para nós! E é aí que entra o Docker4Drupal
Como a descrição dele já mesmo diz, o Docker4Drupal é um suite de images docker otimizadas para Drupal. Ele utiliza o docker-composer para instânciar aplicações completas para Linux, Mac OS X ou Windows. A stack de containers foi criada pela empresa Wodby que também é sua principal mantenedora.
Requisitos do Docker4Drupal
Antes de iniciarmos nosso setup do ambiente local, precisamos primeiro instalar algumas coisas que são base para o funcionamento do Docker4Drupal:
- Instalar o Docker (Linux, Docker for Mac ou Docker for Windows (10+ Pro))
- Se estiver usando Linux, também é necessário instalar o docker compose
Subindo um ambiente local com Drupal no Docker4Drupal
Para subir um Drupal padrão (que será nosso exemplo inicial) vamos seguir os seguintes passos:
Clone o repositório do https://github.com/wodby/docker4drupal ou faça o download da versão mais estável.
Observação: Se você for utilizar o Drupal 9, pode ignorar este passo, mas caso queira utilizar o Drupal 8 ou 7, abra o arquivo .env e edite as variáveis DRUPAL_TAG e NGINX_VHOST_PRESET.
### --- VANILLA DRUPAL ----
DRUPAL_TAG=9-4.20.1
#DRUPAL_TAG=8-4.20.1
#DRUPAL_TAG=7-4.20.1
### --- NGINX ----
NGINX_TAG=1.19-5.10.0
#NGINX_TAG=1.18-5.10.0
NGINX_VHOST_PRESET=drupal9
#NGINX_VHOST_PRESET=drupal8
#NGINX_VHOST_PRESET=drupal7
#NGINX_VHOST_PRESET=drupal6
Ainda no arquivo .env você irá editar a variável PROJECT_BASE_URL e PROJECT_NAME com a URL que você deseja utilizar em seu localhost e um nome para o seu projeto respectivamente.
### PROJECT SETTINGS
PROJECT_NAME=my_drupal9_project
PROJECT_BASE_URL=drupal.docker.localhost
Feito isso, agora rode o comando abaixo para iniciar os containers:
# Iniciar os containers
docker-compose up -d
Após executar este comando, o docker fará todo o processo de pull (download) das imagens, criação dos containers, mapeamento das rotas pra você.
Se não houve nenhum erro, ao final do processo basta acessar a URL que você configurou na variável logo acima com a porta, que no caso será a 8000 por default.
Por exemplo, se você manter a variável default no PROJECT_BASE_URL a URL será http://drupal.docker.localhost:8000/
Apareceu uma tela de instalação do Drupal? Sucesso!!!
Basta agora você instalar o Drupal usando os seguintes valores padrão para a configuração do banco de dados:
DB_NAME=drupal
DB_USER=drupal
DB_PASSWORD=drupal
DB_ROOT_PASSWORD=password
DB_HOST=mariadb
DB_PORT=3306
DB_DRIVER=mysql
Após finalizar a instalação já teremos nosso Drupal operando!
E o Docker4Drupal não para por aí, além de uma boa documentação https://wodby.com/docs/1.0/stacks/drupal/ ele também possui integração pronta com vários tipo de containers, desde sistemas de cache (Varnish, Memcached), de busca (Solr, Elasticsearch), serviços de mail (Mailhog, OpenSMTPD), Node.js, Redis, PostgreSQL e por aí vai. São muitas possibilidades criação de infraestruturas completas localmente sem necesssitar carregar sua máquina com várias versões diferentes de diversas aplicações.
Até mesmo uma simples mudança de versão de uma aplicação (por exemplo altera a versão do PHP) é feita alterando somente uma linha no arquivo .env.
Referências: