--- route: local-dev-setup-using-vagrant allow_guest: 1 published: 1 --- Local infrastructure subsystem is a faster, cheaper and more flexible alternative to running virtual machines on a public cloud for development. > Note: Local Insfrastructure is available for Linux hosts only. You're free to add Mac OS support by using Virtualbox. ## Prerequisites #### Dependencies - Packer - For building virtual machine images. - Vagrant - Simplified CLI/API for managing virtual hosts. - vagrant-libvirt - For using KVM/Libvirt. Duh! - vagrant-hostmanager - For managing hosts file in guests and host machine. - Libvirt/KVM - Virtualization provider. ### Installation Dependencies can be installed with ```bash python3 apps/press/backbone/setup.py ``` > Note: After this logout completely and login again to start with local infrastructure. Start a new shell session. if you're on a Non-GUI server. ### Building Base Images To spawn virtual machines quickly, we'll create a ubuntu base image (as seen on DigitalOcean or other cloud providers). This image can later be used to spawn blank virtual machines in seconds. This can be done with (`backbone` CLI is installed with `press` application) ```bash source env/bin/activate backbone hypervisor build ``` > Note: When running for the very first time this will download a ~500 MB ubuntu image. See contents of `press/backbone/packer` directory for more details. ### Spawning Virtual Machines There's no simple CLI for this at the moment. 1. Create a Vagrant directory ```bash mkdir scratch cd scratch ln -s ../apps/press/backbone/vagrant/Vagrantfile Vagrantfile ``` 2. Start local cluster with the following command and provide sudo password when asked ``` vagrant up --no-parallel --provider=libvirt ``` You can destroy the machines with ``` vagrant destroy -f ``` and spawn them again with `vagrant up` command. Local machines have following names/ips by default |Type |Name |Public IP |Private IP | |-------------------|-----------|-----------|-----------| |Proxy Server |n1.fc.dev |10.0.1.101 |10.1.1.101 | |Frappe Server |f1.fc.dev |10.0.2.101 |10.1.2.101 | |Database Server |m1.fc.dev |10.0.3.101 |10.1.3.101 | |Database Server |m2.fc.dev |10.0.3.102 |10.1.3.102 | ### Accessing VMs You can ssh into these machines using following commands ```bash ssh root@n1.fc.dev ``` ```bash vagrant ssh n1 ```