Full-stack Web Development with AracPac

2/5/2021

Like many developers, I used to dread migrating to new hardware. Having invested time into setting things up a particular way, it's hard to get excited about reinstalling software and fiddling with configuration files.

This is one of the reasons why I like to develop on virtual machines. Yes, VMs have more overhead than running containers, but they are also much more representative of the environments I actually have to work on. It's not uncommon that I'll need to write cron jobs that trigger shell scripts that depend on specific frameworks or software to be present. Yes, I can cobble this together on my host machine, but I find it much easier to use sandboxed VMs — especially when I need to switch back and forth between multiple such projects.

Yet VMs have some well-known limitations:

  • spotty cross-platform (Mac / Linux / Windows) support
  • code changes made on the host machine can take time to propagate to the guest machine 
  • difficult to configure

These limitations can make VMs a hard sell to coworkers and management, regardless of the wins they can provide.

But over the years, I've compiled a set of tips, tricks, and configuration defaults that have helped to mitigate some of these issues.

And that brings me to AracPac, which is both a set of configuration files, and ultimately, a series of web development VMs.

If you don't care what's under-the-hood, you can just head over to Vagrant Cloud and pick an AracPac flavor to use (currently there's Ubuntu 20.04 LTS and CentOs 8 variants).

If you like the idea but want to customize the VM to your exact needs, just head over to the GitHub repository and clone the codebase. With that done, you can modify the installation bootstrap process, change the Packer configuration file, update the Ansible playbook, or add and remove build shell scripts. Once your image has been built, you can use it locally or upload it to Vagrant Cloud and access it from anywhere.

Released in conjunction with these images is a set of versioned Vagrantfiles, each of which corresponds to a specific box version. So, for instance, the version 1.0 Vagrantfiles have been tested with the version 1.0 boxes.

I'll get into the nuts-and-bolts of the Vagrantfiles in a future deep dive, but they help to address some of the limitations mentioned above:

  • they automate configuration and can be easily modified via variables
  • they facilitate revere-NFS mounting from the VM, which reduces the file change propagation time
  • they work on Mac, Linux, and Windows

I plan to maintain the boxes as I update them for my own use. If you'd like to get involved, ping me on GitHub!