Una opción gratuita para máquinas virtuales en Apple

Una opción gratuita para máquinas virtuales en Apple

Los administradores de Máquinas Virtuales (VM) gratuitas no funcionan actualmente en el procesador Apple M1. En este escenario, los usuarios de esta nueva arquitectura se limitan a administradores pagos o Docker. Aquí vamos a conocer una alternativa muy interesante: Multipass.

Motivación


Al trabajar en una aplicación, que en el entorno de desarrollo local tiene una base de datos de más de 30 GB, se producían muchas transferencias de datos y se ejecutaba a través de Docker, con dos containers. El rendimiento era mucho más bajo que en comparación con un entorno con el aplicación y la base de datos en el container.

⚠️
Disclaimer 1: Una aplicación con base de datos MySQL con > 30 GB corriendo localmente no tiene necesariamente un mal desempeño: depende de la computadora, del lenguaje de programación, de cómo fue desarrollada y de las versiones. Eso solo ocurrió con esta aplicación específica.

Otro detalle importante, para aquellos que trabajan con Ruby on Rails, las herramientas de debug como byebug, debugger, etc., a través de Docker, deben usarse con Docker Attach, y la consola muchas veces se pierde.

La idea es ejecutar esta aplicación en una máquina virtual sin Docker, me pareció interesante. Además de ser importante tener alternativas, y no limitarte a una sola tecnología. Sería importante hacer esta comparación de rendimiento.

El gran desafío aquí es hacer esto en una nueva arquitectura, como los dispositivos Apple M1: es el primer system-on-a-chip (SoC) basado en ARM. Fue lanzado en 2020 y todavía hay algunas incompatibilidades.

Posibilidades


Usar Vagrant como administrador de VM en CI me pareció una buena opción, porque ya lo había usado. Los comandos son muy simples, la conexión ssh y el uso compartido de carpetas también.

Pero necesita un provider: Virtualbox es la forma default de usarlo, pero Virtualbox no tiene una versión compatible con M1. Puedes usar Parallels o VMware, pero ambos son de pago, USD 99,99 al año y USD 199.

Antes de hacer tal inversión, investigando más soluciones, encontré Multipass.
Multipass es una utilidad de línea de comandos de código abierto desarrollada por Canonical para crear y administrar máquinas virtuales Ubuntu, lo que simplifica el proceso de desarrollo de aplicaciones.

Multipass es una utilidad de línea de comandos Open Source desarrollada por Canonical para crear y administrar máquinas virtuales Ubuntu, lo que simplifica el proceso de desarrollo de aplicaciones.

💡
Disclaimer 2: El camino que sigues para llevar a cabo esta configuración tiene muchas experiencias (buenas y malas) del pasado y una gran parte de preferencias personales. Siéntete libre de sugerir nuevas formas y hazlo a tu manera 😊.

Instalación de Multipass


La instalación es muy simple: solo debes descargar el paquete y ejecutarlo.

Iniciar VM - Multipass


Multipass funciona vía CL:

Preferí instalar la versión 18.04 para evitar problemas de compatibilidad con el idioma y las versiones de complementos utilizados en esta aplicación.

Lo puse con 4 GB de RAM y 12 GB de disco. La reubicación es un poco complicada, por lo que es mejor comenzar con un aprovisionamiento coherente de inmediato.

Si todo va bien hasta el momento, el comando multipass list mostrará el estado y la IP de la VM creada:

Importante: Comparte la carpeta local (host) con la VM:

Instalaciones de los paquetes básicos de desarrollo:

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

A continuación, las instalaciones dependerán de lo que necesites. Por ejemplo: si no necesitas Mongo DB, no requieres instalarlo.

Instalación memcached:

Instalación de Mongo DB:

Instalación de redis:

Instalación memcached:

Instalación zsh y ohmyz (opcional aunque recomendado):

sudo apt-get install zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Aquí solo sigue la instalación normal de tus stacks.

Instalaciones en Ubuntu - servidor MySQL


Pongo el banco en otra VM por si necesito crear una nueva aplicación y no tenga que volver a descargar toda la base de datos. Las primeras instancias las hice con pocos recursos y tuve retrabajo (costo de aprendizaje).

Sin embargo, es opcional crear uno nuevo o dejarlo en la misma instancia. La ventaja es que la red creada está en modo bridge y todas las máquinas virtuales tienen acceso a la máquina host y a las otras máquinas virtuales.

Crea y accede al shell de VM para MySQL. En mi caso, lo nombré vm-mysql:

Instalación de los paquetes básicos (igual al 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

Instalación de zsh y ohmyz (opcional aunque recomendado):

sudo apt-get install zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

MySQL server

Dotación acceso remoto (no localhost) al banco:

Cambiar la línea de dirección de enlace a 0.0.0.0 en el archivo /etc/mysql/mysql.conf.d/mysqld.cnf

Puedes restaurar la base de datos compartiendo la carpeta donde se encuentra el archivo dump de MySQL y cargándolo.

Conclusión


Multipass ha demostrado ser una excelente alternativa a un servidor local para el desarrollo. Si bien es un proyecto nuevo y con algunas limitaciones (en la reasignación de recursos, por ejemplo) tiene las funciones básicas para virtualizar tu entorno si trabajas con Apple.

⚠️
Las opiniones y comentarios emitidos en este artículo son propiedad única de su autor y no necesariamente representan el punto de vista de Revelo.

Revelo Content Network da la bienvenida a todas las razas, etnias, nacionalidades, credos, géneros, orientaciones, puntos de vista e ideologías, siempre y cuando promuevan la diversidad, la equidad, la inclusión y el crecimiento profesional de los profesionales en tecnología.