
Set up and use a network of local development VMs
... using Vagrant to manage VirtualBox VMs. (The author of this documentation wasted a lot of time trying to get Vagrant to work with KVM/libvirt. Issues with networking that looked like guest misconfigurations vanished after changing to the better-tested combination of Vagrant and VirtualBox.)
Use the local development environment
-
Enter the project's nix-shell:
nix-shell ../../../shell.nix
-
Build and start the VMs:
VAGRANT_DEFAULT_PROVIDER=virtualbox vagrant up
-
Then, add the Vagrant SSH configuration to your user's
~/.ssh/config
file:install -d ~/.ssh ; vagrant ssh-config >> ~/.ssh/config
-
Edit the generated configuration: Add the
publicIP
addresses fromgrid.nix
to ssh config Host match blocks (not HostName) so theHost
lines all read like:Host payments1 192.168.67.21 HostName 127.0.0.1 User vagrant [...]
From version 1.5.0 Morph honors the SSH_CONFIG_FILE
environment variable since 3f90aa88 (March 2020, v 1.5.0), so in the future this will get a bit more convenient.
-
Add your SSH key to
users.nix
so you'll be able to log in after deploying the new configuration:$EDITOR secrets/users.nix
-
Then, build and deploy our software to the Vagrant VMs:
morph build grid.nix morph push grid.nix morph deploy grid.nix boot vagrant halt vagrant up morph upload-secrets grid.nix
You should now be able to log in with the users and keys you set in your users.nix
file.