Yea, I've played with Dokku and it seems pretty well done. However, lately, I've been playing around with Portainer on side projects and I feel like it is a decent option. There really are three parts with it. We have the cloud formation step, the continuous deployment and application monitoring (scaling included). So far, it seems like AWS App Runner is the most "flexible" option that would rival Heroku. I do like Beanstalk, but will probably go with App Runner for my next project.
☒ How are you starting the application. I just downloaded the project, ran
bundle install
yarn install
bin/dev
and it started up the application without any issues. If you run the seeds, you may need to add this to various places since I did seed the records initially without the images.
I do agree that it is a layer of additional complexity. However, there are some side benefits for containerization in a production environment. I do agree that it may be overkill, but it can also be nice.
I haven't tested current performance implications, but when Docker was LXC, there was about a 2% performance overhead due to the containerization.
I think that using docker for production use has two main benefits; compilation of the project and auto scaling.
Since we can provide a complete package (the docker image) to the hosting environment, we don't have to wait 2-6 minutes for the deployment to take place. The deployment process should just pull the image and run a container. This kind of plays into the auto scaling. Typically when an autoscaling infrastructure, a new VM would need to be provisioned, set up and the application deployed. This could take 15 minutes or so and the traffic spike could be over by the time the machine is ready. A docker container upscale could be live in under a minute.
That's the approach I take with esbuild and cssbundling. You can check out https://www.github.com/driftingruby/template for what I use with new episodes. This uses jsbundling and cssbundling and installs bootstrap.