Alternativa grátis para máquinas virtuais em Apple

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.

💡
Disclaimer 1: Não necessariamente, uma aplicação com banco de dados MySQL com > 30 GB rodando localmente tem um desempenho ruim, depende do computador, depende da linguagem de programação, de como foi desenvolvido e das versão. Apenas essa aplicação em especifico estava.

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.

💡
Disclaimer 2: O caminho que seguir para realizar esse setup, tem muito de experiencias (boas e ruim) do passado e grande parte de preferencias pessoais. Fique a vontade para sugerir novas formas e fazer by your way 😊.


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.

💡
As opiniões e comentários expressos neste artigo são de propriedade exclusiva de seu autor e não representam necessariamente o ponto de vista da Revelo.

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.