Alternativa grátis para máquinas virtuais em Apple
Os gerenciadores de Virtual Machine (VM) grátis, até o momento, não funcionam no processador Apple M1. Nesse cenário os usuário dessa nova arquitetura ficam limitados a gerenciadores pagos ou Docker. Aqui vamos conhecer uma alternativa bem interessante: Multipass.
Motivação
Ao trabalhar em uma aplicação, que no ambiente local de desenvolvimento tem um banco de dados superior a 30 GB, estava acontecendo bastante transferencias de dados, e rodando via Docker, com dois containers, o desempenho estava bem inferior, do que se comparado a um ambiente com a aplicação e o banco no container.
Outro detalhe importante, para quem trabalha com a Ruby on Rails, as ferramentas de debug como o byebug, debugger e etc, via Docker precisa usar com Docker Attach, e com frequência o console se perde.
A ideia é roda essa aplicação em uma maquina virtual sem Docker, me pareceu interessante. Além de ser importante ter alternativas, e não se limitar a uma única tecnologia. Seria importante fazer essa comparação de performance.
O grande desafio aqui é fazer isso em uma arquitetura nova, como os equipamentos com Apple M1 - é o primeiro system-on-a-chip (SoC) baseado em ARM. Ele foi lançado em 2020, e ainda existem algumas incompatibilidades.
Possibilidades
Usar o Vagrant como gerenciador de VM em CI pareceu uma boa opção, porque já havia usado, os comandos são bem simples, a conexão ssh e o compartilhamento de pasta também.
Porém ele precisa de um provider: o Virtualbox é a maneira default de usar, porém Virtualbox não tem versão compatível com o M1. É possível usar o Parallels ou o VMware, porém ambos são pagos, USD 99.99 por ano e USD 199.
Antes de fazer um investimento assim, pesquisando mais soluções, encontrei o Multipass.
O Multipass é um utilitário de linha de comando Open Source desenvolvido pela Canonical que serve para a criação e gerenciamento de máquinas virtuais do Ubuntu, simplificando o processo no desenvolvimento de aplicativos.
Instalação do Multipass
A instalação é muito simples, basta baixar o pacote e executar.
Iniciando a VM - Multipass
O Multipass funciona via CL:
Preferi instalar a versão 18.04 para evitar problemas de compatibilidade com a versão das linguagem e plugin usados nessa aplicação.
Coloquei com 4 GB de RAM e 12 GB de disco. A realocação é meio chata, então é melhor iniciar já com um provisionamento coerente.
Se deu tudo certo até aqui, o comando multipass list vai mostrar a VM criada o estado e o IP:
Importante: compartilhar a pasta local (host) com a VM:
Para acessar o shell da VM multipass shell <nome da vm>
Instalações no Ubuntu - app server
Acesse o shell da VM com o comando na pasta que deu o launch:
Instalações dos pacotes básicos de desenvolvimento:
sudo apt-get update
sudo apt-get install curl build-essential openssl curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev libgmp-dev autoconf libc6-dev ncurses-dev automake libtool bison
Abaixo as instalação vão depender do que vai precisar, exemplo: se não precisar do Mongo DB, não tem necessidade de instalar.
Instalação memcached:
Instalação do Mongo DB:
Instalação redis:
Instalação memcached:
Instalação zsh e ohmyz (opcional porém recomendado):
sudo apt-get install zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Aqui basta seguir a instalação normal a instação das suas stacks.
Instalações no Ubuntu - MySQL server
Coloquei o banco em outra VM, para o caso de precisar criar uma nova de aplicação e não ter que baixar o banco todo novamente. E as primeiras instancias de fiz com pouco recurso, tive retrabalho (custo do aprendizado).
Porém fica opcional criar uma nova ou deixar na mesma instancia. A vantagem é que a rede criada é em modo bridge, e todas as VM tem acesso a maquina host e as demais VM.
Crie e acesse o shell da VM para o Mysql, no meu caso coloquei o nome de vm-mysql:
Instalações dos pacotes básicos (idem ao anterior):
sudo apt-get update
sudo apt-get install curl build-essential openssl curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev libgmp-dev autoconf libc6-dev ncurses-dev automake libtool bison
Instação zsh e ohmyz (opcional porém recomendado):
sudo apt-get install zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
MySQL server
Dando acesso remoto (não localhost) para o banco:
Alterando a linha do bind-address para 0.0.0.0 no arquivo: /etc/mysql/mysql.conf.d/mysqld.cnf
Você pode fazer o restore do banco, compartilhando a pasta que está o arquivo dump do MySQL e fazer o load dele.
Conclusão
O Multipass se demostrou uma excelente alternativa para um servidor local para desenvolvimento. Mesmo sendo um projeto novo e com algumas limitações, na realocação de recursos por exemplo, possui as funções básicas para virtualizar seu ambiente.
A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.