Criando seu ambiente com ASDF
Fala, galera, beleza? Neste artigo, vamos criar um ambiente utilizando uma ferramenta super poderosa chamada ASDF. Esta é uma ferramenta extremamente útil que utilizo no meu dia a dia. Basicamente, você consegue gerenciar múltiplas versões de aplicativos ou runtimes na sua máquina. Imagine que você está trabalhando no desenvolvimento de uma aplicação usando a nova versão do PHP 8.3, e também precisa fazer a manutenção daquele legadinho gostoso (quem nunca, né?). Com o ASDF, você consegue ter várias versões do PHP instaladas na sua máquina, e não apenas o PHP. Você pode ter Node.js, Docker Compose, .NET Core, Python, Terraform, AWS CLI, e muito mais.
O que é o ASDF?
ASDF é um gerenciador de versão de ferramentas. Todas as definições de versão estão contidas em um arquivo .tool-versions que você pode adicionar ao seu projeto Git para compartilhar com sua equipe, garantindo que todos estejam na mesma versão.
A maneira antiga de trabalhar exigia vários gerenciadores (nvm, n, rbenv e phpbrew) de versão CLI, cada um com sua API, arquivos de configuração e implementação (por exemplo, manipulação de $PATH, variáveis de ambiente, etc.). ASDF fornece uma interface única e um arquivo de configuração para simplificar os fluxos de desenvolvimento e pode ser estendido a todas as ferramentas e runtimes por meio de uma interface simples.
Vantagens
ASDF garante que as equipes usem exatamente as mesmas versões de ferramentas, com suporte para muitas ferramentas por meio de um sistema de plugin e a simplicidade de ser um único executável.
- Utilizar apenas uma ferramenta para gerenciar as versões
- Plugins escritos pela comunidade
- Arquivo de configuração para gerenciar versões a partir de um diretório
Mão na massa!
Neste artigo, vou preparar um ambiente de desenvolvimento do zero utilizando o ASDF. Bora lá então! Para nosso ambiente, vamos instalar as seguintes ferramentas:
- PHP 8.3
- PHP 8.2
- PHP 8.1
Instalando dependências do ASDF
Para este ambiente, vamos seguir a instalação via Linux. Para instalar o ASDF, acesse a página oficial da documentação: https://asdf-vm.com/
Antes de começar, precisamos instalar as dependências para o ASDF. https://asdf-vm.com/manage/dependencies.html
sudo apt-get install curl gitInstalando ASDF
A instalação do ASDF é bastante simples: basta baixar o binário e colocá-lo em uma pasta que esteja no seu $PATH.
Nota: O comando abaixo está usando a versão v0.20.2 para Linux x86_64. Talvez esta versão esteja desatualizada; acesse o seguinte link e veja qual é a versão mais recente: https://github.com/asdf-vm/asdf/releases
mkdir -p ~/.local/bin
curl -fsSL https://github.com/asdf-vm/asdf/releases/download/v0.20.2/asdf-v0.20.2-linux-amd64.tar.gz | tar -xz -C ~/.local/bin asdfDepois, precisamos adicionar essa pasta e a pasta de shims do ASDF ao $PATH. Se você utiliza bash, adicione a linha abaixo no arquivo ~/.bash_profile. Se utiliza zsh, adicione no arquivo ~/.zshrc. Em seguida, abra um novo terminal.
export PATH="$HOME/.local/bin:${ASDF_DATA_DIR:-$HOME/.asdf}/shims:$PATH"Se você utiliza algum outro shell, como fish ou Elvish, siga as configurações corretas para cada shell: https://asdf-vm.com/guide/getting-started.html#_2-configure-asdf
Após a instalação do ASDF, você pode executar o seguinte comando para verificar se tudo ocorreu bem na instalação.
asdf --versionAgora que temos o ASDF instalado em nosso ambiente, precisamos entender como ele funciona.
Basicamente, você precisa adicionar os plugins das ferramentas que você deseja instalar. Neste cenário, queremos instalar o PHP, então precisamos procurar um plugin do ASDF para o PHP, e assim por diante para outras ferramentas ou linguagens de programação.
Instalando PHP 8.1, 8.2, 8.3
Para instalar o PHP, vamos utilizar o asdf-php, que é um plugin do ASDF para o PHP. https://github.com/asdf-community/asdf-php
Antes de tudo, precisamos registrar esse plugin em nosso ASDF com o seguinte comando:
asdf plugin add php https://github.com/asdf-community/asdf-php.gitApós adicionar como plugin, precisamos instalar algumas dependências em nosso sistema operacional. No próprio repositório do plugin asdf-php, o autor fala sobre as dependências que precisam ser instaladas antes.
Nota: Essas dependências são do PHP e não do ASDF, pois o ASDF compila o PHP na sua máquina. Para facilitar, vou listá-las aqui.
sudo apt-get install -y \
autoconf \
bison \
build-essential \
gettext \
libgd-dev \
libcurl4-openssl-dev \
libedit-dev \
libicu-dev \
libjpeg-dev \
libmysqlclient-dev \
libonig-dev \
libpng-dev \
libpq-dev \
libreadline-dev \
libsqlite3-dev \
libssl-dev \
libxml2-dev \
libzip-dev \
openssl \
pkg-config \
re2c \
zlib1g-devDepois que terminar a instalação de todas as dependências, podemos instalar o PHP em nossa máquina. Para verificar quais versões existem, execute o seguinte comando.
asdf list all phpO comando acima retornará uma lista de todas as versões disponíveis no PHP. O interessante é que ele também retorna as versões que estão em desenvolvimento, permitindo testar recursos em desenvolvimento. Para começar, vamos instalar a versão 8.1.26, então execute o seguinte comando.
asdf install php 8.1.26A instalação pode demorar um pouco, pois o PHP será compilado na sua máquina. Além disso, é importante observar que o gerenciador de pacotes Composer e o PECL também serão instalados em cada versão.
Agora, precisamos repetir o processo para as outras versões do PHP. Vamos lá:
asdf install php 8.2.13asdf install php 8.3.0Quando a instalação da última versão terminar, precisamos configurar qual será a versão padrão instalada em nosso ambiente. Para isso, execute o seguinte comando.
asdf set -u php 8.3.0Com esse comando, definimos a versão padrão do PHP em nosso ambiente, gravando-a no arquivo .tool-versions da pasta do nosso usuário. Após executar o comando acima, você pode executar o php -v em qualquer lugar do seu sistema operacional, obtendo a seguinte saída.
PHP 8.3.0 (cli) (built: Dec 17 2023 11:09:15) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.0, Copyright (c) Zend TechnologiesAgora, a cereja do bolo: vamos criar em nosso sistema de arquivo três pastas, imaginando que cada pasta é um projeto que você está trabalhando, e cada projeto precisa executar em uma versão diferente do PHP.
Vamos acessar a raiz do nosso usuário e criar uma pasta Code. Dentro dessa pasta, vamos criar as pastas para cada projeto.
# Acessar o diretório raiz do nosso usuário
cd ~
# Criar a pasta Code
mkdir Code
# Acessar a pasta Code
cd Code
# Criar as pastas de cada projeto
mkdir projeto-1
mkdir projeto-2
mkdir projeto-3Depois de criar todas as pastas de todos os projetos, vamos acessar cada pasta e configurar nossa versão do PHP desejada.
# Acessar o projeto-1
cd ~/Code/projeto-1
# Configurar a versão 8.1.26 para o projeto-1
asdf set php 8.1.26
# Verificar a versão do PHP
php -v
# Saída
PHP 8.1.26 (cli) (built: Dec 17 2023 11:09:15) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.0, Copyright (c) Zend Technologies
# Acessar o projeto-2
cd ~/Code/projeto-2
# Configurar a versão 8.2.13 para o projeto-2
asdf set php 8.2.13
# Verificar a versão do PHP
php -v
# Saída
PHP 8.2.13 (cli) (built: Dec 17 2023 11:09:15) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.0, Copyright (c) Zend TechnologiesComo você pode ver, ao executar o comando php -v, ele retorna uma versão específica para a pasta e, ao executar de outra pasta qualquer, retorna a versão padrão do PHP (8.3.0). Dessa forma, podemos configurar uma versão para cada pasta específica.
Conclusão
ASDF é uma ferramenta fantástica. Sempre que preciso instalar algum componente no meu SO, eu verifico se existe algum plugin ASDF. Lembrando que existem muitos plugins escritos para o ASDF, com certeza há algum para sua linguagem favorita. Adicionei um repositório Git que centraliza uma lista de plugins para o ASDF: https://github.com/asdf-vm/asdf-plugins .
Obrigado, galera!!! Qualquer dúvida ou crítica é muito bem-vinda; fiquem à vontade para adicionar comentários.