Don't worry about complex package management systems, or what environment a consumer of your program might have.
Just give them a copy of your environment: it will always work in the future."
I'm not convinced that a virtual machine snapshot is an adequate replacement for wrestling with a package manager. If all you distribute is a VM image, then:
- Users can't easily run your software without provisioning an entire virtual server and, as far as I can tell, giving Terminal money and their email address.
- Without active maintenance on your part, the other software on the image will get out of date. Security holes will be discovered in the versions of nginx and openssl that your image uses. Have you ever tried to upgrade a Linux box that hasn't been touched in a few years to the latest version? After a few years, every potential user of your software will have to go through that first.
- If Terminal goes out of business or pivots, your image will no longer work (I think?).
- Your software will not fit naturally into your users' deployment environments. It will not by default show up in their administration tools, know about their VPNs, integrate with their logging infrastructure, or appear on their graphs.
I think this makes a lot of sense as a low-friction way to distribute software, but if you're writing code that people will care about in a few years it shouldn't be the only way.