# Vagrant-based Ignition Development VM

**URL:** <https://forum.inductiveautomation.com/t/vagrant-based-ignition-development-vm/14873>\
**Category:** General Discussion\
**Tags:** ignition79\
**Created:** [July 25, 2017, 1:58am UTC](https://forum.inductiveautomation.com/t/vagrant-based-ignition-development-vm/14873 "2017-07-25T01:58:30Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Kevin.Collins](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.collins/32/13497_2.png) [@Kevin.Collins](https://forum.inductiveautomation.com/u/Kevin.Collins)\
**Post date:** [July 25, 2017, 1:58am UTC](https://forum.inductiveautomation.com/t/vagrant-based-ignition-development-vm/14873/1 "2017-07-25T01:58:30Z")

</div>

Howdy folks. I thought I’d share something I’ve put together and have been using for spinning up Ignition development VMs on my workstation. It uses the [Vagrant](https://vagrantup.com) product (which utilizes an underlying VM provider, such as VirtualBox).

I’ve setup the `Vagrantfile` (which is the initialization and definition file for it) to automatically install Java, MySQL, and Ignition. It can make for a pretty awesome way to quickly spool up an independent image.

> **[thirdgen88/ignition-vagrant](https://github.com/thirdgen88/ignition-vagrant)**
>
> Ignition Vagrant Development Environment. Contribute to thirdgen88/ignition-vagrant development by creating an account on GitHub.

Also feel free to check out the Getting Started guide for Vagrant (from the link above) as well. By leveraging the Vagrant Share functionality, it can also be a quick way to share a Dev VM with someone to connect externally. Pretty neat technology!

Let me know what you think and if you have any feedback!

Happy Coding! 🕶

---

<div class="post-metadata">

**Author:** ![nmudge](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/nmudge/32/3394_2.png) [@nmudge](https://forum.inductiveautomation.com/u/nmudge)\
**Post date:** [July 26, 2017, 12:30am UTC](https://forum.inductiveautomation.com/t/vagrant-based-ignition-development-vm/14873/2 "2017-07-26T00:30:11Z")

</div>

I tried this out and it worked. Cool. Would you consider adding the [Database Module](http://www.perfectabstractions.com/database-module.html) to it? It is great for development.

---

<div class="post-metadata">

**Author:** ![Kevin.Collins](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.collins/32/13497_2.png) [@Kevin.Collins](https://forum.inductiveautomation.com/u/Kevin.Collins)\
**Post date:** [July 26, 2017, 4:19pm UTC](https://forum.inductiveautomation.com/t/vagrant-based-ignition-development-vm/14873/3 "2017-07-26T16:19:40Z")

</div>

Yes, I think also adding a customized initial gateway would be helpful. For example, I could configure it to perform auto-backups to the shared `/vagrant` folder so that gateway backups go back out to the host. Also, the base gateway could be configured with database connections and so forth that are pre-configured.

I’m also planning to add some branches to the repository for alternate Ignition versions so you can just clone a different branch and `vagrant up` to have different instances of different versions (perhaps also different database combinations).

Thanks for the feedback, I think it works really well as well… The `vagrant share` (which utilizes [ngrok](https://ngrok.com), another great thing for Ignition developers) feature really brings it together for collaboration as well. Super neat stuff…

---

<div class="post-metadata">

**Author:** ![Kevin.Collins](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.collins/32/13497_2.png) [@Kevin.Collins](https://forum.inductiveautomation.com/u/Kevin.Collins)\
**Post date:** [August 24, 2017, 5:50pm UTC](https://forum.inductiveautomation.com/t/vagrant-based-ignition-development-vm/14873/4 "2017-08-24T17:50:28Z")

</div>

`ignition-vagrant` updated for 7.9.4 with some additional features as well:

- Package Caching Integrated to reduce bandwidth after initial provisioning. When you `vagrant destroy` and `vagrant up`, it will now restore the package cache and no longer re-download things like Java8, MySQL, and Ignition.
- Ignition 7.9.4 now in the `master` branch of the repository. Additional branches for 7.9.3 and 7.9.2 exist.

I’m going to explore some additional provisioning mechanisms (I need to determine if there are advantages of Chef/Puppet over the Shell-based provisioner) in future versions.

Let me know if anyone has any additional feedback, and feel free to report any issues to the GitHub page. Thanks and Happy Coding!

---

<div class="post-metadata">

**Author:** ![mario.pereira](https://avatars.discourse-cdn.com/v4/letter/m/5f8ce5/32.png) [@mario.pereira](https://forum.inductiveautomation.com/u/mario.pereira)\
**Post date:** [October 15, 2018, 9:40am UTC](https://forum.inductiveautomation.com/t/vagrant-based-ignition-development-vm/14873/5 "2018-10-15T09:40:03Z")

</div>

> [@Kevin.Collins](#):
>
> I'm going to explore some additional provisioning mechanisms (I need to determine if there are advantages of Chef/Puppet over the Shell-based provisioner) in future versions.

Hi Kevin,

I am currently looking for Ansible/Puppet/Chef/Powershell solution or even Kubernetes solution.

If you need help, please ping me!

---

<div class="post-metadata">

**Author:** ![Kevin.Collins](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.collins/32/13497_2.png) [@Kevin.Collins](https://forum.inductiveautomation.com/u/Kevin.Collins)\
**Post date:** [October 15, 2018, 11:29am UTC](https://forum.inductiveautomation.com/t/vagrant-based-ignition-development-vm/14873/6 "2018-10-15T11:29:28Z")

</div>

@mario.pereira, I’d definitely be interested in any collaboration efforts! At the moment, the Vagrant solution (which was my first venture into some more efficient [dev-centered] deployment mechanisms probably could use some refactoring. At the very least, the shell-based provisioner should probably be broken out into a separate file that is called from the `Vagrantfile`.

I do also maintain a Docker-based implementation here as well:

> **[thirdgen88/ignition-docker](https://github.com/thirdgen88/ignition-docker)**
>
> Ignition Docker Development Environment. Contribute to thirdgen88/ignition-docker development by creating an account on GitHub.

… which is auto-built to Docker Hub:  
[https://store.docker.com/community/images/kcollins/ignition](https://store.docker.com/community/images/kcollins/ignition)

The Docker solution is where I’m focusing efforts more nowadays. I hope to provide some example Docker Compose setups as we get into the holidays to help folks create more complex dev deployments (with a database sidecar container as a simple example). Hopefully you can take a peek at things and turn on some light bulbs.

---

<div class="post-metadata">

**Author:** ![mario.pereira](https://avatars.discourse-cdn.com/v4/letter/m/5f8ce5/32.png) [@mario.pereira](https://forum.inductiveautomation.com/u/mario.pereira)\
**Post date:** [October 15, 2018, 11:59am UTC](https://forum.inductiveautomation.com/t/vagrant-based-ignition-development-vm/14873/7 "2018-10-15T11:59:25Z")

</div>

Cool,

I am looking at docker part too. I am not even looking at it as Dev, but as production. There are companies doing edge/IoT computing with Kubernetes.

Example: [https://medium.com/@cfatechblog/bare-metal-k8s-clustering-at-chick-fil-a-scale-7b0607bd3541](https://medium.com/@cfatechblog/bare-metal-k8s-clustering-at-chick-fil-a-scale-7b0607bd3541) and [https://medium.com/@cfatechblog/edge-computing-at-chick-fil-a-7d67242675e2](https://medium.com/@cfatechblog/edge-computing-at-chick-fil-a-7d67242675e2)

---

<div class="post-metadata">

**Author:** ![Kevin.Collins](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.collins/32/13497_2.png) [@Kevin.Collins](https://forum.inductiveautomation.com/u/Kevin.Collins)\
**Post date:** [October 19, 2018, 4:18am UTC](https://forum.inductiveautomation.com/t/vagrant-based-ignition-development-vm/14873/8 "2018-10-19T04:18:53Z")

</div>

For those tracking this, I finally have gone back and given the Vagrant solution a bit of love. Here is the list of recent improvements:

- Broke out provisioning inline script to separate shell script files.
- Changed Java install to be OpenJDK 8 JRE.
- Corrected gateway restore behavior.
- Added environment variable driven configuration.
- Added separate supplemental MySQL provisioning script.
- Updated base gateway to version 7.9.9 with `Ignition-vagrant` gateway name.
- Changed default CPU allocation to 2 from 1.

I like the current setup much more now. I’ve learned quite a bit since the first implementation of this solution in early 2017 (before the Docker stuff). I’ve been toying with multi-machine Vagrant solutions as well (to bring up multiple VM’s). It is more resource intensive than the multi-container solutions w/ Docker but it might still be useful to some folks.

Enjoy!

---

<div class="post-metadata">

**Author:** ![Kevin.Collins](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.collins/32/13497_2.png) [@Kevin.Collins](https://forum.inductiveautomation.com/u/Kevin.Collins)\
**Post date:** [May 1, 2019, 1:43am UTC](https://forum.inductiveautomation.com/t/vagrant-based-ignition-development-vm/14873/9 "2019-05-01T01:43:49Z")

</div>

Updated for Ignition 8.0.0!
