Our blog contains the activity stream of Orchard Dojo: general news, new resources or tutorials are announced here.

Hosting Orchard Core at Exoscale

It's not all about hyperscalers: You can run your Orchard Core app in the cloud even if not using Azure, AWS, or some other giant like these. Let's see how we can do this with Exoscale! Blog post series overview This post is part of our series about hosting Orchard Core at European cloud providers. 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 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 a smaller cloud provider, 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. Note that while we usually received some credits from the cloud providers for testing, they are not paying for these reviews, and any endorsement or critique is our own. What's Exoscale? Exoscale is a cloud provider from Switzerland, with hosting locations back at home, as well as in Germany, Austria, Bulgaria, and since July also in Croatia. As far as services interesting for Orchard Core hosting go, they offer 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. DNS management is also available, though that's something I'd keep at Cloudflare for a real-life app. I'd also use Cloudflare as a CDN, despite Exoscale offering a CDN layer (with Akamai) on top of their object storage; but since in Orchard Core we don't serve Media files from storage directly, that wouldn't help anyway. 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 Exoscale services: A Compute Instance, i.e. a VM, for the web server. A DBaaS database; we'll use PostgreSQL. We could also create SQL Server instances, but not only would the minimum 2-core VM be an overkill for our purposes, it's also much more expensive, starting at about EUR 247/month (vs a Postgres DBaaS starting at EUR 42/month). Object Storage for Media. Let's start with the server! I went with the Swiss zone, since there's no place like home, and opted with a 2-CPU plan with 2 GB of RAM. For this site, 1 CPU would also be more than enough (while to cater for Windows, I'm more comfortable with 2 GB of RAM instead of 1), but there's no 1-CPU 2 GB RAM instance type. [image alt="Creating an Exoscale Compute Instance"]BlogPost/other-posts/2025/hosting-orchard-core-at-exoscale/creating-a-compute-instance.webp[/image] You may notice two things here: On the right, there's a warning about having to create Security Groups for ingress rules first. (Somewhat confusingly the ADD button below it actually creates the compute instance, not a Security Group.) To be able to actually connect to the VM, we also need to edit the default Security Group (or perhaps more diligently, create a new one), then open up the ingress port 80 with TCP (for HTTP), as well as add a rule for RDP. As a last step, you'll also need to add 0.0.0.0/0 (i.e. all IPs) under External Sources, allowing anyone to connect to our web server. Those ENABLE buttons for instances Mega and up mean that you need to ask Exoscale support to allow them "after a manual screening process". This I find a bit strange. Until the server started, so in the meantime, I created an Object Storage bucket in the same zone (to minimize latency, these resources should all be in the same zone): [image alt="Creating an Object Storage bucket"]BlogPost/other-posts/2025/hosting-orchard-core-at-exoscale/adding-bucket.webp?2[/image] It seems that unlike with other cloud providers where you create a storage account, then a bucket under it, here everyone shares the same storage account. Thus, bucket names should be globally unique. This doesn't seem appealing at a first glance, but apart from the naming issue, I didn't find any practical problem with it. Somewhat counterintuitively, the storage access and secret keys are API keys. You can create these following the docs; for the sake of simplicity, I created a key for the Owner role, but for a production app, you should follow the docs' recommendations and create a restricted role just to access this bucket. Finally, we also need a single-node Postgres database server: [image alt="Creating a managed database"]BlogPost/other-posts/2025/hosting-orchard-core-at-exoscale/adding-postgresql-dbaas.webp[/image] Note that this runs on its own VM. The IP filter is necessary for the web server to access the DB server; the provided CIDR matches the exact IP of it. 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, I opted with the simplest option: I 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 I could simply run the web app: [image alt="The Orchard Core app running under Windows Server"]BlogPost/other-posts/2025/hosting-orchard-core-at-exoscale/app-running.webp[/image] The app listens to port 80 because I added an appsettings.Production.json file configuring it: { "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 Exoscale Console, take the password of the default user from the DB's Users menu, and ask your favorite AI tool to turn them into an Npgsql connection string that .NET uses. Once setup finishes, you can configure Media storage too. I've elaborated above how to set up a bucket; the service URL for it will be in the format https://sos-{zone}.exo.io, with our Switzerland zone being ch-dk-2. 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://sos-ch-dk-2.exo.io", "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": "oc-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. 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 Exoscale? OK, so we've seen that running Orchard Core under Exoscale 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? European Exoscale is not just hosting in Europe, but the company itself is also based in a European country. If that matters for you, either for sentimental reasons or as a matter of company policy (like using a provider that's not under the US CLOUD Act), it can be a big plus. Note though, that while Switzerland is highly aligned with the EU legally, it's not an EU member state, nor part of the European Economic Area. Costs Exoscale can be a lot cheaper. At €17/month, the Exoscale server provides roughly the same as an A1_v2 Azure VM, which costs €45/month. However, the smallest managed Postgres instance at €42/month is way above what we'd use on Azure for an entry-level app, where an S0 Azure SQL DB would be around €13/month. So, in the end, Exoscale costs around EUR 60/month, while the roughly equivalent service in Azure would be basically the same. We do get more with Exoscale (a dedicated VM for the DB, and I think the web server is faster too), a lot more room to grow, but the cost advantage, in itself, disappears, at least in the beginning. For an entry-level app the storage is cents in both cases, but if you increase your usage, Exoscale's storage costs can be dramatically lower (EUR 0,00002750/GB vs Azure's Standard Hot tier at EUR 0,0185/GB). Network costs at Exoscale (EUR 0,02/GB for egress) and per-operation costs at Azure (there's no simple number for this) complicate things, though, so be sure to calculate what's applicable for your app. All this being said, at Azure, we'd rather use App Services: This is a higher-level "websites as a service", offering a bunch of convenience features like automated deployment, staged publishing, and configuration management. The smallest proper App Services-based infrastructure (with a staging slot and separate staging and production DBs) comes at around €90/month, though, but that also contains a lot of features lacking from VMs. Simplicity Without consulting any resource, just by playing with the Console, I could fully understand the Exoscale offering (I think...) within like half an hour. Getting the full Orchard Core environment running wouldn't have been much more, have I not written this post at the same time (plus getting stuck on the mentioned storage configuration). The cons Coming from frequently using the cushy but extremely complex ecosystem of Azure, using a more basic provider like Exoscale 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 Exoscale: Staged publishing (blue-green deployment): You'd need to set up multiple VMs or multiple sites, and manage swapping staging with production somehow on your own. Automated deployments: I think under a Windows server, the easiest would be to set up Web Deploy and use it from an automation platform like GitHub Actions. Observability: You'd either need to host an observability platform yourself, or use an external service. The lack of a search/indexing service is less of an issue, because you can just use the Elastic Cloud (what's the option in Azure and AWS too), and I'd consider the lack of an e-mail service not a huge issue either (you can just use something like SendGrid). Managed Valkey is good, but starting at €43/month, it's not priced for an easy entry (just as Postgres), although it also provides a lot more resources than the lowest tiers of Azure Cache for Redis do (for a lower price). 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 Exoscale, 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).There are also three notable things I very much didn't like about Exoscale's pricing: All prices on the pricing page are shown for usage hours only. That's necessary, but a metric frequently a lot more useful is the monthly cost. While I can always multiply by 730 to get an approximation of a month, it would be much clearer to have it indicated in the pricing table already. Also, I'd welcome seeing these hourly and monthly costs indicated in the Exoscale Console, when creating resources, too. The Pricing Calculator helps, and it does show monthly costs too, but it's better to show this information everywhere. The prices in EUR, CHF, and USD are exactly the same. Given that 1 CHF is 1,07 EUR, and 1 EUR is 1,16 USD as of writing this, there's a significant difference in your costs depending on what you pay with (you pay almost 25% more in CHF than USD). According to the website, "Your account can be setup in either CHF, EUR or USD, depending on your initial legal residence." This seems like an arbitrary disadvantage for Swiss users, and an advantage to non-EU ones. The latter is a surprising policy for a company primarily targeting EU customers. I'd welcome the price differences to disappear.You can only pay in advance, at least as a new customer. This requires you to either be ready to top up your balance any time you get a low credit notification, or you need to park an excessive amount at Exoscale. In either case, it's also a manual process. It would be better if they would just charge my card after each month's usage. So, what should I do?Based on the feature set, Exoscale 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. However, I think the particularities of Exoscale's pricing are not for everyone. And if you need help hosting Orchard Core at Exoscale, Azure, or onboard of a satellite (not kidding), drop us a line!

Latest tutorials

Hosting Orchard Core at Exoscale
zoltan.lehoczky
Step away from that Node.js
sara.el-saig

Featured tags

AI
SMS
IIS
MCP
API
SEO
SSL
All tags >

Orchard Core 2.0, Orchard Harvest 2024 - This week in Orchard (20/09/2024)

We are thrilled to announce that Orchard Core 2.0 is now available! Check out this post to know everything about the latest release of Orchard Core. In the upcoming weeks, we will check out the newest features and additions of Orchard Core 2.0. A huge thank you to everyone who attended Orchard Harvest 2024!

Orchard Harvest conference, day 2

Just as on the first day we're reporting in live from the 2017 Orchard Harvest conference! This blogpost will be updated as we go, so make sure to check back! Bertrand is doing the same thing again, so make sure to check out his blog for updates too. Antoine again as well, so also check out his blog. Theming in Orchard Core CMS by Steve Taylor Steve is from Avastec and works extensively with client-side technologies. He'll live code a new Orchard Core theme based on the Masonic Wordpress theme. A sneak peek into the new Orchard theming, also the casual use of Razor Tag Helpers for including resources, displaying a menu and a zone. The theme makes use of a Gulp pipeline for asset building. A sneak peek into the database storage format of Orchard Core and creating theme settings. Highway to the pager zone. (Sorry. Hate Salute Benedek for the joke.) Topic of the day: Statue of Liberty. We should have a Statue of Orchard. It could be a large monolith. (That, when you look closer, is built of beautifully crafted small, loosely coupled bricks.) Setting up indexing and adding a search box. Quite similar to Orchard 1.x. Taking a look at some of the familiar Orchard concepts from the admin to the extent needed for a theming demo: managing content types, adding menu items, widgets... If you use a lot of stuff the cool kids do like Angular and Knockout there's something for you. Present and future of Localization in Orchard by Benedek Farkas Benedek is from Lombiq, leading the development of Orchard client-projects and contributing bugfixes. He also asked us to take pictures. Lombiq does a lot of things with Orchard, so we'll refrain from listing those 96 things here, you can see for yourself. Benedek does a lot of things with Orchard too, including catering for the translation packages. How is "orchard" in various languages? Turns out probably we're best off with the English one. Word of the day: eltöredezettségmentesítőtlenítetthetetlenségtelenítőtlenkedhetnétek. You should only drink as long as you can pronounce this. When in doubt, use T-strings: Wrapping your user-facing labels into T() is the bare minimum. But it's easy to defeat the purpose, so here are some tips. Extracting T-strings from code with Vandelay Industries. Unfortunately the module is only compatible with Orchard 1.6, so please personally and repeatedly nudge Bertrand to update it. He'll appreciate the moral support. The module supports 1.10.x. Translating UI strings on Crowdin, for built-in and third-party modules. Klingons are really behind on translating Orchard. Head over to Crowdin and contribute some translation, Orchard needs you! Translating content items on the example of the Atlantis Programs & Pedalheads website. Also including some synchronization features to sync some data from the master item to the localized versions. Similar improvements are coming to Orchard itself too. Localizing Taxonomies and content fields, the new way. Design notes on improving localization. Building Client-side Apps and Components for Orchard by Daniel Stolt Daniel from IDeliverable returns. What's a client-side component? Shifting from the server-side to the client side. When do you want to use a client-side component? Mainly if you want a modern UX without page reloads. Various ways to create such components in Orchard, the simplest being a Layout Snippet. Demo of a component displaying stock market information. You wouldn't want that delay page load. Utilizing Orchard's Gulp pipeline for client-side assets. Do we put output files into source control? It depends, but preferably not. Configuring a client-side asset build pipeline with Gulp. If you don't know Browserify, check it out, it's good for you. Angular routing and how to combine it with Orchard's routing. Ways of runtime module loading. It will be awesome with HTTP 2. YesSql, what's that and why do I like it? by Sebastien Ros An ad-hoc, unplanned session by Sebastien about YesSql. It's a document database layer using SQL as the data store, so you get the best of both worlds: A trusted, tested storage with a fancy flexible data model. YesSql is also the data layer of Orchard Core. The plural of "index" is "indices". Learn this and you can look educated among your peers. Bonus: Do the same for "medium" and "matrix". Demo of the various use-cases you'd expect from such a data access layer by looking at the tests. Interesting clever querying and indexing concepts. What's next for .NET Core and C#? by Bertrand Le Roy Bertrand from Microsoft gives some insights into the future as we know it. It's multi-platform, which is a good thing. You'll need VS 2017 if you're using VS, which is bad thing. Project.json is dead and csproj is back, which is kind of a mixed thing. But this csproj is not the same csproj! One project system across all platforms: Now a bearded guy with a Linux laptop, a hipster with a MacBook and a cool engineer with an awesome Windows laptop can walk into a bar and be one .NET development team, not the start of a joke. We've seen some XML templates, but since it's XML no one will ever want to look at it, so whatevs. There's the One SDK running behind all IDEs, which is awesome. The .NET command line got even better, so you can feel like a Hollywood hacker. Even the Orchard command line could be part of the .NET CLI. The solution file format hasn't changed, which is sad. Introducing .NET Standard: one .NET API to use across all platforms, when writing .NET Framework, .NET Core or Xamarin apps. .NET Standard 2.0 will contain all the APIs .NET Framework has (minus the Windows-specific stuff). See for yourself on https://apisof.net/. What's up with C#? Everybody uses C# and everybody loves C#. No further questions. Bertrand just showed an array initialization that could be the prime exhibit in the Museum of Strange Brace Styles. And remember there's a thing called Pico. What's new in C# 7? Here's a recap. Pattern matching can be familiar from functional languages, but it has always long been a part of hardware description languages (and the wider concept in logic circuit design). And with Hastlayer you can create hardware from .NET! The holy trinity of C# language principles: expressiveness, convenience, performance, safety. Well, this was four. Some exotic things possibly coming up with C# 8. Orchard Core CMS by Sebastien Ros The goals of Orchard Core are like new year's resolutions you actually can keep: be worse at everything. Just kidding. Major changes: Built on ASP.NET Core, document-oriented storage (with YesSql, see above). The admin theme uses Bootstrap and there is no bug. The admin menu is now also a standard menu, so it's extensible in a better way. You can also configure the admin theme as easily as the frontend theme, neat! The basic content editing UI is in principle the same as in Orchard 1.x so you won't be confused. Content parts can be attached to a content type in multiple instances. Various things have changed a bit or a lot (even if not too apparent from the UI): Blogs use the Lists feature (so blogs are just a Lists configuration, not a feature written from scratch), widget layer rules can contain C# (and widgets can be dragged between zones from the UI)... New content type: Flows. These are basically widget pages, plus more. Recipes are now in JSON, not XML, and can use dynamic placeholders evaluated during cook time. The thing is fast, even without caching. >2000 request/s on a dev machine while debugging fast. And uses much less memory too. See the roadmap to get an idea of when Orchard Core will be ready. Panel with Daniel Stolt, Sipke Schoorstra and Zoltán Lehóczky Merging localization-related changes: Will mostly be done on dev, because breaking changes are allowed there. What about the new frontend theme? It's on Ryan Drew Bernett's branch (or maybe in a branch in the official repo). The design goals are mostly satisfied, but theme settings are not implemented. Are there any goals to make Orchard competitive against e.g. Wordpress? More themes and out-of-the-box site solutions would make content editors happy. That's true, but Wordpress is just a blog engine, even a lot of Orchard devs use Wordpress for their blogs. Orchard is mostly targeted at businesses.

Orchard Harvest conference, day 1

We're reporting in live from the 2017 Orchard Harvest conference! This blogpost will be updated as we go, so make sure to check back! Bertrand is doing the same thing, so make sure to check out his blog for updates too. Aaand, Antoine too, so also check out his blog. Keynote by Sebastien Ros Not everybody has badges because Sebastien failed Mail Merge, or Mail Merge failed Sebastien. Zoltán doesn't have a badge either :-(. Sebastien's always funny stand-up show starts, although he had a hard night after eating something bad. Let's see where all the attendees come from. It turns out, from a lot of countries and US states. Sebastien hands out some "choc-lates" to speakers. Now you're sorry you won't have a session! Public shaming of those who didn't want to be speakers! Public praise of those who're active in the community. Sebastien whining about organizing the conference. But we all know he just loves it. And he sounds like a parent with some little kids. Oh wait... Word of the day: "websiting". We all do Orchard websiting apparently. Apparently "Lombiq Technologies Ltd." is a long company name. So we'll just go with LMBQ from now on. There will be 4 ladies on the conference, which is maybe a record? Oh, and BTW we'll have some stuff about Orchard too. Outside In: Using external data with Orchard by Jorge Agraz Jorge is from Onestop, a full service ecommerce agency. They developed their platform on Orchard where they utilize Orchard's flexibility and content model. A CMS was needed to get engineers out of content management. But sometimes Orchard is hard to utilize or an overkill for their use-case. Product catalog information comes from an external system which is queried via API calls. They have "actor" and "carrier" shapes: platform-level business logic templates vs theme-level structural ones. See Jorge's session from last year. First the Onestop platform used widgets to provide pieces of functionaly for ecommerce sites, now mostly Layout Elements and content types for commerce pages. We now know what the address of the Onestop VPN is, but won't tell you here! One of the big points of the latest version of the platform is to reduce the number of shape templates needed for new sites: now just 6. A demo of how product pages are built with content parts. But as usual during demos, Visual Studio freezes :-). It seems Onestop discovered Dynamic Pages ;-). When Output Cache Just Isn't Enough by Chris Payne and Daniel Stolt Or "Make Output Cache Great Again" :-). They're from IDeliverable and developed IDeliverable.Donuts to handle various caching needs. A common scenario is personalized output, like having the user's name somewhere. This can be cached by keeping token-like placeholders and caching the output with that, evaluating for each request. A demo of how such placholders work. You can also see how the recent changes in the Output Cache module fit into this. Pro tip from Daniel: if you're presenting together with an English guy, use a Swedish keyboard layout. And Dvorak. In this talk we see images of cigars, in the last session there was a shoe with a cigar as the heel. Did we miss that the cigar is this conference's theme? Chris started a sentence with "Donut ships with..." and now I can't stop thinking of donut ships. A demo of the Item Level Cache part, which provides similar caching options but on the level of a single content item, not the whole page. This video apparently has something to do with caching. A demo of how cache entries can be reused across multiple pages. A demo of prerendering some items: even the first user gets a cached version, not first-time penalty. The drawback is that since the context is the request is not there, caching options are limited. What's new in ASP.NET MVC Core 2.0 by N. Taylor Mullen Hands up if you don't know ASP.NET MVC Core 1.0 either! Taylor is from Microsoft from the Razor team. The talk will be the better the more active the audience is. Remember, this is the first talk after lunch. So... Introducing Razor Pages: a bit like ASP.NET Web Pages, but better, i.e. "best of MVC with less ceremony". If you're a borderline PHP developer, do we have some transitional technology for you! Anatomy of a web application. Not many files. Demo of the basics of app configuration and stuff. VS 2017 can now edit csproj files without having to unload the project first. The future has arrived. Taylor is into League of Legends and Pokemon Go. Just sayin'. Demo of the difference between a standard MVC app and a Razor Pages app. The latter is just add cshtml file, run. No controller, action, Views folder. You can (or rather will be able to in the next version) embed logic otherwise contained in controllers. Looks very neat until you get PHP flashbacks. Just casually used C# 6 string interpolation. Well, since Roslyn the objectively best programming language in the known universe gets better even faster. Razor Pages is not obsolating MVC, it's another way to structure your app. Might help newcomers start with ASP.NET. Wonder if this could be used in an Orchard module? Razor tooling is being redesigned to decouple it from VS, allow extensibility and be able to provide an overall better developer experience like during refactoring. E.g. adding new Razor directives it's just a few lines of code. Scaling Orchard by Rob King Rob is a technical lead at Bede Gaming. They provide an online gaming platform for gambling brands in the UK and now internationally. They started their platform using PHP by writing a custom CMS, then migrated to using .NET and Orchard. "I'll talk about Mecca". Lombiq guys got Mecca flashbacks. (Because of this.) Their platform had a huge network of dependencies: disabling a feature can disable dozens of others. So they refactored and moved all common central service interface to a common module. Still not perfect, so the next step was to factor those out to smaller projects containing interfaces. To visualize the dependency hierarchy Rob created RJK.FeatureDependencies. Mecca Bingo needs a multi-node setup (12 servers by default) and extensive cashing to handle large loads (a recent peak was 5,4k requests per minute). Like layer rule caching with a custom Redis-using implementation. Output caching is handled with Redis too on top of a local in-memory cache. Scheduled task caused deadlocks in production due to tasks being wrongly rescheduled from multiple nodes. The ultimate solution was to move task execution out to Hangfire (after implementing a workaround of only letting tasks be executed on a single node). What is Orchard Core SaaS Framework? by Nick Mayne Nick has worked on Orchard Core, the new ASP.NET Core-compatible version of Orchard extensively. Demo of starting an Orchard application from scratch by creating and configuring a host project for it, then adding a module with MVC to it. Demo of configuring extension loading: Custom extension locations, custom manifest definitions. Demo of configuring multi-tenancy. Demo of using Nancy instead of MVC.