These days there are a number of ways you can setup your infrastructure. Not only do you have different providers to choose from, but also getting your basic processes running within your tech stack can quickly get overwhelming (especially if you are security conscious, and have a lot of moving parts).
Providers:
Infrastructure Graph:
Deployments:
This is more of an infrastructure technical stack question rather than individual app technical stack. Personally, with my current project I'm going for as minimal as possible production ready infrastructure that is both secure and gets what I need done. This includes taking advantage of existing cloud services that are free such as:
This is my initial "staging" "dev" setup. I'm actively working on playing around with terraform.
What are your thoughts? What kind of setup/deployment strategy do you use?
Honestly, drag and drop to a CDN/static/S3 also works fine! Manually SSH deployments and all. If you're starting out, no sense and overengineering before you've got something usable
I use a herokuish like workflow where I git push to a remote and it uses buildpacks to build and deploy my app to a kubernetes cluster.
This is the premise behind my product I am building to compete with Heroku, https://primcloud.com
I'll be honest based on previous threads on this topic I feel like I'm in the minority of not really having much in the way of deployment infrastructure.
I have hosts on Linode running my application via systemd services and my Angular app is served by Apache. I've also got Cloudflare in front of the web app.
I use BitBucket cloud for source control.
When it comes to deployment, I have SSH keys set up and a couple of shell scripts to build, upload, backup, and then restart the specific backend service or frontend app I'm deploying.
Then I just have a manual regression test plan that I run through to confirm application functionality which only takes about two minutes to complete validation.
It's simple but it works and it means I haven't spent a lot of time on engineering bling at this point instead of actually working on bringing my project to market.
Simple works a lot better IMHO when you are just working on getting the project out there. Bonus: work with what you know from memory works a lot better instead of having to spend time digging through documentation
It also doesn't hurt that it's cheaper! It's easy to start racking up some real costs when you go down the rabbit hole of over-engineering a solution for an idea that doesn't even have (paying, or any) users yet.
I also use a heroku-ish workflow where a
git pushdeploys to a $10 Digital Ocean droplet running Piku. Because Piku is very lightweight you can run a large number of projects (Indie Hacker product experiments) on a single box. I've got 22 running on my one droplet at the moment.Quite like this ^ makes it nice to play around with existing droplets and get things going within a PaaS
I'm personally using Dokku hosted on a Digital Ocean droplet. It's very easy to install since it's a one-click app and it has a lot of plugins that make things like SSL or DB with backups really easy to setup. It certainly does the job at the beginning, once I'll gain traction I'll think about moving to a more robust solution 😉
Setting up hosting and deployment infrastructure can be quite time-consuming and take focus away from building product.
Server and deployment management is what I'm trying help simplify with my app Cleaver. We're still a bit early on and haven't rounded out everything quite yet, but should be a great start for anyone who wants to ride along and help navigate.
If you are just starting off, I think Heroku + Github Actions will keep sanity imo. For DBs, AWS RDS or Heroku's postgres offerings would be good. If it is frontend only application, Netlify/Vercel should something you should look for. People also suggest using Firebase as a primary DB, but I've not used that :)
Where I work at this stack works decently for us:
Cloud:
Database and storage:
Infra Management:
CI/CD:
I'm finding that terraform is a great way to manage things. Thus far my experience with it has been pleasant and relatively straightforward
Yes! Terraform has been a life (and money) saver for us when we spin up GPU EC2 Instances. What took 20 minutes to setup manually, we brought down to 2 minutes using Terraform. Our Machine Learning infrastructure is way simplified now.
Github and Heroku.
Firebase take all that for you. The hosting is serve as CDN and it implements different technics to deliver, there is no need of load balance, and the functions get balanced and scaled automatically by them. The deploy is also one command thing
Netlify or Digital Ocean, depending on the project.
It's slightly more expensive than using something static like Digitalocean droplets but have saved me multiple times when some user-generated content got viral since GKE autoscales capacity.
As for the software stack, here's whats powers QuizMe:
I have a mostly–immutable blue/green deployment system set up with Terraform and Packer on DigitalOcean.
The actual infrastructure is a load balancer running nginx and 1–2 application servers (one for each “color”). TL;DR on every deploy, Packer builds a new image for the staging color, then Terraform creates a new application server using that image and updates the nginx configuration to point to it. Then I can spin down the other application server whenever I want, and on the next deploy the same process happens for the opposite color. I track which color is live using a tag on the load balancer.
This is all run locally; I haven’t set up continuous integration or anything. The whole set up costs $10/mo for the load balancer + application server and 1.4 cents per deploy.
We use these 3 extensively.
No, terraform or config management. (Mostly we haven't yet reached that level).
All the systemd configs, packages, installation steps are stored in repo.
On a similar note, we shared our awesome-resources https://github.com/HorizonTechnologies/awesome-resources
This comment was deleted 6 years ago