At this moment I'm using a VPS (Windows server 2016 with SQL Server 2016) for my websites. My "deployment" is with FTP, I publish my project in Visual Studio, transfer this with my FTP program to my VPS and that's it. In many cases, something goes wrong and I have to search for the problem.
I'm looking at solutions that makes this a lot easier (Azure, Umbraco Cloud) but it's more expensive than my monthly cost for my VPS.
Do any of you got experience with continuous integration and delivery on a VPS or Azure? And if you want to compare these solutions, what's the best one in your opinion? At the moment I only got 11 simple sites running on my VPS.
I love CI/CD flows for the exact reason you mention. I'm very good at deployments, but if I do enough manual deploys, I'll screw up an unacceptably high percentage. Humans aren't particularly good at repetition, but computers are. Hence CI/CD.
I've deployed solutions through a CI/CD process to VPS's, Azure and other PAAS, but not Umbraco Cloud. The environment that you deploy to really doesn't make much of a difference once your CI/CD process is stable. The critical part though is the environment(s) where you run your CI/CD process and where your code comes from.
It's important to have a good separation of concerns. CI and CD are different beasts. The best flows will use CI processes to deploy into a staging environment for testing, then do a deployment into prod once it passes some tests. The danger of CD direct to prod is that if you muck something up, you just deployed a bug to prod.
Have you thought through how you'll do your CI/CD flow? I'm a big fan of Jenkins, MS Build and some Bash. Docker/Kubernetes makes things faster, but I'm not a big fan of Docker in prod. And I've never worked with Kubernetes on Windows at scale, so it might be a nightmare.
Let me know what kind of tools you're looking at. If I have more specific advice, I'll try to help you.
I'm rather new to CI and CD, just have soms experience with the "basic setups". At the moment I will buy a second VPS for staging. My workflow would be developing locally in Visual Studio 2017 - VSTS - CI/CD in VSTS to my staging VPS and if the staging website is successfully tested, publish it to production.
No experience with Jenkins, Docker or Kubernetes...
What's the best way in your opinion? With different VPS setup or Azure?
Sounds like you've got a pretty good flow planned out already. Good work!
As for the Azure versus VPS, honestly, it depends on a whole lot of variables. One variable that I would look at is what are the odds that one (or all) of your sites will have to rapidly scale up? If the odds are high, Azure will save you some headaches and most likely money in the long run. One caveat though is that in Azure's web app service, all of your media will be stored and shared by every instance of your app. As you start to scale, increased I/O will bog down this shared drive, so when you start to scale, you'll likely want to store your static files elsewhere. This will completely change your application's cost structure, so if you're trying to build a high growth startup, be careful not to project your costs too far into the future based on current cost. If you're raising funds, a surefire way to alienate investors is to show that you have no capacity to project your costs.
You also have to think about cost. Azure is nice because you only pay what you use (if you're diligent), but if you're not careful, your bills can get quite obscene.
And finally, don't forget that Azure also offers a VPS service of their own. It wouldn't be a bad idea to look into that and compare costs.
One other note. The most important part of a flow from staging to production is that you have to be 100% sure that you're deploying the same code. If you use NPM extensively, be really careful since (unless you've crippled npm via a conservative package.json) whenever you run npm install/update, there is a chance that you're downloading new code. Because of this, when I deploy to staging, I like to check absolutely everything including node_modules into Git. A lot of people disagree with that, but it is absolutely imperative that you can build the exact same version you have in staging and deploy it to prod. Make sure to find a strategy to guarantee that one to one match, or you'll end up hunting bugs that don't reliably happen across environments.
Edit - By the way, if I were you, I'd forget Jenkins, Docker and Kubernetes. At some point, you may get big enough that you'll need to think about those technologies. But, for now, work on getting the CI/CD flow down and make sure you can deploy the precise same code from staging into prod. Don't complicate it.
Thanks, I'll take a look at Azure but didn't know it was that complex in some cases. Most of my sites are very basic, I've only got two that might have to scale up. It just seems so easy if you follow the tutorials but you're right, if you have to scale up... Umbraco Cloud seems very good but there I get the feeling that I can't set everything right by myself (caching, URL redirects, backups for database and folder, ...).
So I guess the best choice is to buy a new VPS for staging that is similar to my production VPS. Other question that is relevant, does your client have to pay a little percent for this VPS or is this just for your own costs? Hosting for my clients at this moment is around 4,99 EUR/month...
You know though, tutorials and ease of learning would be a good argument in favour of Azure. Figuring CI/CD out and learning to think through it is tough enough. Doing that without good tutorials takes a lot of tinkering and a healthy dose of bravery.
As for billing, when I've consulted, I've always done a daily/weekly rate + a materials/infrastructure charge. Are you saying that you charge 4.99 euros per month per client or do you pay that amount?
I learned CI/CD in a Linux environment. I wanted to learn it really well, so I set up three virtual servers with Vagrant and just worked on project after project until I got it. While the tools were quite different when I started doing CI/CD in a .Net world, the basic ideas were the same. So, I relied upon documentation instead of tutorials.
That said, I'm a big fan of Donovan Brown - not only does he know a ton about devops, but he also races cars. I found a Youtube video he did.
That video uses VS to build an entire CI flow. It's interesting and there aren't as many moving parts as I have in my own CI flow. I might need to rethink how I do things...I'll have to read a little bit about how that works with big teams before I make any judgments.
Good luck with this and if you run into any other problems, I'd be glad to help you out.
Edit - I forgot to answer part of the question. 4.99 a month might be okay, but as you scale up and have more and more clients, keeping those servers running will become a bigger job. If I were you, I'd think about slowly raising my hosting prices, or else raising my day/week rate to compensate for how much time ops will eventually start to eat up. Charging for hosting is always a rough thing to pass along to clients.
For awhile, I used to work really hard to convince my clients to pay their own hosting and pay me a retainer to come in and manage it. It started off great - it gave me a chance to teach my clients about things like code ownership and bus factors. My pitch was easy - I can host it, but if I get hit by a bus, what the hell happens to your application and your company? But, if you host it, if you get hit by a bus, you'll have other things to worry about. :)
I ran into an issue there though where sometimes clients would want to move apps to servers that couldn't possibly accommodate them. Heck, I had a client try to get a big, busy Ruby app off of Heroku and onto a very cheap DigitalOcean box. That was a nightmare. So, in the end, I stuck with charging a monthly fee and just handling stuff myself. If you could find a good way to convince your clients to host their own and pay you a retainer to manage it/vet their decisions, you might be onto a winner.
What's problem did you experience? Have you try to use shared hosting? I use shared hosting to deploy Umbraco and I dont experience any problems. I see that your cost around 4.99 EUR/month, you can also find shared hosting with that budget, for example hostforlife.eu. They are also good and stable hosting.
I host my websites on a VPS too. I use GitHub for my source control, and AppVeyor to delploy new builds for me automatically.
Essentially, AppVeyor sees there has been a commit to master in my GitHub repo, so it pulls the code, does a build, checks that it compiles properly and the unit tests pass, then it deploys it for me using Web Deploy.
You can set up Web Deploy yourself on your VPS so you can publish directly from Visual Studio. This would be a good first step for you, to eliminate the need for FTP.
If you are interested in finding out more about using AppVeyor for CI/CD with Umbraco, then take a look at Steven Harland's post on my blog.
Umbraco hosting for CI and CD
Hi,
At this moment I'm using a VPS (Windows server 2016 with SQL Server 2016) for my websites. My "deployment" is with FTP, I publish my project in Visual Studio, transfer this with my FTP program to my VPS and that's it. In many cases, something goes wrong and I have to search for the problem.
I'm looking at solutions that makes this a lot easier (Azure, Umbraco Cloud) but it's more expensive than my monthly cost for my VPS.
Do any of you got experience with continuous integration and delivery on a VPS or Azure? And if you want to compare these solutions, what's the best one in your opinion? At the moment I only got 11 simple sites running on my VPS.
Kind regards,
Benoit
Good day, Benoit...
I love CI/CD flows for the exact reason you mention. I'm very good at deployments, but if I do enough manual deploys, I'll screw up an unacceptably high percentage. Humans aren't particularly good at repetition, but computers are. Hence CI/CD.
I've deployed solutions through a CI/CD process to VPS's, Azure and other PAAS, but not Umbraco Cloud. The environment that you deploy to really doesn't make much of a difference once your CI/CD process is stable. The critical part though is the environment(s) where you run your CI/CD process and where your code comes from.
It's important to have a good separation of concerns. CI and CD are different beasts. The best flows will use CI processes to deploy into a staging environment for testing, then do a deployment into prod once it passes some tests. The danger of CD direct to prod is that if you muck something up, you just deployed a bug to prod.
Have you thought through how you'll do your CI/CD flow? I'm a big fan of Jenkins, MS Build and some Bash. Docker/Kubernetes makes things faster, but I'm not a big fan of Docker in prod. And I've never worked with Kubernetes on Windows at scale, so it might be a nightmare.
Let me know what kind of tools you're looking at. If I have more specific advice, I'll try to help you.
Hi Greg,
Thanks for your response.
I'm rather new to CI and CD, just have soms experience with the "basic setups". At the moment I will buy a second VPS for staging. My workflow would be developing locally in Visual Studio 2017 - VSTS - CI/CD in VSTS to my staging VPS and if the staging website is successfully tested, publish it to production.
No experience with Jenkins, Docker or Kubernetes...
What's the best way in your opinion? With different VPS setup or Azure?
Kind regards,
Benoit
Hello again, Benoit!
Sounds like you've got a pretty good flow planned out already. Good work!
As for the Azure versus VPS, honestly, it depends on a whole lot of variables. One variable that I would look at is what are the odds that one (or all) of your sites will have to rapidly scale up? If the odds are high, Azure will save you some headaches and most likely money in the long run. One caveat though is that in Azure's web app service, all of your media will be stored and shared by every instance of your app. As you start to scale, increased I/O will bog down this shared drive, so when you start to scale, you'll likely want to store your static files elsewhere. This will completely change your application's cost structure, so if you're trying to build a high growth startup, be careful not to project your costs too far into the future based on current cost. If you're raising funds, a surefire way to alienate investors is to show that you have no capacity to project your costs.
You also have to think about cost. Azure is nice because you only pay what you use (if you're diligent), but if you're not careful, your bills can get quite obscene.
And finally, don't forget that Azure also offers a VPS service of their own. It wouldn't be a bad idea to look into that and compare costs.
One other note. The most important part of a flow from staging to production is that you have to be 100% sure that you're deploying the same code. If you use NPM extensively, be really careful since (unless you've crippled npm via a conservative package.json) whenever you run npm install/update, there is a chance that you're downloading new code. Because of this, when I deploy to staging, I like to check absolutely everything including node_modules into Git. A lot of people disagree with that, but it is absolutely imperative that you can build the exact same version you have in staging and deploy it to prod. Make sure to find a strategy to guarantee that one to one match, or you'll end up hunting bugs that don't reliably happen across environments.
Edit - By the way, if I were you, I'd forget Jenkins, Docker and Kubernetes. At some point, you may get big enough that you'll need to think about those technologies. But, for now, work on getting the CI/CD flow down and make sure you can deploy the precise same code from staging into prod. Don't complicate it.
Greg,
Thanks, I'll take a look at Azure but didn't know it was that complex in some cases. Most of my sites are very basic, I've only got two that might have to scale up. It just seems so easy if you follow the tutorials but you're right, if you have to scale up... Umbraco Cloud seems very good but there I get the feeling that I can't set everything right by myself (caching, URL redirects, backups for database and folder, ...).
So I guess the best choice is to buy a new VPS for staging that is similar to my production VPS. Other question that is relevant, does your client have to pay a little percent for this VPS or is this just for your own costs? Hosting for my clients at this moment is around 4,99 EUR/month...
You know though, tutorials and ease of learning would be a good argument in favour of Azure. Figuring CI/CD out and learning to think through it is tough enough. Doing that without good tutorials takes a lot of tinkering and a healthy dose of bravery.
As for billing, when I've consulted, I've always done a daily/weekly rate + a materials/infrastructure charge. Are you saying that you charge 4.99 euros per month per client or do you pay that amount?
Greg,
I'm charging my clients 4.99 per month.
Any ideas for tutorials? YouTube or MVA? Yes, 4.99 EUR/month at the moment...
Hello again, Benoit...
I learned CI/CD in a Linux environment. I wanted to learn it really well, so I set up three virtual servers with Vagrant and just worked on project after project until I got it. While the tools were quite different when I started doing CI/CD in a .Net world, the basic ideas were the same. So, I relied upon documentation instead of tutorials.
That said, I'm a big fan of Donovan Brown - not only does he know a ton about devops, but he also races cars. I found a Youtube video he did.
https://www.youtube.com/watch?v=JhSG7Jbds7I
That video uses VS to build an entire CI flow. It's interesting and there aren't as many moving parts as I have in my own CI flow. I might need to rethink how I do things...I'll have to read a little bit about how that works with big teams before I make any judgments.
Good luck with this and if you run into any other problems, I'd be glad to help you out.
Edit - I forgot to answer part of the question. 4.99 a month might be okay, but as you scale up and have more and more clients, keeping those servers running will become a bigger job. If I were you, I'd think about slowly raising my hosting prices, or else raising my day/week rate to compensate for how much time ops will eventually start to eat up. Charging for hosting is always a rough thing to pass along to clients.
For awhile, I used to work really hard to convince my clients to pay their own hosting and pay me a retainer to come in and manage it. It started off great - it gave me a chance to teach my clients about things like code ownership and bus factors. My pitch was easy - I can host it, but if I get hit by a bus, what the hell happens to your application and your company? But, if you host it, if you get hit by a bus, you'll have other things to worry about. :)
I ran into an issue there though where sometimes clients would want to move apps to servers that couldn't possibly accommodate them. Heck, I had a client try to get a big, busy Ruby app off of Heroku and onto a very cheap DigitalOcean box. That was a nightmare. So, in the end, I stuck with charging a monthly fee and just handling stuff myself. If you could find a good way to convince your clients to host their own and pay you a retainer to manage it/vet their decisions, you might be onto a winner.
Hi Benoit,
What's problem did you experience? Have you try to use shared hosting? I use shared hosting to deploy Umbraco and I dont experience any problems. I see that your cost around 4.99 EUR/month, you can also find shared hosting with that budget, for example hostforlife.eu. They are also good and stable hosting.
Hi Benoit
I host my websites on a VPS too. I use GitHub for my source control, and AppVeyor to delploy new builds for me automatically.
Essentially, AppVeyor sees there has been a commit to master in my GitHub repo, so it pulls the code, does a build, checks that it compiles properly and the unit tests pass, then it deploys it for me using Web Deploy.
You can set up Web Deploy yourself on your VPS so you can publish directly from Visual Studio. This would be a good first step for you, to eliminate the need for FTP.
If you are interested in finding out more about using AppVeyor for CI/CD with Umbraco, then take a look at Steven Harland's post on my blog.
https://codeshare.co.uk/blog/how-to-set-up-continuous-deployment-for-mvc-and-umbraco-using-appveyor/
Kind regards
Paul
Hi Paul,
Any idea what price plan should be relevant?
Kind regards,
Benoit
I've got the Pro plan I think, if you want more than one project I would go for the pro plan, but why not do the free trial first.
Once you get your head around Web Deploy working on your VPS, it opens you up to many different solutions.
Great, I'll have a look at it. Thanks!
Paul,
Can you give me more info about what you're price is for your customers?
is working on a reply...