I lead a group of engineers in a medium size integration company, working on multiple different ignition projects at once, for different customers, in different environments, on different versions.
Currently for local development we have been spinning up a windows VM for each different gateway our end projects have, and developing off of those. Utilizing locally created memory tag versions of UDTs, and a central SQL Server instance. As you can imagine that starts to really add up, when you have 5 different gateways running and 4 different edge gateways, just for development.
Is this the standard for groups in situations like ours? I have thought about taking smaller projects and putting them all on one gateway, and leaving our enterprise level (multi-location) projects on their own gateways.
It may be worth looking into Docker - itâs a lighter weight way to run multiple, separated instances of applications, compared to VMs. Generally speaking, youâll have the best experience running it on a Linux host (which can, itself, be a virtual machine, in a real ânesting-dollâ type of situation). Once youâve got Docker, I highly recommend using a GUI frontend like portainer to manage your actual containers. You can also pull down community-created Ignition templates: https://hub.docker.com/r/kcollins/ignition (at some point, we would like to have official Ignition docker images published, but no timeline on that).
You can even run database instances in separate docker containers, and easily wipe their data/reset them as needed.
Thereâs some startup cost, but (in my opinion) itâs easily worth it. Iâm using an Ubuntu workstation, and I have at least 5 docker containers running all the time - two databases, a few Ignition instances on different versions, etc. Thatâs just for personal use - if youâve got a beefy server, you can easily scale that to multiple users.
I run separate VMs for every customer gateway, configured with identical networking on dedicated VLANs. It makes dropping a customer backup into my dev environment a trivial task. Some of the databases are shared, with multiple VLAN interfaces. Other DBs are isolated. All of those VMs are hosted in my office server (Ubuntu) that has gobs of storage and RAM. I also maintain VMs on my laptop (Kubuntu) with specific versions of Ignition for module testing. Also on VLANs in the laptop, some of which are bridged to the office VLANs (for all the PLCs in my lab).
Another vote for Docker + Portainer here. Kevin Collins has done a fantastic job setting things up, including great documentation. We routinely run over 20 Docker containers on our Debian server with multiple databases (including SQL Server!) and multiple Ignition systems (and hosting our own map tile server and our own website and public facing database systems and more!).
In our experience Docker containers are vastly better than VMs: lighter, quicker to set up and faster to start and stop. No downsides really.
Mostly startup in terms of âtime investment to get used to the features and what Docker can (and canât) doâ. It looks like youâre mostly a Windows shop, just based on the original post, and Linux environments can be less friendly to get used to if youâre more familiar with GUI setups. Pretty much everything in Docker is done through the command line (which is why I recommend Portainer; ainât nobody got time to memorize every docker command and flag) - but itâs also pretty easy to just google how to do whatever youâre trying - and an advantage to docker and portainer is that once itâs set up on a linux host, you likely wonât ever really need to do anything to that linux host.
Another alternative that could possibly be lighter than Docker for a linux environment is using LXC. Iâve been utilizing the Proxmox distribution for that at home. With some effort you can also add in the ability to run Docker on top. But for just Ignition, the basic LXC environment that Proxmox supplies should be good enough.
On the other hand, if you donât need to completely separate Gateways, with some planning you can have multiple projects running on one gateway. This supposes that you donât install multiple versions of the gateway since if you update the gateway, you then are required to update all of your clients before you could send any updates to them. Project backups will not install on an older gateway then what the were produced on, unless you muck with the XML (which is not particularly safe).
What I have done here with the limited number of projects weâve done so far, is to:
Any Tag Data Types defined go under a path that includes the customer and job identifications
Any Defined Tags also go under a path that includes the customer and job identifications.
Any Projects Include the Job Identification
We have installed the EthernetIP Class 1 Communications Module from Automation Professionals to aid with providing âvirtualâ tags when the PLCâs go away. I have found that way to be better than the effort of defining Memory tags shadowing the PLC tags. I only recommend that if you have a limited number of gateways, since the cost would be prohibitive for doing that for lots of development gateways.
Most Tags are accessed as Indirect Tags with the Base Path to the Tags defined from a client tag. This allows the base of the tags to be whatever the client wants at install time and still be compatible with what is on your dev gateway. This doesnât work very well for the gateway and client tag scripts which is unfortunate but hasnât been a big problem. That also doesnât work well for SQLBridge which we havenât utilized much.
I often get the feeling that my way of doing things was not expected by the Ignition design team. Which strongly suggests that it might not be the best way of course
Anyway, hope this gives you some ideas going forward.
Bill
In a pinch, you can set up one instance of Ignition with my module and point other gateways at it with the v21+ Logix driver.... And when it is time to deploy, you just change the IP address and/or processor slot. (:
Since that is passive mode, you can emulate 100 different PLCs simultaneously (with sufficient horsepower, of course).