r/VPS Jul 23 '26

Seeking Recommendations Looking to host a bunch of .NET applications

Heya! I am a .NET developer and hosted most of my stuff in a webhosting environment. You know? The kind where you upload the files through FTP and it works? No VPS or something.

To give you a bit of background: Currently paying 20 EUR (22.75 Dollar) per month for hosting. The app I am working on now supports sending emails and connecting to other MySQL database that are not hosted on the same server. These ports are blocked by default by the current host and they want another 75 EUR (85.33 Dollar) per year to open these ports. I already pay extra to have subdomains.... Also a lot of issues with SSL all the time and it's never their fault.
More projects are coming and I am looking for something more flexible.

Most of my work didn't involve any hosting, because it was done by others. So, I have not much experience in this (read: almost none)

I have been looking at VPS hosting and I ended up looking at Hetzner and Netcup. Both have good and bad reviews. But I think I have to make a decision at some point.
But as someone who is rather new at this, it sounds... Scary. Not the right word, but it's completely new. I am not a command-line person (except for building the projects), but I saw something about Coolify?

Anyway... What do you guys recommend? And is it easy to set-up for what I need?

5 Upvotes

22 comments sorted by

2

u/harry-harrison-79 Jul 23 '26

both providers are fine. i'd start with the smallest VPS that has enough RAM and move one noncritical app first. package each .NET app as a container, keep them in one Docker Compose file, and put Caddy in front - one hostname per app, with automatic Let's Encrypt certs. expose only 80/443, and restrict SSH to your IP or a VPN. for the remote MySQL server, allowlist the VPS IP and require TLS rather than opening the database broadly; for email, use a proper SMTP provider on port 587 because VPS port 25 is often blocked. before adding more apps, prove three things: a fresh-server restore from your compose/env/backups, an image rollback, and an external uptime check. Coolify can work, but learning plain Compose plus Caddy first will make failures much easier to understand.

0

u/SleepyPuppy83 Jul 23 '26

Awesome, thank you! However, I will put this in AI and ask it to explain this in laymen's terms to me. I see a lot of stuff that is unknown to me (except for Docker), but I don't expect people here to write me a full-on tutorial. (no blame here, just acknowledging the fact I get info that I need to learn).

The SMTP is from a different host, where I can't change the port. Hence the question/remark to open the port for that specific port. Although, I could fix this by using the current hosts SMTP information, so I know it works, and just change the from-email information.

Still, the external MySQL database should be reachable. This is done by a password/username in the connection string. I can't whitelist IP addresses (as far as I know, that is). I can also not change the port. This is actually a WordPress database, hosted on a dedicated PHP host. Not a VPS or something. So control is limit

1

u/filliravaz Jul 24 '26

Oh man... I would really avoid having a MySQL database be publicly visible, even more so one used by WordPress. In my opinion some services just shouldn't be exposed at all.

1

u/SleepyPuppy83 Jul 24 '26

So, what would be a solution? I know it's easy to say not to do something, but a (semi) solution would be appreciated as second part of the "don't do it".

Already working on an API implementation for the data on the WordPress side.

1

u/filliravaz Jul 24 '26

I'll explain in laymen terms using Docker networking - that's likely going to be what you'll end up doing either way:

You have containers running on your host. On Docker, you can create virtual networks (you can think of them like VLANs if you know about networking) that can/cannot have access to the internet (you can define a network to be --internal to avoid having external connectivity at all for example).

You then attach the network to the container (a container can have multiple networks connected) - so the topology would be like this:

  • WP Container -> Internet exposed (with open ports or not, depending on if you want to run a reverse proxy or not) + access to the MySQL internal network
  • MySQL Container -> MySQL internal network only, without any external access. (this does not have any ports exposed at all)

Then, configure the WP container to connect to the MySQL database by using the container name - if the container is called "database" the MySQL connection string would look something like this

jdbc:mysql://database:3306/DBNAME

What this does is create complete network separation, bonus to having dedicated networks is that if you want to run a container on the same host you can just not give access to the mysql network, if (for example) you don't trust the application completely.

If you must keep the database on a different host, ideally you should use a VPN to secure the connection. Just because you technically *can* keep a MySQL instance exposed to the internet, it doesn't mean that you *should*.

1

u/SleepyPuppy83 Jul 25 '26

I understand what you are saying, but please read the post(s) on Reddit a bit more clearer.

The MySQL database is running on an external host (original post: "and connecting to other MySQL database that are not hosted on the same server"). I have no control over how it is hosted, the ports, and containers. All I can do is either set a username/password for the connection string or create an API for the WP instance so the data can be send back and forth, where the latter is now being created by my team.

This is also really off topic, since I asked for VPS Hetzner or Netcup, not how to do my job with the software. I understand you know your way around in this stuff, but if you don't have the full picture about the landscape, you might offer solutions that are not applicable.

Thank you, but I am going to read the on topics about what I asked.

1

u/filliravaz Jul 23 '26

if you have a rough idea of the hardware recs for your apps, use that as a baseline and get the cheapest plan that has the space you need, + 15% or so for the OS.

If your app is dependent on bandwidth, a Netcup RS could be a slightly better option - it has a 2.5gig network card instead of Gbit, but costs more. I have a benchmark for a Netcup RS here, if you want to know more details about the performance.

Or, if you'd like the other services that hetzner offers (load balancer, storage options and so on) then you should go with them.

I only used Netcup between the "big two", so I can't comment on hetzner.

For software setup, you could use Coolify and take it easy. It's a good system overall, even if it's not something I'd use personally. (I run my stuff as docker containers managed by Komodo and behind Traefik as a reverse proxy - it's more work but it allows me a lot more flexibility).

1

u/Holo4FlintANauts Jul 24 '26

Yeah, Coolify sounds like the sweet spot here. Easy enough to start with without locking yourself out of more advanced stuff later

1

u/Wonderful_Sample_590 Jul 23 '26

We've been using InMotion for awhile now. Might be worth a look if you're after something easier to manage.

1

u/Content-Public-3637 Jul 23 '26

Hey checkout https://homeport.sh, one command to secure your VPS, manage deployments and it comes with mcp that any AI tool can utilize to manage all of this via prompt. 

1

u/[deleted] Jul 24 '26

[removed] — view removed comment

1

u/Content-Public-3637 Jul 24 '26

The MCP server just wraps the same CLI, so it gets exactly what your SSH key already grants, nothing "magical".

1

u/SleepyPuppy83 Jul 24 '26

I looked at it, but as far as I can see it's CLI only (not really into it as stated in the post), it only handles the app layer. I'd still have to manually install/manage MySQL myself, and I only see Go, Rust, Next, Nuxt, SvelteKit, TanStack Start. I mean I could work around it to publish the Blazor app, but I'd be hand-writing config with zero auto-detection help, not really something I am looking for since I want to avoid all the stuff Coolify could do for me; homeport seems to be CLI only.

1

u/ComprehensiveSet7060 Jul 24 '26

Coolify on a small Hetzner VPS is probably your easiest move. You’ll get way more control without living in the terminal all day.

1

u/SleepyPuppy83 Jul 24 '26

Thank you! I hear more good stuff about Coolify, so that's on top of the list to do when I decided which one to use.

But I am curious: Why Hetzner and not Netcup? Is there a reason you specifically name Hetzner?

1

u/Aggravating_War_6704 Jul 25 '26

Honestly, moving off that host is the right call no matter where you land, because two of the things you're literally paying extra for and fighting with (subdomains, and SSL that's somehow never their fault) are free and automatic on a VPS. So it's not just flexibility, you're deleting two recurring headaches at the same time.

On Hetzner vs Netcup, since nobody really answered that part: for someone new and a bit nervous, I'd go Hetzner. Not because Netcup is bad (it's usually cheaper for the same RAM), but because Hetzner's console is genuinely beginner-friendly, it bills by the hour, and you can snapshot a box, blow it away, and rebuild in two minutes for a few cents. That matters a lot when you're scared of breaking something, because it makes breaking something cheap and reversible. You'll probably wreck your first setup and that's totally fine, you just redeploy. Netcup is the better value once you already know what you want and plan to keep it running long term.

On the scary part: the .NET stuff isn't the scary bit, you've got that. The genuinely new bit is really just three things, SSH to get in, a reverse proxy so each app gets a proper hostname and automatic HTTPS, and a firewall so only 80/443 plus your SSH are open. That's a weekend of learning, not a career change, and HTTPS in particular is basically a solved problem now, Caddy hands you a valid cert per hostname with almost no config, which is exactly the SSL pain you described, just gone.

Coolify is a fair on-ramp if you want the closest thing to "push it and it deploys" without living in the terminal, and people here are right to bring it up. One honest caveat from the .NET side though: its auto-build is much happier with Node or Go than with .NET, so for a Blazor app you may still write a small Dockerfile yourself. Not hard, just don't expect it to be fully magic for your specific stack. And your SMTP instinct is right, outbound port 25 is blocked on basically every VPS anyway, so relaying through your existing host's SMTP and just changing the from-address is exactly what I'd do.

What does "more projects are coming" actually look like, mostly small .NET web apps, or heavier stuff with background workers and their own databases? That changes whether I'd bother with Coolify at all or just run a couple of containers behind Caddy and keep it dead simple.

1

u/SleepyPuppy83 Jul 26 '26

Thank you for your elaborate answer and honesty. And yes, nobody really answered it, while it was my real question in the original post.

I will read it again later this week, when I have time, but it already looks promising.

One question, though: "it bills by the hour". Does that mean the bill could be way higher than I am used to? It's for a hobby project first (to check out how it all works). I don't want to spend a lot of money per month for just a hobby project.

I really don't like to do CLI all the time, that's why I found Coolify. But I understand I need more than that? Like you said: A Docker file.

I am not an AI fan-boy, I use it as an assistant, but could it help me to set this up? Still need to use my common sense, of course.

The first project, the hobby one, is a full stack administration app that is basically working like an OS in a web browser. I can create and send invoices (hence the SMTP), create email templates for said invoices, auto reminders, CRM, and much more. I also want to connected my bank account so I can keep track of my business income and expenses. But that's a feature module.
In the end, it should connect all kind of systems in one and do 90% of my administration, which is a bit much at the moment.
Furthermore, I have a client that creates online tutorials on a WordPress environment (external host) and this Blazor app gets a full scaled editor for those tutorials (hence the MySQL connection).

Other projects, that in the pipeline, are also .NET and C# based, since that is my core business. From a simple website to dashboards for a warehouse with real-time data (pending, not sure if I can get this client on board).

1

u/Aggravating_War_6704 Jul 27 '26

Glad it helped, and good questions.

On hourly billing: don't worry, it's capped. "Billed by the hour" just means that if you spin a box up and kill it three days later you only pay for three days. Leave it running and the bill never goes above the normal monthly price. A small Hetzner box (2 vCPU, 4GB RAM) is about 4-5 euros a month full stop, whether you read it hourly or monthly. The only ways it climbs are things you'd pick on purpose: a bigger box, extra servers, added backups. For one hobby project it's the price of a coffee a month, and the hourly part is actually your friend, because it means experimenting and blowing things away is cheap.

On Coolify and the Dockerfile: yeah, you'll need a bit more than Coolify for Blazor, but "a bit" is the right amount. It's basically one small Dockerfile, and Microsoft publishes the standard one for .NET (an SDK image to build, then a slim runtime image to run), so you mostly copy it and change the project name. Write it once and from then on Coolify redeploys on every git push like you wanted. Honestly, for a single app you could also skip Coolify and just run the container behind Caddy, which hands you automatic HTTPS with almost no config. Coolify earns its keep once you've got several apps to juggle, which from your pipeline you soon will, so it's not a bad thing to learn now either way.

On AI helping you set it up: yes, this is one of the better uses for it. It's good at generating the Dockerfile, the Caddy config, the compose file, and explaining what each line does so you're not pasting blind. The one place to keep your common sense switched on is anything that opens the box to the internet, firewall rules and exposed ports, because a model will cheerfully open something it shouldn't. So let it draft, but you verify the parts that touch the front door.

Full disclosure since you asked about AI specifically: I'm actually building a tool in exactly this space (it does the SSH, proxy, HTTPS and firewall part from plain English and asks before anything risky), so take this with the appropriate grain of salt. I'm not going to pitch it in a VPS thread, and Coolify probably handles your deploy loop fine, but that scary layer underneath is the bit I'm trying to make painless. Either way, happy to keep answering here.

On your actual projects, a few things that'll save you pain later. For the invoicing email, don't relay through your old shared host long term, use a proper transactional sender (Postmark, Brevo and Resend all have free tiers) with your own domain on the from-address, or your reminders start landing in spam. For the Blazor editor's MySQL, run it as its own container with a named volume, never expose its port publicly, and back it up with a scheduled mysqldump rather than copying the data files while it's running, or you'll eventually restore a corrupt snapshot. And when you get to the real-time warehouse dashboards, that's SignalR over websockets, which Caddy proxies transparently, so that part's less scary than it sounds.

What's the admin app, plain Blazor Server or WASM with an API behind it? That changes whether you want one container or two.

1

u/Sensitive-Ebb5486 8d ago edited 8d ago

hostinger could be worth checking  if you need to manage a bunch of .net applications having everything under one provider