Designing Your SaaS App to be Self-Hostable — Part 2

Importance of Repeatable Environments

Dan Pastori

March 20th, 2026

Disposable, repeatable environments from development to production is something we are extremely passionate about. It becomes even more important when you are designing a self-hostable app. Let's understand why.

Where and how is your app running?

If you work at a company, you might be issued a computer. Or you might have a choice for which type of machine you want, Windows, Mac, Linux, etc. Guess what. All of those computers will run your app differently.

It gets better. What version of the programming language do each of your employees or co-workers have? You pull the latest update of a language and it introduces some really sweet upgrades. You push the code. A co-worker pulls the code, they are running an older version, there are errors.

Even worse, you push your new code in a hot fix to production and it's running the outdated language on a different OS than you developed on. Well... You have more bugs.

Next level, you make your app self-hostable. You have literally no control on where your app will run. Someoneon's Synology, an enterprise data center, a Raspberry Pi. All with different operating systems and versions. This is a nightmare.

So what can you do?

Controlling Your Infrastructure with Docker

When we develop an app, we do EVERYTHING with Docker. Our development environments are run with Spin which is a "syntax sugar" on Docker Compose. We made our own Docker container for PHP to standardize how it's run. Everything is disposable and repeatable.

I know when I push code and Jay pulls it down on his local machine, he is getting the code to operate the exact way that I wrote it. Node and PHP versions are the same. It's running the same OS. The amount of headaches and unexpected bug fixes are gone.

There are so many advantages to Docker and it works across all languages and platforms. If you want to pull in some cool new technology into your app, you can configure it through your Docker file and have it up and running when you bring your app up.

If having standardized development environments isn't exciting enough, you can ensure your app will run the same in production no matter what platform it's deployed to. This is why we choose Docker when designing our self-hostable applications.

If someone purchases your app and wants to run it on their own hardware, the amount of support tickets and configuration help is dramatically decreased.

Learning Curve for Docker

There are a few moving parts with Docker that present a little bit of a learning curve. You have to have the Docker engine installed on your computer for development and you have to think about configuring your servers through YML files and code then actual spinning up a VM or bare metal machine.

It took me awhile to grasp what was happening when I first started using Docker. However, once it clicks, there's no going back. I'm super stoked that Jay is very well versed and was able to get our machines set up correctly, but after using it for some time it starts to make a heck of a lot more sense.

Once you get your machine set up you can simply control your server version, programming language version and dependencies all through your Docker config file. Your app will run the same whether it's on development or production.

Getting Help with Docker

If you are interested in designing a self-hostable app or have questions about setting up your machine to use Docker, definitely reach out. It's such an important piece of the puzzle and will save a ton of headaches as you begin to design your self hostable application. We are proud of our PHP Docker image and Spin, but if you use Node, Rails, Python, etc. no worries, there's a Docker image for every language!

Want to work together?

Professional developers choose Server Side Up to ship quality applications without surrendering control. Explore our tools and resources or work directly with us.

Join our community

We're a community of 3,000+ members help each other level up our development skills.

Platinum Sponsors

Active Discord Members

We help each other through the challenges and share our knowledge when we learn something cool.

Stars on GitHub

Our community is active and growing.

Newsletter Subscribers

We send periodic updates what we're learning and what new tools are available. No spam. No BS.

Sign up for our newsletter

Be the first to know about our latest releases and product updates.

    Privacy first. No spam. No sharing. Just updates.