UpCloud
Effortless global cloud infrastructure for SMBs
Introducing
If you’re interested in what we have to offer, contact sales or fill out a contact form.
Our support live chat is available for our customers 24/7. You can also email our support team.
Send us an email to give feedback or to say hello.
Start a new journey
Why Partner with UpCloud?
I’ve been passionate about the hosting industry since 2001. Before founding UpCloud, my first company grew to become one of Finland’s largest shared web hosting providers, serving over 30,000 customers. Along the way, I faced the same challenges many of you know well—24/7 on-call responsibilities, solving technical issues, and managing customer inquiries.
At UpCloud, we’ve designed a platform that solves these challenges, offering reliability, scalability, and unparalleled support. We understand the pressures you face because we’ve been there too. Partner with us, and let’s help you focus on growing your business while we handle the rest.
Sincerely, Joel Pihlajamaa CTO, Founder
Login
Sign up
Updated on 24.6.2025
It’s no surprise that you can host ASP.NET Core apps at UpCloud, but let’s see a concrete example: how would you host an app using the open-source CMS Orchard Core?
If you’re a .NET web developer, you most possibly do your work built on ASP.NET Core. And if you do that, it’s useful to go one step further so you don’t have to reinvent the wheel for each project, and use Orchard Core too.
Orchard extends ASP.NET Core with developer-level features (like data access, localization, logging, multi-tenancy…) and user facing ones, centered mostly around content management (content/user/media management, workflows, audit trail…). This provides a good foundation to build your app on, because you get all the basic stuff for free. While Orchard Core is much more than a CMS, if we look at it in this way, it’s actually the most popular open-source .NET one! If you count GitHub stars, that is. Cherry picking data is fun! (But according to open-source activity metrics, it’s always among the top .NET projects altogether.)
If you’d like to know more about Orchard Core, check out its website, and especially its documentation. The rest of this guide assumes that you have a basic understanding of Orchard Core.
Let’s host Orchard Core!
Being close to the Microsoft ecosystem, Orchard Core has built-in support for a lot of Azure services, including Media storage, secret storage, e-mail delivery and sending SMS, AI search, and even observability with Azure Application Insights with the community Lombiq module. AWS also has support for Media storage. For cloud-hosted full-text search we can use Elasticsearch, and Redis to aid with horizontal scaling. How does using UpCloud, without specific support from Orchard Core, compare?
We’ve looked into hosting a vanilla Orchard Core app as a proof of concept, and are sharing our experiences here. The goal was to run Orchard Core with a minimal hosting environment, but with a stateless web server (so, keeping the database and Media storage separate). This could’ve been simplified to only use a web server (and keep the database in a local SQLite file, as well as use local Media files), but we wanted to go a bit more realistic than that. To be able to play around with the web server from the GUI too, we’ve chosen Windows as the OS if available. Additionally, we also checked if the platform helps with any of the other common infrastructure requirements, like sending e-mails or observability.
What does UpCloud provide for Orchard Core hosting?
As far as services interesting for Orchard Core hosting UpCloud offers VMs with load balancing, AWS S3-compatible object storage, and databases as a service. Managed Kubernetes is also available, but for the sake of this post, trying to host a simple app, we won’t create a cluster. Instead of Redis, you can create Valkey instances (Valkey is an open-source fork of Redis), which, for now, should just work with Orchard Core’s Redis support. While OpenSearch is also available, that’s incompatible with Orchard’s Elasticsearch integration.
If you want to send e-mails, implement observability, or add search and indexing other than with Lucene on the web server, you’re on your own.
Creating an Orchard Core hosting environment
You surely already guessed, but we’ll need three UpCloud services:
Let’s start with the server! What’s important here is that having all three resources in the same datacenter is kind of important for low latency, so be sure to use the same location at the later steps too. For now, let’s opt the smallest suitable plan, the 1-CPU one with 2 GB of RAM:
The server takes a few minutes to get provisioned, so in the meantime, we can create an Object Storage instance (public connection is only enabled for any necessary troubleshooting later):
And a single-node Postgres database server:
Note that this runs on its own VM.
This is everything we need, so now we can continue with setting up Orchard Core in this environment.
Deploying Orchard Core to the web server
You can deploy an ASP.NET Core app, including an Orchard Core-using one, with Web Deploy to IIS, using automated deployment from a GitHub Actions workflow, or just by copying its publish outputs to the server. Here, we opted with the simplest option: we published the web app to a folder from Visual Studio (but running `dotnet publish` from the CLI would be equally suitable), and copied the resulting files to the server via Remote Desktop. Then we could simply run the web app:
`dotnet publish`
The app listens to port 80 because we added an _appsettings.Production.json_ file configuring it:
_appsettings.Production.json_
{ "Kestrel": { "Endpoints": { "HttpEndpoint": { "Url": "http://*:80" } } } }
This allows you to simply open the IP of the server in a browser, or point a DNS A record to it. Our site is now available on the internet! …after we allowed the exe of our web app through the Windows Firewall, that is.
You may notice that this is a really barebones approach: There’s no IIS, no HTTPS, no proper deployment. And you’re right! This is a focused example of getting Orchard Core running, but we’ll return to the missing pieces later.
Setting up Orchard Core
Running the Orchard Core setup is standard: Just fill out the usual settings on the setup screen, and point the app to the Postgres DB. For the latter, you can copy the Postgres connection string from the UpCloud Control Panel, and ask your favorite AI tool to turn it into an Npgsql connection string that .NET uses.
Npgsql
Once setup finishes, you can configure Media storage too. First, you’ll need to create a storage user for the app; I suggest attaching the ECSS3FullAccess policy, since that’s the only one that seems to allow read-write access. Also, be sure to create a bucket for Media files; here we named it just “media”.
ECSS3FullAccess policy,
Now it’s time to configure the connection for the app. Again, you can use the _appsettings.Production.json_ file to add something like below, resulting in the following full file:
{ "Kestrel": { "Endpoints": { "HttpEndpoint": { "Url": "http://*:80" } } }, "OrchardCore": { "OrchardCore_Media_AmazonS3": { "ServiceURL": "https://vrbd8.upcloudobjects.com", "Credentials": { "SecretKey": "add the secret of the user you created", "AccessKey": "add the access key of the user you created" }, "CreateBucket": true, "RemoveBucket": true, "BucketName": "media" } } }
Be sure to change the `ServiceURL` value to that of your instance, as indicated on its Overview page (under “S3 endpoint”). That’s actually an undocumented configuration key that comes very handy when, as we do here, you connect to an S3 account outside of AWS.
`ServiceURL`
Now restart the app (so it reads the updated configuration file) and enable the Amazon Media Storage feature from the Orchard Core admin. It’ll work, despite it not running in Amazon. Magic!
And with this, our app fully works!
Why would you (not) use UpCloud?
OK, so we’ve seen that running Orchard Core under UpCloud works. This is not a huge surprise, but it’s nice to get it verified and have the basics figured out. Why would we do this, though, instead of choosing the beaten path with Azure or AWS, for example?
Coming from frequently using the cushy but extremely complex ecosystem of Azure, using a provider like UpCloud is certainly an interesting change. It seems to me that ultimately, there’s a lot of work to do if you want to have a full-blown, highly automated hosting environment for Orchard Core, with an option for horizontal scaling. Below are the features that I’d consider necessary, and while these are given with Azure, you need to roll your own solutions with UpCloud:
Yes, you could build an all-in-one infrastructure with Kubernetes, and have containers with services for all the above features (and a DB and storage as well), but that’s a large complexity you need to manage. Using Terraform, supported by UpCloud, to ramp up your infrastructure can cut down on manual repetition (and aid portability to other providers to an extent), but is also work that you have to invest. And at the entry level, managed solutions for services like SQL and Redis (instead of hosting your own VMs/containers) can be more cost-efficient too (but that flips if your app’s demand increases).
So, what should I do?
To me, the points mentioned above seem to be areas to improve. However, I can understand if the UpCloud team wants to focus on the core offering instead of becoming an everything cloud. Perhaps having a marketplace that easily lets you integrate external services to plug the holes would then be a good idea?
Until then, UpCloud can be a good choice to host your Orchard Core app if you don’t need anything beyond what’s easily possible with the existing offering, or if you already invested into a portable Kubernetes-based infrastructure.
Do you need help hosting Orchard Core at UpCloud or even onboard of a satellite (not kidding)? You should ask Lombiq, one of the biggest Orchard Core teams out there!
Your email address will not be published. Required fields are marked *
Comment *
Name *
Email *
Website
Save my name, email, and website in this browser for the next time I comment.
Δ
See all tutorials