Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Here you can find information about getting started working with Umbraco Cloud.
Umbraco Cloud is a fully managed, flexible, and scalable way to build and host Umbraco websites, all in one place. Built on the open-source Umbraco CMS and hosted on Microsoft Azure, it provides everything developers and teams need for fast, secure digital experiences.
Umbraco Cloud takes care of installation, infrastructure, and security. You will also get the tools to work with your project in the Cloud or locally. Local development starts with cloning the project down to your PC or Linux/macOS.
When you are ready to show your work to the world, Umbraco Cloud provides a safe deployment mechanism that lets you publish to the web. When you have changes or updates to your site, Umbraco Cloud follows the process of moving, testing, and deploying your changes to your public site.
Fully managed hosting: Hosted on Microsoft Azure with automatic backups, global Content Delivery Network (CDN), HTTPS, and scaling built in.
Out-of-the-box DevOps: Use Git-based workflows, built-in CI/CD, and structured environments (Development, Staging, Live) to deliver with confidence.
Seamless collaboration: Invite team members, manage access, and deploy content and code with ease, all from Cloud Portal.
Security and reliability: Backed by secure infrastructure, automated Transport Layer Security (TLS), point-in-time restores, and Cloudflare protection for performance and safety.
Built for growth: Start small and scale as needed, with flexible environments, external integrations, and support for custom workflows and packages.
Umbraco Cloud offers shared hosting in 3 different plans:
Starter
Standard
Professional
Learn more about the quotas put in place to ensure the stability of your website.
Umbraco CMS: The core editor-friendly, open-source CMS.
Cloud Portal: A user-friendly dashboard for managing projects, environments, users, and settings.
Umbraco Deploy: Effortlessly synchronize content and structure across environments, ensuring smooth collaboration between development and live environments.
Umbraco Forms: Build and manage forms seamlessly, enhancing user engagement and collecting valuable insights without additional costs.
Umbraco UI Builder (In selected plans): Accelerate content creation and management by building intuitive, customized interfaces that enhance editorial workflows.
Support Plans: Umbraco Cloud Support ensures you're never alone. Known for being helpful and knowledgeable, they're dedicated to your Cloud success.
Umbraco HQ offers a full-day training course covering best practices for developing with Umbraco Cloud. The course targets frontend and backend developers who currently work or plan to work with Umbraco Cloud.
Explore the Umbraco Cloud Developer Training Course to learn more about the topics covered and how they can enhance your Umbraco development skills.
Explore, build, launch, and maintain your projects with ease.
The Umbraco Cloud documentation is structured to follow the user journey rather than only listing features. This change acknowledges that building and managing a project involves real-life steps. It begins with your initial login and continues through the go-live phase and beyond.
Whether you're new to Umbraco Cloud or a seasoned user, this hub is your essential resource for understanding and mastering Umbraco Cloud.
The documentation is structured to match your journey. From discovery to going live and beyond. Each phase is designed to help you learn, implement, and grow with confidence.
Start with the tour of the Umbraco Cloud Portal or try a free trial project to explore without commitment.
Azure Blob Storage is an external storage system, that the Umbraco Cloud service uses to store all media files on Umbraco Cloud projects.
This includes everything that is added to the Media library through the Umbraco backoffice, like images, PDFs, and other document formats.
In some cases, you might want to store other files in the Blob Storage than Media files.
Below are two articles describing how to connect to your environment Blob Storage, and upload files either through Azure Storage Explorer or programmatically.
You can learn more about Azure Blob Storage in the Microsoft Documentation.
The zip package you are deploying needs to contain all things that are normally present in an Umbraco Cloud environment repository.
Every new Umbraco Cloud project contains a readme.md
file which explains the structure and how you can adapt it to suit your needs.
The sample scripts on GitHub include a way to package the zip. As the scripts are samples, they show a universal way to do this, which works well for most people. But not all projects are alike, and you may not want to use that particular approach.
Don’t include any binary build artifacts coming from the .NET build/publish process.
The general deployment process on Umbraco Cloud needs the source code, and the system will rebuild it once it is pushed back to the environment.
.git
directoryThe folder will be ignored in the isolated instance, including the extra megabytes will slow down the deployment process.
Also, consider the artifact size limitation below.
If you are using modern frontend build tools, only include the finished frontend assets that are needed. There is no need to include JavaScript or TypeScript source files if you need to build the frontend.
It is good practice to keep the zipped artifact as small as possible.
Large files will slow down the underlying git operations and, therefore, also the deployment process.
Do not include large files like pictures and PDFs in the artifact.
Large files need to be uploaded to the blob storage connected to your environment.
Remove old and leftover code from the artifact.
Orphaned .csproj
files with outdated package references are a common cause for issues in the deployment process.
Size limitations to consider:
The version 1 endpoints will allow file sizes up to 128 MB.
In version 2 endpoints, the size limit is increased to 256 MB.
Explore Umbraco Cloud
Begin your Cloud Journey
Build and Customize your Solution
Expand your Project's Capabilities
Going Live
Optimize and Maintain your Site
Follow these guides to get your project configured the way you need.
Once your project is created, it's time to configure it to match your requirements. From access control and settings to managing connections and database structure, this section helps you establish a strong foundation for your Umbraco Cloud solution.
Whether you're preparing for collaboration, going live, or expanding functionality — the right setup ensures a secure and scalable environment.
Your Umbraco Cloud website is protected by a Web Application Firewall (WAF) by default. Learn more about the feature and the benefits.
A Web Application Firewall (WAF) is a security solution designed to protect web applications by filtering and monitoring HTTP traffic between them and the Internet. By acting as a shield between the web application and potential threats, it helps mitigate common attacks. This could be attacks like cross-site scripting (XSS), SQL injection, and file inclusion.
Umbraco Cloud uses which include pre-configured rules that provide immediate protection against a wide range of threats. These managed rulesets are regularly updated to defend against the latest vulnerabilities and attack techniques. The rulesets include protections against:
Zero-day vulnerabilities: Newly discovered vulnerabilities that have not yet been patched.
Top-10 attack techniques (logging only): Common attack methods identified by security organizations like Open Worldwide Application Security Project (OWASP).
WAF is enabled by default on each custom hostname. It is not available for the internal Cloud hostnames.
A WAF helps maintain optimal performance by blocking malicious traffic before it reaches your web application. This means that your server resources are not wasted on processing harmful requests, which can slow down your website. Additionally, by preventing attacks that could exploit vulnerabilities, WAF helps ensure the website remains available and responsive to legitimate users.
A WAF enhances the security of your web applications by providing a robust defense against different types of attacks. It protects your website from data breaches, defacement, and other security incidents by filtering out malicious traffic. This helps not only safeguard sensitive data but also maintain the trust and confidence of your users.
The custom hostname(s) must be pointing to the Umbraco Cloud entry point CNAME record pointing to dns.umbraco.io
or A records.
Learn more about this in the article on .
When using a proxy server with your Umbraco Cloud project you cannot enable WAF on your custom hostname.
The following steps outline enabling WAF on your custom hostname(s).
Open the Cloud project in the Umbraco Cloud Portal.
Navigate to Transport Security under Security.
Enable WAF for all future hostnames added to the project.
Enable WAF on your custom hostname(s).
When working with Umbraco Cloud, the way you work with databases might differ from what you're used to. One important aspect of Umbraco Cloud is that you always work isolated to avoid interfering with colleagues or a running website. This includes the database as well.
In this article you can read more about working with the Cloud Database.
This article will tell you all you need to know to work locally with your Cloud Database.
Here you can learn more about taking backups of your Cloud Database.
In some cases, Umbraco Cloud might not be the only service you are working with. You might need to work with other services as well. This could be either internal or third-party services. In either case, it will be serviced externally to Umbraco Cloud.
If an external service behind a firewall needs to communicate with your Umbraco Cloud project, allow Umbraco Cloud Server IPs to bypass the firewall.
For example, to retrieve information from an external service that is located behind a firewall, you must grant access to your Umbraco Cloud project. To do this, add the IP addresses used by Umbraco Cloud servers to an allowlist.
For projects on a Standard, Professional, and Enterprise plan you can enable static outbound IP addresses.
On the Advanced page of your project, you can turn on the static outbound IP address feature to ensure persistent communication. This opt-in feature can be switched on for Standard, Professional, and Enterprise Cloud projects.
The static outbound IP ranges vary per region. Below are the values per region in a notation. The expanded IP ranges can be calculated by using .
West Europe
UK South
US East
Australia East
If you need to use a CIDR Range for the IPs: 40.113.173.32/28
Enhance your Umbraco Cloud project with powerful built-in tools and custom package management.
Integrate third-party services and APIs seamlessly to enhance your project's functionality.
This article will look at some of the best practices and recommendations when you are working in teams on your Umbraco Cloud projects.
Always start by making a pull request from your project before you push anything back up to Cloud. This way you ensure that you do not accidentally overwrite the work that someone else in your team has worked with.
Umbraco Cloud is built on top of Git which means that you can create branches locally as either a feature or developer branch. You can then work on the project and test out the new features before merging it into the master branch. The branch can then be pushed up to your cloud environments.
It is recommended to use multiple environments when you are working in teams. With additional environments, members of a team can work locally, pushing up changes to the Cloud environment for testing.
Having multiple environments enables developers to continue developing, while content editors can focus on creating content in a separate environment.
When you need to work on a new feature, using a flexible environment ensures that the regular workflow isn't affected. The flexible environment is connected to a single mainline environment and isn't part of the left-to-right deployment workflow.
Learn more about how this works in the Flexible Environments article.
For a more in-depth example of how to work in teams, our Gold Partner ProWorks has written an article on Team development workflows.
This article serves as inspiration if you looking into setting up a bigger project where multiple people will be working on Umbraco Cloud.
Explanation on how to work with an Umbraco Cloud database locally, connecting to your local database using Visual Studio and working with custom tables in the Cloud database
This article covers how you can connect to the database of your local project and how you can work with custom tables on Umbraco Cloud.
When cloning down your project to work locally you might want to have a look in your database every now and then.
Since Umbraco 10, SQL CE is no longer supported, instead, Umbraco now comes with SQLite out of the box.
When cloning down your Umbraco project and restoring its content, it will create a Umbraco.sqlite.db
file in ~/umbraco/Data/Umbraco.sqlite.db
.
To view your local SQLite database, you need to use software that supports reading that type of database:
A program like DB Browser for SQLite
A Visual Studio extension like SQLite and SQL Server Compact Toolbox
You can also configure your project to prefer SQL Server LocalDb when it's available on your local machine by enabling the Deploy PreferLocalDbConnectionString
setting.
To configure your database, you can add the connection string in the 'appsettings.json' file. For more information, see the Configure your database section in the Unattended Installs article.
Umbraco Cloud ensures that your Umbraco-related data is always up to date, but it won't know anything about data in custom tables. This is like any other host when it comes to non-Umbraco data.
However, you have full access to the SQL Azure databases running on Umbraco Cloud. You can create custom tables like you'd expect on any other hosting provider. The easiest way to do this is to connect using SQL Management Studio.
The recommended way of making sure custom tables are present is to use Migrations. This is to ensure that the tables will be created or altered when starting your site.
Migrations will ensure if you add environments to your Umbraco Cloud site, the tables in the newly created databases will automatically be created for you.
Check the Creating a Custom Database table for an example of how to create and use Migrations.
The following changes in CAA used to issue certificates for all Umbraco Cloud sites' for new and existing custom hostnames.
Starting September 26, 2022, certificates are issued by Google Trust Services instead of DigiCert. The validity period of certificates has been reduced from one year to 90 days.
From October 31, 2022, certificate renewals will no longer use 'DigiCert' as the issuing CA. The renewed certificate will instead be issued by 'Google Trust Services', and certificate validity will be decreased from 1 year to 90 days.
No action is required unless you set a Certificate Authority Authorization (CAA) record on your domain.
From October 31, 2022, Certificate renewals will no longer use 'DigiCert' as the issuing CA. This means that you need to update your CAA record to allow 'Google Trust Services' issuing certificates for your domain.
The CAA record should be changed from:
example.com. IN CAA 0 issue "digicert.com"
to
example.com. IN CAA 0 issue "pki.goog"
As we continue to gather insights from our users, there are some known limitations and considerations to be aware of.
Format Restrictions
The packaged artifact from your CI/CD pipeline must adhere to the Umbraco Cloud API's required format, which is a zip source file. This could necessitate changes to your existing build and packaging scripts.
Workflow considerations
To ensure smooth execution of the CI/CD Flow, it is recommended to make schema changes in the left-most mainline environment. For example, the local development environment. Schema changes include changes made to Document Types, Data Types, Templates, and the like. The intention behind this principle is to prevent conflicts that could potentially arise due to simultaneous modifications made in different environments.
Additional Build Step
The flow feature adds an extra build to the deployment process. As a result, it takes longer to post to Umbraco Cloud using Umbraco CI/CD Flow compared to standard deployments.
Conflict Management
Given the necessity to avoid changes in other environments, the lack of strict coordination among multiple teams or individuals working on the same project elevates the risk of conflicts.
Direct Commits to Umbraco Git Repos: Any commits made directly to the Umbraco-git-repos will cause the process to fail.
Remote Build/Test Options: It is currently not possible to skip the first build step before committing.
Incomplete API:
The promotion endpoint for transitioning between environments is not fully functional yet.
Hotfix Deployments: Direct deployments to a specific environment are not supported at this time.
Lack of Predefined Tasks: There are no Umbraco-provided Azure DevOps tasks or GitHub Actions available.
No Webhooks: Currently, there's no webhook support for real-time feedback to the pipeline; polling is the only option.
Casing Conflicts: Be cautious of casing issues, such as having a README.md file created by Azure DevOps and a Readme.md
file from the default Umbraco Cloud, as this can cause conflicts in the cloud Git repository.
With Application Insight, you can collect telemetry about your cloud project, including web server telemetry, web page telemetry, and performance counters.
To install Application Insight on your Umbraco Cloud project read the Application Insights for ASP.NET Core applications article in the Microsoft documentation.
Be aware that projects hosted on Umbraco Cloud operate on a shared infrastructure, which may lead to misleading information when using Application Insights.
Since multiple projects utilize the same resources, Application Insights will provide data based on the overall resource usage across these projects.
To obtain accurate information with Application Insights, you must move your project to a dedicated server.
For more information about Application Insight, check out Microsoft's documentation on Application Insights
40.113.173.32/28
20.90.182.0/28
20.55.62.0/28
4.147.161.240/28
In this article, you will be able to find information on the following:
How to manage your subscriptions.
How to download and pay invoices.
How to change your credit card for payments.
To manage your subscription on Umbraco Cloud, go to the menu in the top right corner and select "Organization".
You will see an overview of your organization on Umbraco Cloud. From here you can see the information about the organization.
To change your payment method on Umbraco Cloud, go to your organization and select "Payment Methods" in the left side menu.
On this page, you can see the credit cards you have already added or you can add a new one.
Once a credit card has been added it will show up in a drop-down when creating new projects. You can also change the payment method for a specific project from here.
In some cases, you might need to change the credit card information on the Umbraco Cloud Organization.
If you add multiple cards, you can choose which one will be billed on the 1st of the month. To do this, click the Set as primary button on the card you want to use.
To remove an expired or unused card, click the trash can icon next to that card.
The invoices in this list are for projects paid by credit card.
Projects billed annually by invoice are excluded, as these invoices are handled manually and sent via email.
On Umbraco Cloud, we are sending out one single invoice with all the projects that you are paying for via email every month.
You can view the invoices for your projects under your organization in the Payment History section. You can see the following information for each invoice:
The invoice ID
The total amount paid
When the invoice was created
The due date
The status of the invoice
An option to download the invoice
When downloaded for a given month, the invoice will contain all the projects that you were paying for during the month.
Umbraco Cloud Projects are made of three major components: Environments, Team Members/Invite Users, and Settings.
The number of Environments in your project is dependent on which plan you are on:
Starter
QA + Production
Standard
Flexible + QA + Production Development + QA + Production
Professional
Flexible + Development + QA + Production
To get a technical overview of your Cloud environments, see the Environments article. For more information on how to add or remove environments, see the Manage Environments article.
Another major component of your Umbraco Cloud project is Team Members. When you add team members to a project, they will automatically be added as backoffice users in all the environments. Team members can be added as Admins, Writers, or Readers. Refer to the Team Members article to learn more about these roles.
There are many different settings available for you to configure your project for your needs. Learn more about the settings in the Project Settings article.
Use flexible environments to create a separate workflow along side the left-to-right deployment approach in Umbraco Cloud.
Flexible Environments allow users to create and manage environments outside the regular left-to-right deployment flow. This enhancement provides flexibility in orchestrating code and content workflows, empowering developers and content editors to work in a way that best suits their needs.
While the mainline environments use a horizontal deployment flow, flexible environments work differently. A flexible environment is added to an existing mainline environment and only deploys to and from that environment. Get an overview of the different types of environments in the Environments article.
The image above shows a project setup including two mainline environments and one flexible environment attached to the left-most mainline environment.
With Flexible Environments, teams can create environments as needed, allowing for more efficient and tailored workflows.
This feature enables:
Parallel development and testing: Developers can create isolated environments for different features, bug fixes, or client-specific work without impacting the main development branch.
Custom workflow orchestration: Teams can define custom flows of code and content deployment rather than being restricted to a linear left-to-right approach.
Easier hotfixes and feature releases: Urgent fixes can be deployed directly without being blocked by unfinished work in other environments.
Improved Content Management: Content editors can create, test, and validate content changes without depending on a specific environment.
A flexible environment is added and connected to a single mainline environment.
Developers can develop and build features in the flexible environment without affecting the mainline environment.
Once a feature is complete, it can be merged back into the mainline environment and become part of regular deployment flow.
When changes are made to the mainline environment, they must be pulled into the flexible environment before changes can be pushed.
Learn more about the deployment process in the Deployments section.
Learn more about handling merge Conflicts in Flexible Environments in the Troubleshooting section.
Before you can add a Flexible environment to your project, the following prerequisites must be met:
Uses Umbraco Version 10 or greater.
Uses Deploy Version Greater than 10.4.1, 13.3.0, 14.2.0 or greater.
Only one flexible environment is available.
Flexible environments are available only for projects paid by credit cards, invoices, or credits.
Flexible Environments are not available for Heartcore projects.
Learn more about pricing for Flexible Environments on the Umbraco Pricing page.
Starter
QA + Production
Standard
Flexible + QA + Production Development + QA + Production
Professional
Flexible + Development + QA + Production
For more information on environment limits and pricing, visit the Umbraco Pricing page.
This article shows how you can enable Multi-Factor authentication when you log in to the Umbraco Cloud Portal or the Umbraco Backoffice.
On Umbraco Cloud, you can add Multi-Factor Authentication (MFA) for your Umbraco Cloud account.
It is also possible on the organizational level to enforce Multi-Factor Authentication for the members.
You can use Email, Phone, or an Authenticator App when logging in to the Umbraco Cloud Portal or the Umbraco Backoffice.
MFA can be enabled when editing your Umbraco Cloud profile.
To enable MFA, follow these steps:
Go to your Profile on Umbraco Cloud.
Click Edit Profile in the Profile Settings section.
Select the desired Multifactor Authentication Method from the drop-down list.
Follow the steps shown below to enable MFA.
You will get an email with a code that you need to enter when logging in through the Umbraco Cloud portal or the backoffice.
You have the option to use an Authenticator App when logging in to the Umbraco Cloud Portal or the Umbraco Backoffice.
You can use the Microsoft Authenticator App for both iOS and Android or any other authenticator app of your choice.
In case you want to reset the authenticator app settings for your user, an administrator in your Umbraco Cloud organization can do this. It may be relevant if you want to use another authenticator app on your current phone or transfer the authentication process to another device.
You have the option to use your phone when you log in to the Umbraco Cloud portal or the Umbraco Backoffice. You can choose to receive a text message with a code or a call to log you in.
You can always disable MFA from your profile.
To disable MFA for your user, you will need to use the authentication method that you had enabled to disable it again.
If you had phone authentication enabled, it will then need to be used to disable it again.
The same is the case for email authentication.
This article is about team members that are added via the Invite User button in the Umbraco Cloud Portal. If you are looking for more information about Users in the Backoffice, see Users. Users added through the backoffice do not have access to the Umbraco Cloud Portal.
Team members are users that you add to your project via the Invite User button in the Umbraco Cloud Portal. They are automatically added as users in the Backoffice of all environments for the project. These users can clone down the project locally and log in using the same credentials they use for Umbraco Cloud.
When adding a user, the default permission is Read for each environment. You can assign backoffice user groups to the user for each environment.
User Permissions for each environment can be set in the Edit Team page available from the Settings dropdown. User Permissions can be set per environment. For example, a user can have Write access on the left-most mainline environment and Read access on the Live environment.
Admin: Has access to everything on a project. An admin can delete a project and edit the team. An admin can deploy changes between environments in the Project Portal and has access to git, as well as the Power Tools Kudu.
Read: A team member with Read permissions can only view the project in the portal as well as the backoffice. They are not able to deploy or change anything on the project itself. They can clone down the project, but cannot push changes they have made locally. By default, they are added as an admin in the backoffice so they can make changes in the backoffice. If you want to change this, see Team Member Permissions in the Umbraco Backoffice below.
Write: A team member with Write permissions can do everything on a project except delete it and edit the team. A user with Write permissions can deploy changes between environments through the portal. They have access to the git repositories and can push local changes to the environment.
No Access: A team member with No access permissions cannot restart the environment, deploy changes between environments, check error logs or log files, or access Kudo in the Project Portal. They can view the project in the portal and access the backoffice.
You can view the user group memberships of the project’s backoffice users. Currently, you can manage the backoffice user groups of a user through the Umbraco backoffice. A backoffice user is only created once the user logs into the backoffice of the project for the first time.
Find invitation details in the Member(s) who still needs to accept the project invitation section of the Edit Team page. You have the following options:
View the team member's name and email.
See the expiration date of the invitation.
Check the status of the invitation.
Copy the invitation link.
Resend the invitation.
Delete the invitation.
To ensure information about server maintenance reaches the correct person, add/update the technical contact to your Umbraco Cloud project.
One of the biggest benefits of having a Umbraco Cloud project is that you do not need to worry about the hosting. We handle it for you.
When we do maintenance on our Umbraco Cloud servers, we send out information to all our Umbraco Cloud customers. For us to reach out to the correct person, you need to add a Technical Contact to your project.
When you create a New Project, the user used to create the project will automatically be added as the technical contact. To update the technical contact or add more than one technical contact, do the following:
Go to the Project in the Umbraco Cloud Portal.
Go to Edit Team in the Overview menu tab.
Click Add Technical Contact in the Technical Contacts section.
Enter the Name, Email, and Telephone Number in the Add New Technical Contact window.
Click Confirm.
In this article, we show how you can enable public access for your Umbraco Cloud project, so only people with whitelisted IPs can access your project.
Public Access lets you deny access to your Umbraco Cloud project.
When enabled only team members on the project and users whose IPs have been allowed, can access the frontend of the project.
All environments on Umbraco Cloud projects can be protected by Public access. It requires you to enter your Cloud credentials in order to view the frontend.
Go to Public Access in the project settings tab
Enable Basic Authentication on the project
Once enabled Add IPs for users that need access to the project
Once Basic Authentication has been enabled, users not on the project or with IPs not added to the allowlist will be prompted to log in.
The Public Access feature in Umbraco Cloud is built on top of the Basic Authentication implementation in CMS core. This means that the appsettings
related to Basic Authentication are controlled by Umbraco Cloud, and your Cloud Environment has access to them.
This setup allows you to configure an HttpClient
that can do a loop back request without being blocked, by adding the Shared Secret Header if needed.
// Setup http client that does loop back requests
var basicAuthEnabled = Environment.GetEnvironmentVariable("UMBRACO__CMS__BASICAUTH__ENABLED") == "True";
if (basicAuthEnabled) {
var headerName = Environment.GetEnvironmentVariable("UMBRACO__CMS__BASICAUTH__SHAREDSECRET__HEADERNAME");
var headerValue = Environment.GetEnvironmentVariable("UMBRACO__CMS__BASICAUTH__SHAREDSECRET__VALUE");
loopbackHttpClient.DefaultRequestHeaders.Add(headerName, headerValue));
}
For more information, see the following links:
Umbraco Cloud enables you to develop, test, and deploy your projects through a structured and flexible environment setup. With built-in support for deployments, local development, and media synchronization, you can confidently make changes and collaborate with your teams.
This section covers working with environments, deployments, and CI/CD pipelines, giving you full control over how your changes are deployed from development to production.
If you want to manually upload files to the Azure Blob Storage container provided to your Cloud environments, you can use "Microsoft Azure Storage Explorer" software.
This article provides the steps you need, to connect to your Azure Blob Storage containers using Azure Storage Explorer.
It is strongly recommend that you add all the media items to your Cloud environments through the backoffice. Clone your environment to your local machine to manage the files of your media library.
Important: If you upload your media files manually using this method, they will not be available in the backoffice.
All media needs to be added through the Umbraco backoffice.
The first thing to sort out, if you want to connect to the Azure Blob Storage container of your environment is the credentials.
To find the connection details for your environment's Blob Storage, follow the steps below:
Go to your project on Umbraco Cloud.
Go to Configuration in the side menu.
Go to Connections.
Scroll down to Blob Storage Connection Details
Copy down the credentials needed for connecting to Azure Blob Storage.
The next step is to have Azure Storage Explorer installed on your local computer. Download the storage explorer, and run through the installer.
Let's use the information you have gathered, and connect Azure Storage Explorer to the Blob storage container:
Click the Open Connect Dialog button to get the Connect dialogue.
Select the Blob container in the first prompt.
Select Shared Access Signature (SAS) URL in the second prompt.
Input the information you have gathered earlier in the following format [Endpoint][ContainerName][SharedAccessSignature]
, in the URI field. See below for an example.
https://ucmediastoragewelive.blob.core.windows.net/92f27eee-eb18-445e-b9e4-c7a98bd209c0?sv=2019-07-07&sr=c&si=umbraco&sig=U92YZXOdzhp7JFLzj6MH%2BeugDgEelgzpB56o1XfD1%2BU%3D&spr=https
Ensure that the credentials are correctly set in the Connection Summary prompt.
Select Connect.
You are now connected to the blob storage for your environment and you can upload your files to Azure Blob Storage through the explorer.
Important: If you upload your media files manually using this method, they will not be available in the backoffice.
All media needs to be added through the Umbraco backoffice.
Whether you're fine-tuning global delivery or preparing for high-traffic scenarios, you can find tools to make your project perform at its best.
With a combination of global content delivery, smart caching, and flexible hosting regions, ensure your users always get the fastest and most responsive experience.
Overview of Umbraco Cloud plans, resource quotas, and infrastructure details.
Umbraco Cloud plans - Starter, Standard, and Professional - run on shared infrastructure, referred to as pools. To ensure consistent performance and prevent resource exhaustion within a pool, each website is assigned a resource quota based on its plan. Resource usage is continuously monitored to maintain stability across all sites.
The shared resources used by Umbraco Cloud websites include:
Central Processing Unit (CPU)
Random Access Memory (RAM)/Memory
Disk space
Transmission Control Protocol (TCP) connections
Currently, all available Umbraco Cloud plans utilize P1V3 Azure App Service Plans as their underlying infrastructure. A P1V3 Azure App Service Plan provides:
2 CPU Cores
8GB of RAM
250 GB of Disk space
1,920 TCP connections
To ensure stable performance for all websites hosted on Umbraco Cloud shared plans, both soft and hard quotas are in place. Quotas per site and the number of sites in each pool vary by Umbraco Cloud Plan.
Each plan has specific resource quotas. If a CPU or memory quota is exceeded, the application will restart to maintain stability for all adjacent sites on the app service plan. Exceeding the disk space quota will result in errors when performing write operations.
While there are no per-site limits for TCP connections, the total available TCP connections for all sites in the pool is 1,920. Once this limit is reached, any additional connection attempts will result in errors.
CPU - 20% (120 seconds of CPU time within a 5-minute period)
Memory - 1,500 MB (private bytes)
Disk - 7,800 MB
CPU - 35% (210 seconds of CPU time within a 5-minute period)
Memory - 1,800 MB (private bytes)
Disk - 9,600 MB
CPU - 50% (300 seconds of CPU time within a 5-minute period)
Memory - 2,000 MB (private bytes)
Disk - 10,400 MB
These quotas are hard limits and cannot be exceeded for more than a 5-minute interval. If an application surpasses the CPU or memory limits defined by the plan quota, the app service hosting the application will automatically restart. If multiple restarts occur, we will relocate the application to a dedicated instance to prevent negative impacts on other tenants within the shared pool.
For more details on pricing, plans, and features, visit the page.
Discover some of the features of Umbraco Cloud.
Umbraco Cloud is a fully managed, scalable platform built to simplify and enhance the experience of building, deploying, and maintaining Umbraco websites.
Umbraco Cloud enables developers, agencies, and enterprise teams to work faster, collaborate seamlessly, and maintain security using modern best practices.
This article highlights the most valuable features and benefits of Umbraco Cloud.
Umbraco Cloud hosts your projects on trusted Microsoft Azure infrastructure, ensuring:
High availability and performance
Data privacy and security
Azure-backed reliability and global scalability
Deploy faster and safer with a modern, built-in developer experience:
Git-based deployments with environment-aware configuration
Content and media transfers/restores between environments
Built-in CI/CD pipeline support for GitHub Actions and Azure DevOps
For more information, see the , , and articles.
Umbraco Baselines allows you to use a base project as a template for creating more projects. This is ideal if you're planning on building multiple similar websites. For more information, see the articles.
Stay secure and up to date with automated CMS upgrades, including:
Automatic minor and patch updates
Security fixes and latest feature rollouts
Upgrade notifications and version history
For more information, see the article.
Umbraco Cloud includes multiple layers of security so your team doesn’t have to manage patches or infrastructure hardening manually:
HTTPS is enabled by default
Optional basic authentication per environment
Environment-specific hostname settings
Secrets management
Support for external login providers (for example, Microsoft Entra ID, Auth0, Google, and so on)
For more information, see the article.
Every project comes with mainline and flexible environments (based on the plan), so you can:
Deploy between mainline and flexible environments
Test safely before going live
For more information, read the and articles.
Get visibility into site health and performance:
Application Insights for performance and logging
Usage statistics via the Cloud Portal
Alerts on downtime or performance issues
For more information, see the article.
Umbraco Cloud is designed for modern teams and agencies:
Role-based permissions
Organization and project-level user management
Environment-specific access control
For more information, see the article.
And that’s only the beginning. Explore even more features, benefits, and capabilities on the and the page.
Each Umbraco Cloud project can have multiple environments: Mainline and Flexible Environments. Each environment has its own git repository that is hosted on Umbraco’s Cloud platform.
Ideally, your Umbraco Cloud setup should look like this:
Source control is a way to control changes to files and directories. You can keep a record of changes and revert to specific versions of a file in the event you need to revert to an earlier time. A source control repository is used as the single source of truth that has the latest version of your project source code.
There are different source code management tools that you can use such as GitHub, Git, GitLab, Apache Subversion (SVN), Mercurial, etc.
The external Git repository can be used to store the entire source code of your project. Additionally, the Umbraco Cloud project must have all your source code too. You can no longer store dll files in your Umbraco Cloud project.
You need to put your custom code in a different source control repository of your choice. Use the source control repository to store the custom models, controllers, class libraries and CS code. The Umbraco Cloud Git repository can only store the dll files of your C# files.
It is recommended to create a Cloud project with at least two environments: a Live environment including one extra mainline environment. Work with a local copy of the site by cloning down the left-most environment. This repository is different from your source control repository.
Once you're happy with the results or wish to see how your website has progressed, you push the changes back to the Cloud. If everything is working as expected, deploy your changes to the Live environment.
Code Deployment Summary
In the above diagram, the Umbraco Git repository contains the source code of a class library CS project.
Once you commit your code in the Umbraco Cloud Git repository, your C# source code is built and then deployed to the wwwroot
folder.
Disadvantages of using an Umbraco Cloud Project repository as a source code repository
We only guarantee to maintain and keep the master
branch. If there are any other branches, they might be removed without any notification causing data loss.
You will need to commit your frontend artifacts as the build pipeline only builds dlls from your C# code.
Code Deployment Summary
In the above diagram, the external git repository contains the source code of a class library CS project with a class library project.
With this setup, you commit your changes twice. Once to commit your code in your source control and the other commit to the Umbraco Cloud Git repository to deploy your website. Your source code is not hosted on Umbraco Cloud but only your cloned project will be in the Umbraco Cloud Git Repository. Your code is built and compiled into the cloned project and then pushed to Umbraco Cloud. Thus updating the site with your latest code changes.
Disadvantages of using an Umbraco Cloud Project repository as a source code repository
We only guarantee to maintain and keep the master
branch. If there are any other branches, they might be removed without any notification causing data loss.
You will always need to commit your dll files.
In this guide, we show you how you can connect and work with your Cloud Database on Mac.
An Umbraco Cloud project
on Umbraco Cloud
Follow the steps below to connect and work with your Umbraco Cloud Database on a Mac.
Go to SQL Connection Details in the Configuration menu on Umbraco Cloud.
Note down the Server name, Login, Password, and Database.
Open Azure Data Studio.
Click "Create a connection" on the welcome page in Azure Data Studio.
Change the Authentication type to SQL Login and enter the following information in the Connection details dialog:
Add the Server name.
Add the Login.
Add the Password.
Add the Database.
Click Connect once the connection details have been filled out.
You have now connected to your database. You can work with the databases on Umbraco Cloud like you could on any other host. Remember to let Umbraco Cloud do the work when it comes to the Umbraco-related tables (Umbraco*
and CMS*
tables).
In some cases, you might not want to restore the entire content tree but only the parts that you need. Partial restore is a feature that allows for restoring specific parts of your content instead of restoring everything.
You can use Partial Restore on:
- Requires Umbraco Deploy 3.3+.
In this scenario, the Cloud environment is cloned to your local machine or a new Cloud environment has been created. In both cases, the new environment will have an empty Content section as well as an empty Media section.
To partially restore the parts you need:
Go to the Content section of the Umbraco backoffice on your new environment (local or Cloud).
Right-click the Content tree or click the three dots and select Do something else.
Choose Partial Restore.
Select the environment that you would like to restore the content from.
Select content to restore to open a dialog with a preview of the content tree.
Select the content node you would like to restore.
Enable Including all items below if you want to restore any child nodes below the selected node.
Click Restore.
Right-click the Content tree and select Reload once the restore is complete.
Partial Restores on empty environments are helpful when not all content or media is necessary for the tasks to be performed on the new environment. Instead of having to restore everything, doing a partial restore can be used to only restore the parts you need. This will ensure that you can quickly get on your way with the task at hand.
It is possible to use the Partial Restore feature in environments where you already have content in the Content tree.
Go to the Content section of your Umbraco backoffice.
Right-click the content node which you know contains updates.
Choose Partial Restore.
Select the environment that you would like to restore the content from.
Enable Including all items below if you want to restore any child nodes below the selected node.
Click Restore.
Right-click the Content tree and select Reload once the restore is complete.
How to Deploy changes between a local machine and an environment with Umbraco Deploy using either a Git GUI or CLI
In this article, you can learn more about deploying your code changes and metadata from a local instance to your Cloud environment.
Local changes in your Umbraco Cloud project are automatically detected and synced with your Git client for seamless collaboration.
There are two ways this can be done. You can push the changes using a Git UI or your terminal. This guide will show how you can use both ways to deploy your local changes to Umbraco Cloud.
A clone of your Cloud project.
A or a Terminal.
Created some Document Types and Data Types with corresponding .uda
files.
The files are located in the /umbraco/Deploy/Revision
folder.
Once you have created some Documents and Data types, follow the steps below to deploy your local changes using a Git UI. The guide will use as the Git UI, however you can use your own preferred Git UI.
Go to your Git UI.
Check for local changes in your UI.
Prepare changes, so they are ready to be committed.
Write a commit subject
Write a description of the commit.
Commit the files.
Push the files to your cloud project in the UI.
The deployment will kick in and the new Documents and Data Types you have created locally are now automatically created on the remote environment.
After deploying changes locally to your Cloud environment, use the Umbraco Cloud portal's 'Deploy changes to ..' button for subsequent deployments to other environments. For more information, see the article.
To deploy your local changes from local to Umbraco Cloud using a terminal follow the steps below:
Navigate to your local projects folder using the cd YourProjectName
command in the terminal.
Check for pending changes in your project with git status
.
Add the pending changes with git add -
.
Commit the staged files using git commit -m "Adding updated schema changes"
.
Push the changes to Umbraco Cloud using git push
.
Do a git pull
if the push is rejected.
If you have to pull down, make sure to see if any of these commits contain changes to the schema (anything in umbraco/Deploy/Revision/
).
To validate your local site and ensure compatibility with the updated schema, use the in the Settings section of the Umbraco backoffice.
Here, you can see the status of ongoing or completed deployment processes. The status will show whether an operation has been triggered and is in progress has been completed, or has failed.
The dashboard will show the status based on the marker files on the disk, for example, deploy-progress
. From the Deploy Dashboard, it is also possible to trigger different processes.
When you are working in your Cloud environment, changes made through the Backoffice are automatically detected and committed to the site's Git repository. This includes Umbraco-specific items like Document Types and Templates. These changes are also referred to as metadata.
Changes made in your Cloud environments will appear in the Umbraco Cloud portal. You can see what files have been added or changed and who made the changes.
To deploy metadata changes from one Cloud environment to another, click the Deploy changes button on the environment where the changes were made.
The deployment starts, and you can follow the progress in the Overview section of your project.
Once complete, the changes are deployed to the next Cloud environment in the deployment flow. If you have additional environments, repeat this process to deploy the changes through each environment.
When working with a flexible environment alongside your mainline environments, it's important to keep them aligned to avoid conflicts and ensure consistent deployments.
If any changes have been made in a mainline environment those changes must be pulled into the flexible environment before pushing updates back. The changes can be updated Document Types, content, or other schema changes.
If what you've been working on in the flexible environment has also been changed in the mainline, a merge conflict will occur. These conflicts need to be resolved before you can continue with the deployment. For information on how to resolve them, see the article.
Once you’ve completed your feature or update in the flexible environment and it’s synced with the latest mainline changes:
Push your changes from the flexible environment to the mainline environment.
From there, the changes become part of the regular deployment flow.
When you deploy, for example, from your left-most mainline environment to your Live environment, changes are made to the Live environment. These changes will then be merged back into the left-most mainline environment.
Here are the automatic steps Umbraco Cloud goes through when you hit the "Deploy changes" button:
Before pushing your changes from the source environment, the engine running Umbraco Cloud - Umbraco Deploy - looks for changes in the repository on the target environment
If changes are found, Umbraco Deploy merges the changes from the target environment into the repository on the source environment.
After the merge, the changes from the source environment are pushed to the repository on the target environment.
Finally, the changes pushed to the target repository are extracted to the site, and you will now see your changes reflected in the Backoffice and on the Frontend.
It is recommended that you only make changes to metadata on the left-most mainline environment or a flexible environment. Making changes directly on other mainline environments can cause merge conflicts when you deploy.
It is important to be aware of how deletions work between environments. Some deletions are environment-specific and others are not. For more information see the .
Refer to our troubleshooting documentation about , if you should run into issues while deploying between your Umbraco Cloud environments.
The number of environments available on your project is dependent on which plan you are on:
.
Clicking Configure environments from the project overview gives you access to environment management options. From here, you can:
Rename an existing environment.
Create a new environment.
Delete an environment you no longer need.
These options help keep your deployment pipeline organized and aligned with your team's workflow.
Most Umbraco Cloud plans give you the flexibility to work with multiple environments. You can decide how many to add and how to organize them as flexible or mainline environments. For more information on environment types, see the article.
The following sections provide guidance on managing your Cloud environments.
Before adding an environment, ensure there are no local changes that haven’t been pushed to Live. Adding an environment will push all changes in the current deployment chain.
To add an environment:
Click Configure environments.
Click Create environment.
Choose an Environment name.
Click Confirm.
After adding a new left-most mainline environment or a flexible environment, you need to clone this environment instead. The current local clone will be set up to push to Live, while the fresh clone will push to the new environment.
To remove an environment:
Navigate to the environment you want to delete.
Click on the three dots.
Click Delete.
It may take a few minutes for Cloud to set up the changes after adding or removing an environment.
Follow these guides to ensure a hassle-free upgrade process.
Keeping your Umbraco Cloud project up to date ensures security, performance, and access to the latest features. This section guides you through upgrading your project, from minor updates to major version upgrades, including handling dependencies.
To manually upload your certificate on the Umbraco Cloud Portal and assign it to one of the hostnames you've added:
Go to your project on the Umbraco Cloud portal.
Click Settings -> Certificates. The Manual Certificates window opens.
Your certificates need to be:
In .pfx
format.
Must use a password.
Cannot be expired.
Signature algorithm must be SHA256WithRSA, SHA1WithRSA or ECDSAWithSHA256
The .pfx
file can only contain one certificate. Each certificate can then be bound to a hostname you have already added to your site. Make sure you use the hostname you will bind the certificate to as the Common Name (CN) when generating the certificate.
Click Add New Certificate.
Select Choose file in the Certificate (.pfx file) field and upload your certificate from your local machine.
Enter the Password for your certificate.
Click Add.
Click Add new binding.
Choose your hostname from the Hostname dropdown.
Choose your newly uploaded certificate from the Certificate dropdown.
Click Add.
You've now successfully added your certificate to the Cloud project.
In some cases, you might want to switch from using your custom certificate to using the ones provided by the Umbraco Cloud service.
By removing your certificate from your Cloud project, the Umbraco Cloud service will automatically assign a new TLS (HTTPS) certificate to the hostname.
When you are about to go live with your website on Umbraco Cloud, there are a few things you might want to consider beforehand.
Below are a few suggestions that you might want to look into:
While you get a lot of fantastic features with Umbraco Cloud, SMTP server is not something that is available. There are many reasons for setting up an SMTP service on your Cloud project. For example, if you are working with Umbraco Forms.
Working with Umbraco Forms, allows you to set up email workflows that enable you to send emails through Forms - This requires an SMTP service. Another great use of SMTP service is if you want to add users to your project's Backoffice. The service requires SMTP to send the invitation from the project to the new user. This also applies to sending emails to users who have requested a password reset.
When you create a project on Umbraco Cloud, the generated project URL is based on the project's name. You have the option to a custom hostname.
The last step before your website goes live and is accessible to the public is to deploy it to the Live environment. When everything has been tested in the left-most mainline environment or locally, you are ready to deploy the site to your live environment and make it public.
When managing an Umbraco Cloud project with multiple environments, you might need to push a hotfix to your Live environment. There might be a possibility that you have pending changes in other environments that are not ready for deployment.
Imagine you have two environments: Live and Development. You are currently working on some changes in your local clone of the Development environment. These changes will not be ready for the Live environment for a couple of weeks. However, you need to apply a minor change to your Live environment – a hotfix.
Typically, you would make the hotfix locally, push it to the Development environment, and then deploy it to Live. In this scenario, that process is not possible as you do not want to deploy the other pending changes you are still working on.
Following Umbraco Cloud's workflow, you should never make changes directly to the Live environment unless it is the only environment you have. For more information about environments on Umbraco Cloud, see the article.
It is possible to apply specific changes to your Live environment without breaking Umbraco Cloud workflow. Here are two approaches:
Clone the Development environment and use Git to push the selected changes to the Live environment. The advantage of using this approach is that your Git history is more accurate and you only work with one local repository. This method requires Git knowledge, but a Git client can simplify the process. You should only go with this guide if you feel comfortable working with Git.
For more information, see the article.
Clone both your Development and Live environment to your local machine. Copy the updated files from the cloned Development environment to the cloned Live environment. Push the files to the Live environment on Umbraco Cloud. This allows you to test the changes on a cloned Live environment before pushing it to the Cloud.
For more information, see the article.
Which version of Umbraco Forms and Umbraco Deploy you use on your Umbraco Cloud project depends on the Umbraco CMS version used.
This article gives an overview of the dependencies between the products on Umbraco Cloud.
The products are:
Umbraco CMS
Umbraco Forms
Umbraco Deploy
In the table below, you can see which version of Umbraco Forms and Deploy you should be running on your Umbraco Cloud project. Those depend on which version of Umbraco CMS you are running.
This article provides an overview of any version-specific steps that might be necessary when upgrading your Umbraco Cloud project to a new version.
As there might also be version-specific notes for the specific products involved in the upgrade it is recommend giving those a look as well.
8.0
8.x
3.x
8.1 <
8.x
4.x
9.0 <
9.x
9.x
10.0 <
10.x
10.x
11.0 <
11.x
11.x
12.0 <
12.x
12.x
13.0 <
13.x
13.x
14.0 <
14.x
14.x
15.0 <
15.x
15.x
16.0 <
16.x
16.x
Starter
QA + Production
Standard
Flexible + QA + Production Development + QA + Production
Professional
Flexible + Development + QA + Production
Learn how content and code deployments work across environments in Umbraco Cloud.
Set up a local development environment synced with your Cloud project using Git.
Automate your build and deployment pipeline with Git-based workflows and CI/CD best practices.
Deliver your content quickly and efficiently while handling spikes in traffic without compromising the experience for visitors.
Need to move your project closer to your primary audience? This article will help you migrate your project(s) from one region to another.
Umbraco Cloud is built on a modern, cloud-native technology stack designed to simplify your development workflow, automate deployment, and ensure reliable, scalable hosting. This section provides a comprehensive overview of the key technologies that power your Cloud projects. From version control and cloud infrastructure to deployment automation and developer tools.
At the core of every Umbraco Cloud project is a Git repository, which securely tracks your changes. When you create a project, a Git repo is automatically set up, enabling you to:
Collaborate safely with your team through branching and merging.
Roll back to previous versions if needed.
Trigger automatic deployments when changes are pushed.
For more information, see the Repositories in a Cloud Project article.
Umbraco Cloud is hosted on Microsoft Azure, providing scalable, secure, and resilient infrastructure. This means your projects benefit from the same robust platform trusted by enterprises worldwide, without the burden of managing servers or manual configurations.
Umbraco Cloud runs on Microsoft Azure and uses Cloudflare for optimization and security. It includes:
Automatic backups with point-in-time restore for data safety.
TLS certificates for secure HTTPS connections.
Built-in firewalls and network-level security.
Environment-level access controls, allowing staging or development to be blocked from public access.
For more information, see the Project Settings article.
Umbraco Cloud includes an integrated CI/CD pipeline that automates the deployment of your site whenever you push changes to Git. This means:
Each commit triggers a build and deployment to your project’s environments (Development, Staging, Production).
Deployments are fast, reliable, and consistent, reducing manual errors.
You can promote changes through environments, ensuring quality control before going live.
For more information, see the Umbraco CI/CD Flow article.
To help you manage and troubleshoot your Cloud projects, Umbraco Cloud integrates Power Tools powered by Kudu, an advanced Azure service. With these tools, you can:
Inspect deployment logs and diagnose failed builds.
Access your environment’s file system and process information.
Run scripts and commands remotely.
For more information, see the Power Tools (Kudu) article.
Umbraco Cloud ensures exceptional performance and stability, whether it’s business as usual or during high-demand periods. With built-in caching, scalable resources, and seamless integrations, your digital experiences remain responsive and reliable under any circumstances.
For more information, see the CDN Caching and Optimization Settings article.
A private NuGet feed is a package repository that is only accessible to a specific group of users, rather than being publicly available.
Private feeds are often used to host internal libraries or proprietary software within an organization.
NuGet is a package manager for the Microsoft development platform, including .NET
. It gives you the ability to add, remove, and update libraries and tools in Visual Studio projects.
In this tutorial, we'll be covering how to set up a private NuGet feed with Umbraco Cloud.
To follow along with this tutorial, you'll need the following tools:
A NuGet server such as MyGet
An Umbraco Cloud project on a standard plan or higher
The first part of this tutorial is to create and publish a NuGet package using Visual Studio.
To create and publish a NuGet package with Visual Studio, you will need to follow the Microsoft Documentation.
Once the first step is completed, we need to create our own MyGet feed.
To create the MyGet feed, follow the MyGet documentation.
When you create the MyGet feed, it needs to be created as private.
We will publish our NuGet package to your MyGet feed in the third step.
There are two ways to do so:
Go directly to your MyGet feed and upload the NuGet package.
Follow the Microsoft Documentation.
In the last step, we will add the private feed to our Umbraco cloud project.
To add the private feed to your Cloud project, follow the steps below:
Access the cloud Secrets Management.
Add your MyGet credentials as a Shared Secret.
Clone down your Umbraco Cloud project.
Open the project locally and build/spin up the site.
Go to your NuGet.config
file in the root of your project.
Add the below configuration to the file:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
<add key="MyGet" value="https://www.myget.org/F/YourMyGetFeed/api/v3/index.json" />
</packageSources>
<packageSourceCredentials>
<MyGet>
<add key="Username" value="YourUsername" />
<add key="ClearTextPassword" value="%MYGET_PASSWORD%" />
</MyGet>
</packageSourceCredentials>
<activePackageSource>
<add key="All" value="(Aggregate source)" />
</activePackageSource>
</configuration>
In the above code example, you can see that we are using the Key: "MYGET_PASSWORD
" that we created in the previous step. We did that by using the Cloud Secrets Management feature on Umbraco Cloud.
Push the changes to your Umbraco Cloud project.
Congratulations, you've successfully set up a private NuGet feed with Umbraco Cloud using the cloud secrets management feature!
You can now use this feed to host and manage your own internal libraries or proprietary software. If you want to learn more about NuGet and how to use it, check out the official NuGet documentation.
Learn how to manually upgrade your Umbraco Cloud project to the latest version of the Umbraco projects.
In some cases, you might need to upgrade your Umbraco Cloud project manually. It's similar to how you would upgrade any other Umbraco project but includes a few extra and important steps.
Umbraco Cloud project uses Umbraco Forms and Umbraco Deploy. This means there are some dependencies you need to consider when upgrading your Umbraco Cloud project manually.
By default, all Umbraco Cloud projects are automatically upgraded when we release new patches (like 8.8.1) to the Umbraco CMS. This also goes for Umbraco Forms and Umbraco Deploy.
When a new minor version (like 8.8) is released, the upgrade is applied to the Umbraco Cloud engine, and not to the individual projects. The same goes for the release of new major versions (like 10.0).
For minor and major versions, there will be an option on your left-most mainline environment to apply the upgrade. The Umbraco Cloud engine will take care of the entire process, and you only need to ensure everything works when upgrade is complete.
It is recommended to use the automatic and semi-automatic upgrade options provided to you as part of your Umbraco Cloud project. It's also possible to upgrade your Umbraco Cloud project manually. This can be done with both patches and minor and major versions.
Manually upgrading your Cloud project allows you to test out new features and functionality on your local machine before applying them to your Cloud environments.
When manually upgrading a Umbraco Cloud project, it is important to consider the dependencies that exist between the products on Umbraco Cloud. To fully benefit from Umbraco Cloud, be sure to check for these dependencies before upgrading to a new minor or major version of Umbraco CMS.
When you are manually upgrading your Umbraco Cloud project and need to upgrade two or more products, follow this order:
Umbraco CMS
Umbraco Forms
Umbraco Deploy
Learn more about the product dependencies on Umbraco Cloud
Make sure to follow the steps carefully when upgrading your Umbraco Cloud project to the newest version of Umbraco CMS.
There are no Umbraco Cloud-related files to be aware of when upgrading Umbraco Forms. Therefore you can follow the general Umbraco Forms upgrade notes. When upgrading Umbraco Forms, be sure to also consult the version specific upgrade notes to learn about potential breaking changes and common pitfalls.
A quick overview of how Umbraco Cloud provides secure, scalable, and fully managed hosting.
Umbraco Cloud offers fully managed hosting for your Umbraco projects, leveraging Microsoft Azure. This means you don’t have to worry about setting up infrastructure, servers, or deployment pipelines. Everything is included and optimized for running Umbraco projects at scale.
Choosing between Umbraco Cloud and self-hosted Umbraco depends on your project's requirements, team setup, and compliance needs. Here's a breakdown to help you make a decision:
Umbraco Cloud offers:
Shared Hosting (default): Your site runs in an isolated environment on shared infrastructure that is optimized for performance and security.
Dedicated Resources: Available for high-traffic or security-sensitive projects with full tenant isolation. For a full overview of configuration and pricing, refer to the
For plan-level details, see the .
Choose Umbraco Cloud if you want to:
Launch quickly with minimal infrastructure setup.
Automate deployments, upgrades, and backups.
Focus on building solutions, not managing servers.
Collaborate smoothly across teams with built-in workflows.
Receive support and platform updates directly from Umbraco HQ.
Align with best practices for security, scaling, and deployment.
Digital agencies
Internal development teams
MVPs and large-scale web projects needing quick iteration and long-term stability
Choose self-hosted Umbraco if you:
Require complete control over your hosting and stack.
Must adhere to specific security, legal, or compliance requirements.
Have in-house DevOps expertise and want to tailor CI/CD workflows.
Need integration with private networks or legacy systems.
Prefer a different cloud provider or on-premises setup.
Enterprises with strict governance
Custom architecture requirements
Projects with highly specialized hosting needs
Starting your journey with Umbraco Cloud begins with creating your first project. A streamlined process designed to get you up and running quickly with all the power of Umbraco and the cloud, without complex setup.
You can either create a or a project from the . Both provide access to the core Umbraco Cloud experience, but there are key differences to keep in mind depending on your goals.
A trial project provides an opportunity to explore the Cloud platform without any commitment.
The easiest way to start with an Umbraco Cloud project is to take a . The project is automatically created, and you are ready to start within a few minutes.
Since everything is already set up for you, it is recommended that you get to know your project before you start building.
You can either work directly in the backoffice on the Cloud environment or .
Yes. You can upgrade to a paid project within the 14-day trial period without losing your work. You can upgrade your trial to a paid plan within the Umbraco Cloud portal.
Umbraco Cloud provides a seamless transition from a trial to a paid plan. You can adjust your plan or resources as your project evolves.
You can create a paid project from the Cloud Portal, which offers the latest features and full control.
To create a project from the Umbraco Cloud Portal:
Log in to the with your credentials.
Click Create Project.
Click Select Cloud Project from the list of projects.
Choose a Plan Selection as per your choice.
Choose the Umbraco version for your project.
Enter the Project Name.
Choose a Region.
Choose a Project Owner.
Add a Technical Contact to your project.
Click Continue.
Verify that everything looks correct in the Summary page.
Select I have read and agree to the terms and conditions and the Data Processing Agreement.
Click Create Project.
* It is not possible to publish a website with a Trial project.
When you create a Trial project a unique project name will be generated for you.
When you create a new Project from the Umbraco Cloud Portal you must give the project a name.
All project names are unique.
Once a project is created, you can get an overview of it from the Umbraco Cloud Portal:
Log in to the .
Select your Project from the Projects dashboard.
Click on Overview from the left side menu.
The Overview menu consists of:
A place to manage the on your project.
A place to manage the that has access to your project.
A page that gives a Summary of your project, like when it was created, that plan, and more.
Not every project starts from scratch. Depending on your needs, there are other ways to kick-start your Cloud journey:
A Baseline Child project is similar to a Fork (forked repository) on GitHub. A clone is created of an existing project while maintaining a connection between the two projects. The connection exists between the Live environment of the Baseline project, and the left-most mainline environment of the Child project.
Any project can act as a Baseline project.
The basic idea is that you have a project that contains all your standard Umbraco packages/components. Some default Document Types which you want to use as a baseline for future projects is also configured. When you've made changes to your Baseline project, you push these changes out to all the Child projects with a click of a button.
To create a child project:
Log in to the .
Click the Create New Project button.
Select Baseline Project.
Open the Choose baseline drop-down list and select the Cloud project, the new project should be based on.
Choose either Starter, Standard or Professional plan from the Plan Selection window.
Enter the Project Name in the Project Information window.
Choose an Owner from the drop-down list.
Enter your Name, Email, and Telephone in the Technical Contact section.
Click Continue.
Review the entered information and select I have read and agree to the terms and conditions and the Data Processing Agreement.
Click Create Project.
It might take couple of minutes for the project to spin up before your environments are ready. When your environments are ready, you will see a green light next to the environment name.
When you've created the Child project you can choose to restore content from your Baseline project:
Go to the Content section.
Right-click the top of the Content tree in the Umbraco backoffice.
Choose Workspace Restore.
The Baseline project should already be selected as the environment to restore from
Click Restore from Baseline
If you do not see the content, Reload the content tree once the restore is complete.
As with any Git repository-based development, it is not uncommon to have merge conflicts as the repositories begin to differ. Read this article for more on the merge strategy we use and how to approach resolving these conflicts.
In this article, you'll find a guide on how to upgrade your Child project with changes from your Baseline project.
When you are working with Baseline Child projects you might sometimes want to have an individual configuration for each project. This can be handled using config transforms.
In this article, we will look at how to break the connection between the baseline and one of its child projects.
Configuration files can be transformed to match requirements on different Umbraco Cloud environments.
In this article, you will find examples of applying environment-specific configuration to your Umbraco Cloud project.
Common configuration files, like the web.config
and appSettings.json
files on your Umbraco Cloud project will be used as examples.
Config Transforms are a way to transform your config files without changing the actual config file.
To transform a config file, you need to create a new file in your project with the following naming convention: {config-file name}.{environmentAlias}.config
.
To transform your appSetttings.json
file for an environment with the alias "Live", create a config transform that looks like this:
appSettings.Live.json
The {environmentAlias}
part needs to be replaced with the target environment's alias. The environment alias is fetched from the environment variable named DOTNET_ENVIRONMENT
.
You can find and manage the value of the DOTNET_ENVIRONMENT
environment variable through the Advanced settings in the Configuration section of the Cloud Portal.
Create the files in your local project clone to ensure it's added to the repository.
When the file is deployed to the Live environment, the transforms will be applied to the appSettings.json
file in the Root
of your project. In the case that you have multiple mainline environments, the appSettings.Live.json
will only transform the appSettings.json
on the Live environment.
For each deployment, the Umbraco Cloud engine searches for all of the .{environment}.json
files in your site and apply the transforms.
Be aware that a misconfigured config transform may .
When creating config transforms you need to follow these three rules:
Use the correct file-naming convention.
Place the transform file in the same folder as the file you want to transform.
Follow the correct .
Before applying the config transform files to your environments, we recommend running a test using this tool: .
Using the tool will let you test whether the transform file transforms your config files correctly. The tool can be used for all config files.
Rewrite rules are often something you only want to apply to your Live environment. To avoid the rewrites being applied to other mainline environments, create a transform file to apply the rewrite rules only to the Live environment.
Here is an example of how that config transform would look:
This config transform will add a <rule>
to <system.webServer><rewrite><rules>
. The xdt:Transform
attribute is used to tell the system what to transform. In this case, the value is Insert
, which means it will add the section if it's not already in the config file.
Dedicated Resources is a feature on Umbraco Cloud that gives you the option to move your project to a dedicated server. You can choose between a number of dedicated options depending on the amount of resources you will need for your project.
In this article, you can read about how to move your Umbraco Cloud project to dedicated resources. You can also find information about what you need to be aware of before doing so.
Before you decide to move your Umbraco Cloud project, you need to consider a few things:
Umbraco Cloud offers dedicated resources for Starter, Standard, and Professional plans. You can choose among one dedicated option for projects on a Starter plan, two dedicated options for a Standard plan project, and three dedicated options for a Professional plan project.
Moving from a shared resource to a dedicated resource will change the outgoing IP of the project. If your solution has an external service that requires whitelisting the outgoing IP, we advise you to enable the static outbound IP feature for your project and share that static outbound IP address with the third party. The static outbound IP address will not change when moving from a shared resource to a dedicated resource. For more info on static lease visit the documentation for .
The first step in moving to a dedicated resource is to access your project in the project overview at .
Find and select the project that you want to move to dedicated resources.
Select Dedicated Resources from the Management menu:
There are currently three dedicated options for you to choose from the Professional plan, two dedicated options from the Standard plan, and one dedicated option from the Starter plan. For each of the dedicated options, you will find its name, the memory and CPU cores, and the price per month.
By hitting the "Upgrade" button on your dedicated option of choice and confirming this, you will be redirected to the project page where you will be notified when the move to a dedicated resource has been completed.
Moving away from dedicated resources and back to a shared plan can be done from the Dedicated Resources page.
By hitting "Downgrade to shared" and confirming your choice, you will be redirected to the project page where you will be notified when the move back to a shared resource has been completed.
Your Cloud project is now back on a shared resource.
Wondering what happens when you move your environment to a dedicated server? Below you can find a list of the most frequently asked questions including answers.
You can choose to only move your live environment to the dedicated server.
All environments on the project moved to dedicated will share the resources of the dedicated server.
It will not be possible to work on the project while it is being moved to the dedicated server. The move takes a couple of minutes, and during that time the backoffice will not respond as usual.
All environments that have been selected to be moved, will be moved simultaneously.
There will always be an active live environment that continues to serve requests and be online during the move operation. When the moved live environment is ready and responding to requests, the hostnames will be switched to point to the moved environment.
If you have any other questions regarding dedicated resource, feel free to reach out to .
There are a few steps you need to do before you can work with your database. You will be ready to start working with the database at the end of the article.
Umbraco Cloud automatically overrides whatever is in the umbracoDbDsn
connection string in the web.config
or appSettings.json
when the site is running on Cloud.
Any connection string named umbracoDbDsn
will only be used when you run the site locally (cloned). In rare cases, you might need the database timeout increased on Cloud, for that, you'll need to reach out to support for assistance.
For security, your database on Umbraco Cloud is running behind a firewall. You'll need to open the firewall for the relevant IPs to connect to the database. This can be a single IP, a list of IPs, or even an IP range.
To open the firewall to a specific IP follow the steps below:
Go to your Umbraco Cloud Project.
Go to Configuration in the side menu on your project.
Click on Connections.
Click Add new IP address under SQL Azure firewall rules
Enter the IP that is allowed to access the database.
Give the IP a name as well. his gives an overview of who the different IPs that have been added belong to.
If you don't see the SQL Azure firewall, it's due to permissions and you'll need to contact the projects administrator.
The IP can also be added by clicking "Add now". It'll automatically add your current IP address and save the settings. It might take up to five minutes for the firewall to be open for your IP.
Once the firewall is open, it's time to fire up SQL Management Studio and connect to the database. Be aware that a database exists for each environment on Umbraco Cloud. Any changes you make to custom tables need to be done for each database.
To connect to the database using SQL Management Studio follow the steps below:
Go to SQL Connection Details in the Configuration menu on Umbraco Cloud.
Note down the Server name, Login, Password, and Database.
Go to SQL Management Studio.
Choose SQL Server Authentication as the authentication type In the Connect to Server dialog.
Add the Server name in the Connect to Server dialog
Add the Login in the Connect to Server dialog
Add the Password in the Connect to Server dialog
Click Options.
Add the name of the database in the Connect to Database dialog under Connection properties.
Click Connect.
Now that you've connected you can work with the databases on Umbraco Cloud, like you could on any other host. Remember to let Umbraco Cloud do the work when it comes to the Umbraco-related tables (Umbraco*
and CMS*
tables).
When you clone a site locally, Umbraco Cloud automatically creates a local database and populates it with data from your website running on the Cloud. If you don't specify database settings before the local site startup, it defaults to a SQL CE database in the umbraco/Data
folder. If you wish to use a local SQL Server instead, you can update the connection string in the web.config
or appSettings.json
file (from v9+). You need to do this before your site starts up the first time.
By default when Umbraco Cloud restores a local database it will be a Umbraco.sdf
file in the /App_Data
folder. However, the restore creates a Umbraco.mdf
file if LocalDB is installed and configured. To use LocalDB ensure applicationHost.config
it is configured with loadUserProfile="true"
and setProfileEnvironment="true"
.
Read about how to work with LocalDB and full IIS in the .
Usually applicationHost.config
is located in this folder for IIS: C:\Windows\System32\inetsrv\config
and in one of these folders for IIS Express:
C:\Users\<user>\Documents\IISExpress\config\
If you're using Visual Studio 2015+ check this path: $(solutionDir)\.vs\config\applicationhost.config
In Visual Studio 2015+ you can also configure which applicationhost.config
file is used by altering the <UseGlobalApplicationHostFile>true|false</UseGlobalApplicationHostFile>
setting in the project file (for example, MyProject.csproj
). Source: Microsoft Developer Network (MSDN) forum.
Now that you are all set and ready you can continue to work with your .
A deployment model that relies on Git, Kudu, and Umbraco Deploy core technology to move your changes from one environment to another.
Umbraco Cloud uses a deployment model based on Git, Kudu, and Umbraco Deploy to move changes between environments. This follows a left-to-right deployment approach. Changes start in the local or left-most environment and are deployed to the production/Live environment. This workflow is called the mainline.
The mainline environments are used when building and deploying the initial website. Upgrades, both manual and automatic also go through the mainline environments.
Flexible environments can be used to work on features separate from the mainline. This is done without interfering with upgrades or other changes being worked on in the mainline.
Umbraco Cloud separates schema and content during deployment. Schema includes Document Types, Templates, Forms, Views, and config files. Content includes content items and media.
Deploy: Moves schema between environments using a Git client or the Umbraco Cloud Portal.
Transfer: Move content and media directly via the Umbraco backoffice.
Content editors do not need Umbraco Cloud Portal access. They can manage content through the backoffice, while developers handle schema deployments via Git.
The source and target environments must be in sync before transferring content and media. Deploy schema first to ensure consistency.
Content and media move between environments through the Umbraco backoffice. Content can be transferred from Local to Development and restored from Live or Staging.
All configuration for Umbraco Deploy is stored in the appSettings.json
file found at the root of your Umbraco website.
Some deployments can trigger an Umbraco Cloud environment to restart. The table below outlines which actions initiate a restart.
From the Umbraco Cloud Portal, you can manually restart your environments.
The umbraco-cloud.json
file defines deployment settings, identifies the current environment, and determines the next deployment target.
When you have content on your Cloud environment and clone down your project to your local machine, you need to restore the content. You will also need to use the restore option when setting up new Cloud environments.
The restore option can be used to always ensure you work with the latest content when developing new features.
You can restore the content in the following ways:
The first time you run your project locally you will have the option to restore your content and media before going to the Umbraco Backoffice.
Run the website locally.
Click the green Restore button to restore all the content nodes and media files.
Wait till the process completes. This might take a while depending on the amount of content and media you have on your project.
Select Open Umbraco to go to the Backoffice.
All your content and media is now available in the Umbraco Backoffice.
Use this option when setting up new Cloud environments. The Workspace restore option restores all the entities (content, media, forms, datasources, and prevalue sources from Umbraco Forms) of a workspace via the Backoffice.
Log in to the Umbraco Backoffice on the environment you want to restore the content and media.
Click ... and select Do something else or Right-click the Content Tree in the Content section.
Choose Workspace Restore.
Select the environment from the Restore this workspace from dropdown.
Make sure that your environments have the .
Click Restore from <environment_name> and wait till the process completes. This might take a while depending on the amount of content and media you have on your project.
Click Okay to complete the process once the restore is done.
Right-click the Content tree and choose Reload to see your content in the tree.
The Tree restore option restores all the entities available for the selected tree in that section. It's available in the Content, Media, Members, Forms (root node of Forms, Datasources, and Prevalue sources), or Translation (Dictionary menu if configured) sections. Using Tree Restore, you can choose to restore only content. This will restore any media that’s referenced in that content, but it won’t attempt to restore the full media library.
Log in to the Umbraco Backoffice in the environment you want to restore the tree.
Click ... and select Do something else or Right-click the Content Tree in the Content section.
Choose Tree Restore.
Select the environment from the Restore this tree from dropdown.
Make sure that your environments have the .
Click Restore from <environment_name> and wait till the process completes. This might take a while depending on the amount of content and media you have on your project.
Click Okay to complete the process when the restore is done.
Right-click the Content tree and choose Reload to see your content in the tree.
Using the Partial Restore option, you can restore single nodes from a tree (optionally with descendants) that you need to work with.
How to restore content in Umbraco Deploy using the deployment dashboard
After deploying changes to the metadata, it's time to transfer your content and media. This is done from the Umbraco Backoffice.
Content and media transfers are flexible. You control which content nodes or media items to transfer, all in one go, a few at a time, or a single node.
Transferring content will overwrite any existing nodes on the target environment. Content transfers will transfer the items that you select in the "source" environment to the "target" environment the same as it was in the "source". This means that if you have some content on the target environment already, this will be replaced by the new content from the source environment.
Important: Content and Media transfers will only work if you've deployed all changes to your metadata beforehand. Please refer to our documentation on how to deploy metadata from either or .
Let’s go through a content transfer step by step. Imagine you’ve finished working on new content for your project locally and you are ready to transfer the changes to your Cloud Development environment.
You want to transfer the whole site. You start from the Home
node and choose to transfer everything under it:
Right-click ... next to the Home
node in the Content tree.
Select Queue for transfer.
Alternatively, if you are in the Home page editor, you can go to the Actions dropdown and select Queue for transfer.
Choose if you want to include all items below the chosen page or only transfer the chosen node. Alternatively, right-click the Content tree and select Queue for transfer to transfer all your content at once.
Click Queue.
Select Open transfer queue. The Workspaces dashboard opens.
You will be able to see which items are currently ready to be transferred - this will include both content and media that you've queued for transfer.
Click Transfer to Development and monitor the progress of the transfer.
Once the transfer is completed, you will see a confirmation message stating that the transfer has succeeded.
Media items are transferred the same way as content:
Right-click the items in the Media section and select Queue for transfer. Alternatively, right-click the Media tree and select Queue for transfer to transfer all your media at once.
Click Queue.
Select Open transfer queue. The Workspaces dashboard opens.
Click Transfer to Development.
To be able to transfer Members and Member groups make sure that AllowMembersDeploymentOperations
is configured to transfer
and TransferMemberGroupsAsContent
is set to true
. This needs to be done in the appSettings.json
file
Once the settings have been configured Members can be transferred in the same ways as both content and media from the Members section:
Right-click on the Members or the Member Groups folder and choose Queue for transfer.
Click Queue.
Select Open transfer queue. The workspace dashboard opens.
Click Transfer to Development.
You'll need to ensure the TransferFormsAsContent
the setting is set to true
in the appsettings.json
file:
Once the setting has been added to the source and target environment, Forms can be transferred the same way as content and media:
Right-click the items in the Forms section and choose Queue for transfer. Alternatively, right-click the Forms tree and select Queue for transfer to transfer all your Forms at once.
Click Queue.
Select Open transfer queue. The Workspaces dashboard opens.
Click Transfer to Development.
Deploy can be configured to allow for backoffice transfers of dictionary items instead of using files serialized to disk by setting TransferDictionaryAsContent
as true
.
Sometimes a content transfer is not possible. For example, adding a new property to the HomePage Document Type that's missing in another Cloud environment throws an error. The error contains details on how to fix it.
If you encounter this issue while transferring content, refer to the article. This article provides guidance on resolving these issues.
On Umbraco Cloud, deletions are environment specific. To delete something entirely from your project, you need to delete it in all environments.
In this article, you can read about the correct way of deleting files, schema, and content from your Umbraco Cloud project.
When you have an Umbraco Cloud project, you might have couple of environments including a local clone of the project. Each of these environments have their own database. These databases store references to your content, media, and schema files, such as Document Types and Templates.
The databases are environment specific. During deployment across environments, Umbraco Cloud's engine compares schema files with database references using alias and GUID for accuracy. If something doesn't add up, for example, there is a mismatch between the database references and the files deployed, you will see an error. Learn more about this in the .
The workflow described above does not recognize deletions of content and schema from the database. You'll need to delete the content and/or schema on all your environments to fully complete the deletion.
The main reason not to delete schema and content on deployments is that it could lead to an unrecoverable loss of data.
Here's an example of what can happen when a Document Type is deleted and deployed:
A Document Type is deleted in the left-most mainline environment.
This deletion is then pushed to the Live environment, where many content nodes depend on the deleted Document Type.
When the deployment is completed, all those content nodes would be instantly removed.
In the scenario described above, there is no option to roll back because the Document Type they rely on no longer exists. To prevent such situations, manual deletion is necessary. You must actively decide on each environment for the process to occur. Below is the same scenario explained in more detail.
The following example will build in the scenario outlined above, calling the left-most mainline environment the Development environment. In addition to the deletion, additional changes that have been made will also be deployed.
Before you deploy the changes, the Development environment will show that the following changes are ready to be deployed:
Following the Activity log in the browser, you'll notice that the .uda
file for the Document Type gets deleted. Additionally, other files with changes are copied to the Live environment.
Once the deployment is completed, the following changes has taken place:
The template is correctly updated.
The Document Type you deleted on the Development environment is still present in the backoffice on the Live environment.
The reason for the Document Type to still be there is, that the associated .uda
file is deleted. The Document Type still exists in the database.
To delete the Document Type from your entire project, you need to delete it from the backoffice of the other environments. When the Document Type has been deleted from the backoffice of all the environments and no .uda
file exist, it is fully removed.
If you save your Document Type during the process, a new .uda
file is generated. This can recreate your deleted Document Type when deploying changes between environments.
Every file that's deleted, will also be deleted on the next environment when you deploy. However, there are some differences depending on what you have deleted.
Here's an overview of what happens when you deploy deletions to the next environment.
All files are deleted in the next environment upon deployment.
Deletions of content and media won't be detected during deployments. You must manually delete them on each environment where removal is desired.
Deleting the language in the backoffice on the target environment will ensure the environments are in sync.
You can now configure a deployment webhook to be triggered upon successful deployments to any of your Umbraco Cloud environments. For example, when deploying from your local environment to one of your Cloud environments. Upon successful deployment, general information about the deployment will be posted in a JSON format to the specific URL you have configured.
There are many use cases for deployment webhooks such as providing a detailed audit trail. Here are some scenarios where webhooks could be useful:
Any deployments to the Live site could be relevant for many parties in a company. Posting information about a deployment in internal communication channels like Slack is made possible using this feature.
Monitoring of the whole deployment cycle. A successful deployment might cause an error to show on the website. Integrating the webhook with other monitoring services, you could find out which deployment caused the issue.
Letting content editors know about particular deployments such as when a new Document Type was added. Will inform them that they can now use the new Document Type.
From the Umbraco Cloud Portal go to Settings -> Webhooks
Select the environment to register a webhook.
Fill in the Webhook URL to which the data about a deployment should be posted to. An absolute URL with HTTP/HTTPS schema is an acceptable input to the field - ex. https://exampleURL.com
Click Add Webhook.
General information about the deployment (to the configured environment) will be posted in JSON format to the URL (configured in the previous section).
The headers contain information about the payload in JSON format as well as a version of the payload.
Contents of the payload contain general information about the current deployment with links to the project in the Portal and the frontend of the environment. The final section lists deployed commits, including author, commit message, and changed files in the environment.
All Media files for Umbraco Cloud projects are stored in Azure Blob Storage containers. Each environment has a separate container linked to it.
All media files on your Umbraco Cloud projects are stored using Azure Blob Storage. This means that the media files are not stored with the rest of your project files but in an external storage system.
To access the media files on your Umbraco Cloud project you can either:
(Recommended)
Azure Blob Storage is an external storage system, that the Umbraco Cloud service uses to store all media files on Umbraco Cloud projects. To learn how you can connect to your Blob Storages, read the article.
When cloning a Cloud environment to your local machine, run a content restore from the backoffice. This will retrieve a copy of all the media files from the Azure Blob Storage container connected to that environment.
You can learn more about how this works in the article.
Adding new media files to your local clone automatically uploads to the Azure Blob Storage container connected to the environment you are deploying to.
Each environment on your Umbraco Cloud project has a separate Azure Blob Storage container. Each of your environments uses a storage container specific to that environment.
When you deploy between two environments on your Umbraco Cloud project, media files will be copied from one storage to the other. The files are transferred depending on which environment you are moving to and from.
As an example, consider a scenario where you are transferring content changes from your left-most mainline environment to your Live environment. Initiating the transfer copies all media files from your left-most mainline environment Azure Blob Storage container to the Live environment container. Once all content changes have been successfully transferred and the process is complete, the media libraries in both environments will be synchronized.
You will notice that there is a Media (wwwroot/media
) folder in your project files. This folder usually holds all media files associated with a Umbraco project. As your Umbraco Cloud environments are all configured with Azure Blob Storage, the media files are not in this media folder.
Instead, you will find a project.assets.json
file in the obj
folder. This file is used to connect the Media library on your Cloud environment to an Azure Blob Storage container.
In some cases, you might want to connect to your Azure Blob Storage container for the environments on your Umbraco Cloud project. This could be to clean up unwanted media files or to download the current contents of the library.
To do this, you need to know some details about the connection between the environment and the Azure Blob Storage containers. Below are the steps you need to follow, to locate the necessary variables:
Access on your Cloud environment.
Locate the Environment page in the top navigation.
Scroll to the section containing Environment variables.
There are 4 variables related to the Azure Blob Storage container in your environment:
APPSETTING_UMBRACO__CLOUD__STORAGE__AZUREBLOB__CONTAINERALIAS
APPSETTING_UMBRACO__CLOUD__STORAGE__AZUREBLOB__CONTAINERNAME
APPSETTING_UMBRACO__CLOUD__STORAGE__AZUREBLOB__ENDPOINT
APPSETTING_UMBRACO__CLOUD__STORAGE__AZUREBLOB__SHAREDACCESSSIGNATURE
Once you have the variables, use the guide to connect to your storage container.
In this article, you'll find a step-by-step guide on how to apply a hotfix to a Live environment by manually moving the changed, updated, and/or new files from one local clone to another.
A
You have an Umbraco Cloud project with two environments, Development and Live.
You have been working on building the site on a local clone of the Development environment. Now, you want to send some but not all changes to the Live environment.
Three commits have been pushed from your local clone to the Development environment. Out of these three commits, you only need the changes from one of the commits in the Live environment.
Here are the steps to follow to apply selected changes to the Live environment without deploying from Development to Live.
For the sake of simplicity here's an explanation of the names I'll be using in this guide:
The cloned Development environment: Development repository
The cloned Live environment: Live repository
Clone down the Live environment.
The clone URL for the Live environment can be found in the Umbraco Cloud Portal:
Locate the files from the Development repository that you want to move to Live.
Check the commits in the Git history for the Development repository to verify which files you need.
The new files can be moved from the Development repository to the Live repository.
The same goes for changed files. You can also edit the files, and only move the code snippets you need on the Live environment.
Copy and paste the new and/or updated files from your Development repository to your Live repository.
You can now Stage and Commit these changes to the Live repository in Git.
A benefit of having the Live environment cloned down, is that you can test the new changes locally before sending them to the Live environment.
Run the Live repository through IIS
Go to the backoffice of your project
Navigate to the settings section
Go to the Deploy Dashboard in the Settings section
Run the Deploy operation Update Umbraco Schema From Data Files
The changes will now be reflected in the backoffice of your local Live environment.
Once you've checked that everything works locally, you are ready to push to the Live environment.
Push the committed changes to the Live environment using Git.
Run the Deploy operation Update Umbraco Schema From Data Files
from the Deploy Dashboard
You have now applied a hotfix to the Live environment.
When you are done with development on your Development environment, follow the normal workflow of . The hotfix which now exists in both environments should automatically be merged upon deployment.
Once you've applied the hotfix, we recommend that you delete the local clone of the Live environment. If you need to apply another hotfix at some point, clone the environment down again.
Make sure that the changes you push directly to your Live environment are also pushed to the Development environment. This will ensure that your environments are kept in sync.
This guide can also be used for applying a hotfix to a Staging environment.
Learn how to manually upgrade the Umbraco Deploy version used on your Umbraco Cloud project.
Deploy on Cloud will either be automatically upgraded with patch releases or it can be done through the portal when new minors are available.
In rare cases, Deploy might not be on the latest patch or minor and you will need to upgrade Deploy manually.
This article will give you a step-by-step on how to manually upgrade the deployment engine used on your Umbraco Cloud project.
When upgrading an Umbraco Cloud project manually, the first step is to .
Make sure you can run your Cloud project locally and restore content and media. It is important that you check that everything works correctly after the upgrade. To achieve this, you need to have a clone locally that resembles the Cloud environment as much as possible.
To get the latest version of Umbraco Deploy you will need to upgrade the site using NuGet. The main package to install is Umbraco.Deploy.Cloud
. This has dependencies on other components of Umbraco Deploy that will be imported automatically.
If using Umbraco Forms in your installation, you should also update the Umbraco.Deploy.Forms
package reference.
Run the dotnet add package Umbraco.Deploy.Cloud
command in the directory that contains your project files. If you want a specific package version, run these commands:
dotnet add package Umbraco.Deploy.Cloud --version <VERSION>
dotnet add package Umbraco.Deploy.Forms --version <VERSION>
Run dotnet restore
to install the packages.
Open your .csproj
file to make sure the package reference is updated:
Alternatively, you can also update Umbraco Deploy via the NuGet Package Manager in Visual studio:
Make sure that everything works on the local clone and that you can run the project without any errors.
When you've upgraded everything locally, and made sure that everything runs without any errors, you are ready to deploy the upgrade to Umbraco Cloud.
Stage and commit all changes in Git
Push the changes to the Cloud environment
When everything is pushed, head on over to the Umbraco Cloud Portal
Make sure everything runs without errors before deploying to the next Cloud environment
Hosting infrastructure
Managed by Umbraco on Azure
Managed by you (Azure, Amazon Web Services (AWS), on-prem, etc.)
Setup Time
Minimal, creates a project in minutes
Manual configuration is required
Upgrades (CMS + Deploy)
Automated and guided
Manual updates needed
Deployments
Built-in workflows via Umbraco Deploy
Custom pipeline setup needed
Upgrades and Backups
Automatic and included
Manual or via custom setup
CI/CD Support
Built-in automated deployments
Custom pipelines (e.g., Azure DevOps, GitHub Actions)
Monitoring and logging
Integrated dashboards and logs
Must integrate with external tools
Security and Compliance
Web Application Firewall (WAF), HTTPS, Multi-Factor Authentication (MFA), ISO-certified hosting
Your responsibility
Support
Included with selected plans
Community or third-party support
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.webServer>
<rewrite>
<rules>
<rule xdt:Transform="Insert" name="Redirects umbraco.io to actual domain" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="^(.*)?.euwest01.umbraco.io$" />
<add input="{REQUEST_URI}" negate="true" pattern="^/umbraco" />
<add input="{REQUEST_URI}" negate="true" pattern="^/DependencyHandler.axd" />
<add input="{REQUEST_URI}" negate="true" pattern="^/App_Plugins" />
<add input="{REQUEST_URI}" negate="true" pattern="localhost" />
</conditions>
<action type="Redirect" url="https://mycustomwebsite.com/{R:0}" appendQueryString="true" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
<add name="ASP.NET v4.0" autoStart="true" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated">
<processModel identityType="ApplicationPoolIdentity" loadUserProfile="true" setProfileEnvironment="true" />
</add>
Schema is stored in a Git repository. These are deployed between environments using a Git client or the Umbraco Cloud Portal.
Content and Media items are not stored in the Git repository. They must be transferred directly from the Umbraco backoffice using the Queue for Transfer option. Once queued, use the Deployment Dashboard in the Content section to complete the transfer.
Config file change
Yes
Schema deployment
No
File change (for example, CSS file)
No
Content or Media transfer
No
"Umbraco": {
"Deploy": {
"Settings": {
"AllowMembersDeploymentOperations": "Transfer",
"TransferMemberGroupsAsContent": true,
}
}
}
"Umbraco": {
"Deploy": {
"Settings": {
"TransferFormsAsContent": true,
}
}
}
"Umbraco": {
"Deploy": {
"Settings": {
"TransferDictionaryAsContent": true,
}
}
}
The associated .uda
file.
The entry in the database.
The item will still be visible in the backoffice.
The associated .uda
file.
The entry in the database.
The associated .cshtml
file (the view file)
The template file will be empty, but still be visible in the backoffice.
The associated .uda
file.
The entry in the database.
The language will still be visible in the Backoffice/Content dashboard (for multilingual content).
X-Umb-Webhook-Version: 1
Content-Type: application/json; charset=utf-8
{
"Id": "40810bf1bbbfc16dd273162509de297ad386fb4e",
"Status": "success",
"StatusText": "",
"AuthorEmail": "[email protected]",
"Author": "Laughing Unicorn",
"Message": "Adding document type 'LaughingUnicornLaughs'",
"Progress": "",
"ReceivedTime": "2017-10-02T11:19:00.4984213Z",
"StartTime": "2017-10-02T11:19:04.1328336Z",
"EndTime": "2017-10-02T11:19:24.3470224Z",
"LastSuccessEndTime": "2017-10-02T11:19:24.3470224Z",
"Complete": true,
"ProjectName": "laughingUnicorn",
"ProjectUrl": "s1.umbraco.io/project/laughingunicorn",
"SiteUrl": "laughingunicorn.s1.umbraco.io",
"EnvironmentName": "Live",
"Commits": [
{
"AuthorName": "Laughing Unicorn",
"AuthorEmail": "[email protected]",
"Message": "Adding document-type 'LaughingUnicornLaughs'\n",
"Timestamp": "2017-10-02T07:16:39",
"ChangedFiles": [
"data\\revision\\document-type__9ac71ecba6d84344af4bcbf43ab6cd80.uda"
]
},
{
"AuthorName": "Laughing Unicorn",
"AuthorEmail": "[email protected]",
"Message": "Adding template 'LaughingUnicornLaughs'\n",
"Timestamp": "2017-10-02T07:16:38",
"ChangedFiles": [
"Views\\laughingunicornlaughs.cshtml",
"data\\revision\\template__80d64e8172df46479ccf330bb9f63f2c.uda"
]
}
]
}
<ItemGroup>
<PackageReference Include="Umbraco.Deploy.Cloud" Version="9.0.1" />
<PackageReference Include="Umbraco.Deploy.Forms" Version="9.0.1" />
</ItemGroup>
Config/UmbracoDeploy.config
Config/UmbracoDeploy.Settings.config
In this article, you can learn about how Umbraco Forms is handled on Umbraco Cloud and read about the workflow and best practices.
Umbraco Forms is a package that is included with your Umbraco Cloud project. It gives you a nice integrated UI, where you can create Forms for your website. The package is built specifically for Umbraco and is maintained by Umbraco HQ.
Read more about the product in the Umbraco Forms documentation.
Forms are handled like content and media. This means that you can transfer your Forms between environments, using the same workflow you use for content and media.
Definitions for each specific Form, its fields, workflows, and prevalues are all stored in the Umbraco database.
Entries submitted are not transferred to the next environment, as they are environment-specific. If you need to move entries from one environment to another, you need to run an export/import script on the databases.
You can work with Forms in an environment of your choice. When you need to test or use your Forms in another environment you can:
Transfer the Forms to the next environment using Queue for transfer or
Restore the Forms on an environment lower in the workflow.
For more information on how to handle content transfer/restores on Umbraco Cloud, check out the following articles:
Umbraco Forms is part of the auto-upgrades on Umbraco Cloud. Whenever a new patch is ready for release, we will automatically apply it to your Cloud project. There will be a notification in the Umbraco Cloud Portal at least 5 days before we roll out new versions.
To avoid having the auto-upgrades overwrite any of your custom settings, we strongly encourage that you use config transforms when you need custom configuration. Additionally, use Themes when you need to customize your forms.
When a new minor version of Umbraco Forms, like 10.x or 11.x, is available, you'll have the option to upgrade your project. When your project is eligible to receive the new version, you will see an "Upgrade available!" label on your left-most environment.
In this section, you can find information about version-specific changes that might affect the way Umbraco Forms works on your project.
In Umbraco Forms version 9.0.0+, it is only possible to store Form data in the database.
If you want to upgrade to Umbraco 9 and are using Forms, you should first migrate the Forms to the database using Forms 8. See the Umbraco Forms in the Database article.
Prior to Umbraco 8.5.0, all forms data was saved as .json
files in the App_Data/UmbracoForms
directory in the file system.
As of Umbraco 8.5.0, you have the option to persist all Forms data directly in the database. This behavior defaults to all new sites created on Umbraco Cloud since September 2020. If your Cloud project was created before, you will need to upgrade the Umbraco Forms version. Additionally, apply a setting to perform the migration of the Umbraco Forms data.
To switch to persisting all definitions for Umbraco Forms data in the Umbraco database, follow these steps:
Make sure all environments are upgraded to at least Umbraco Forms version 8.5.2 and Deploy 3.5.0.
Make sure your Forms are in sync between all your Cloud environments.
Clone down your left-most environment.
Restore content and Forms to the local clone.
Open the configuration file App_Plugins\UmbracoForms\UmbracoForms.config
from your local clone.
Add the following key in the <settings>
section and make sure the value is set to True
:
<setting key="StoreUmbracoFormsInDb" value="True" />
Save the file.
Spin up your local clone and verify that everything works as expected.
Now it is time to deploy the setting to your Cloud environments.
Follow the steps outlined below for each environment for the migration to run on each of them.
Access KUDU.
Navigate to site/wwwroot/App_Data
.
Delete the UmbracoForms
directory.
Push the updated setting to the environment.
To run the migration, restart the environment from the Cloud portal.
From the Umbraco Backoffice, Queue and transfer the Forms to the environment.
Repeat steps 1-5 for each of your Cloud environments.
Did you create your project before June 2018?
Then your Umbraco Forms data might still be handled as metadata.
You will need to follow the steps below to persist Umbraco Forms data in the Umbraco database.
Find and open Config\UmbracoDeploy.settings.config
on your local machine.
Update the transferFormsAsContent
value to true
:
<?xml version="1.0" encoding="utf-8"?>
<settings xmlns="urn:umbracodeploy-settings">
<forms transferFormsAsContent="true" />
</settings>
Remove all existing data\revision\forms-form__*.uda
files, so it's not possible to accidentally revert to this state (removing UDA
files won't remove the actual form on deploy).
Push the change back to the Cloud environment.
If you have more than one Cloud environment, make sure to deploy the change through to all of them.
You are now able to queue your Forms for transfer between the Cloud environments, like content and media.
If you do not have the transferFormsAsContent
setting in the UmbracoDeploy.settings.config
file, you do not need to make any further changes.
Sometimes you might experience that you lose the tree in the Forms section in the backoffice after a deployment. To get the tree back, all you need to do is restart the environment from the Umbraco Cloud Portal.
Price
Free
Depends on plan
Duration
14 days
Unlimited
Environments
Live
Dev, Staging, Flexible, Live (depending on the plan)
Features
Limited
Latest Features (can be customized)
Production Use
Not allowed
Fully supported
Domains
1 assigned domain*
Custom domains
Support
Not included
Depends on plan
Upgrade Available
Yes
Depends on plan
Environments are a core part of your Umbraco Cloud project. This is where you develop, write, build, and eventually publish your website.
An Umbraco Cloud environment is defined as a workspace and is also a Git repository. When you have more than one environments on your project, these environments act as branches of the main repository.
Umbraco Cloud uses a deployment model that relies on Git and other core technology. This gives you the option to move both content and structure files from one environment to another. Learn more in the Deployment section.
You can have multiple environments in your Umbraco Cloud project, with two types available: Mainline Environments and Flexible Environments.
The image below shows a Cloud setup including two mainline environments and one flexible environment connected to the left-most mainline environment.
A mainline environment serves as the root deployment pipeline, responsible for managing code and content flow. Each mainline environment is a part of the left-to-right deployment workflow.
The left-most mainline environment is where you can connect to your local machine using Git. This environment is often called the Development environment.
The right-most mainline environment is your live website, often called the Live or Production environment.
Each mainline environment can have one or more flexible environments branching off from it.
A flexible environment is an environment that branches off a mainline environment. It is positioned vertically from the mainline deployment flow.
Changes made on a flexible environment can only be pushed to the next designated Mainline Environment in the pipeline.
Technically, the flexible environment is connected only to its mainline environment using a Git remote. This ensures that changes follow a structured path while allowing flexibility in development workflows.
Learn more about how this works in the Flexible Environments article.
Starter
Standard
Professional
Each environment on Umbraco Cloud has both a Git repository and a folder with your actual live site. The Git repository is what you clone down when you work with the project locally, and it's where your changes are pushed to.
The live site (/site/wwwroot/
) contains the files used to show your website to the world. When pushing changes from your local machine, they are pushed to the Git repository (/site/repository/
). When this finishes successfully, the changes are copied into the live site.
An appSettings.json
file holds all configurations for the Umbraco CMS project within the Cloud project. This file follows ASP.NET standards as they are tied to the Umbraco CMS installation.
It is possible to set up specific configurations for each environment:
Clone the appSettings.json
file.
Rename it by adding the environment name: appSettings.{EnvironmentAlias}.json
.
The EnvironmentAlias
is fetched from the Environment variable named DOTNET_ENVIRONMENT
. This variable can be found in the Environment Variables section of Kudu on the environment. You can read more about ASP.NET Configuration in the official Microsoft documentation.
The value of the DOTNET_ENVIRONMENT
environment variable can be managed through the Advanced settings in the Configuration section of the Cloud Portal.
Learn more about how to transform configuration files in the Config Transforms article.
All the team members you add through the Umbraco Cloud Portal will also be added as backoffice users in your environments. You can also add users directly in the backoffice of your Umbraco Cloud environments. If you do this, the user will not have the option to deploy changes between the environments.
Read more about this and team member roles in the Team Members article.
Each of your Umbraco Cloud environments has its own SQL Azure database. You have full access to the databases, and you can create custom tables as you'd expect from any other hosting provider.
Learn more about how to connect to your Umbraco Cloud databases in the Database article.
Aside from viewing the files when cloning down the project to your local machine, you also have access to Kudu (Power Tools).
Kudu is a dashboard that allows you to browse, view, and edit all the files in your environments. We recommend using the tool only when you are following one of our guides.
In the Power Tools article, you can read more about how to access the dashboard, and how we recommend using it.
Each of your Umbraco Cloud environments has a Git repository and therefore also a Git history. We've made a simplified view of this Git history in the Cloud Portal. The History is found via the action menu available on each environment in the environments overview on your project.
In the History view, you'll be able to see what file changes have been made in the environment.
An article explaining how Umbraco Users are working on Umbraco Cloud.
On Umbraco Cloud, users work in almost the same way as on a normal installation of Umbraco. However, there are a few more settings available for the backoffice users on Umbraco Cloud.
In this article, we will show how users work, as well as explain the different settings for users on Umbraco Cloud.
Umbraco ID is a centralized login for all users on Umbraco Cloud, both team members and Umbraco Backoffice users. It is to log in to the Umbraco Cloud Portal, projects, as well as cloning down a project to your local machine.
When working locally the initial login will go through Umbraco ID and the online login flow. After the initial login, you can set a password on your user or create a new local login for the backoffice.
There are two ways of adding a user to your backoffice on Umbraco Cloud.
You can add them as a team member) from the project portal on Umbraco Cloud.
By default, when added as a team member, they are added as users to the backoffice of all the environments as administrators.
Users can also be invited directly from the backoffice of your Umbraco Cloud project, from where you can give them different permissions.
Check out the Users article for an in-depth explanation about Umbraco users in general.
As mentioned, it is possible to invite new Users to your Umbraco Cloud project through the backoffice.
To invite a User you need to do the following:
Go to the backoffice of your Umbraco Cloud project.
Go to the Users section in the backoffice.
Click on the Invite User button.
Enter the Name, Email, add a User Group to assign access and permissions, and enter a new Message for the invitation.
Once the User has been invited they will receive an invitation for the project.
If the invited person already has a user on Umbraco Cloud they will see the invitation in the project portal under "Project Invites".
If the User being invited does not have a User on Umbraco Cloud, they will receive an email asking them to create one.
Once the User has been created, it is now possible for them to log in to the Umbraco Cloud portal.
From here they will be able to see a pending invitation to the project they have been invited to.
Once the invitation has been accepted, they can now access the project through the Umbraco Cloud portal and access their site from there.
On Umbraco Cloud, it is possible to control which users have access to transferring and restoring content and media on your Umbraco Cloud project.
This can be done when creating a new User Group or when editing an existing group.
You can decide whether a specific User Group has permission to do restores and queue content for transfer to the next environment.
It is also possible to get Granular control on a per-node basis to restrict restores and transfers of specific content on your site. This can help avoid mistakes and ensure that the proper workflows are followed.
There are two ways that you can set up these permissions:
Create a new User Group
Edit an existing one
To create a User Group, go to the Users section of the backoffice.
Click on "Groups" in the right corner, from here you are able to either create a new User Group or edit an existing one.
Click "Create group"
Scroll down and go to the "Content" heading in the "Default permissions" section. Here you can see three options:
Decide whether the users in the new User Group can restore items for the whole workspace, restore items for a tree, or partially restore items and click Save.
To edit an already existing User Group:
Go to the User Group you want to edit, e.g Editors or Writers.
Update the permissions and click Save.
It is also possible to set Granular permissions for a specific content node on your Cloud project.
You can set the permission when you are creating or editing an existing User Group.
Add the setting for Granular permission for your content nodes at the bottom of the User Group.
Click "Add".
Choose the content node which you want to set the Granular settings for.
Set permissions for restore, partial restore, and queueing content for transfer.
Once you have added your custom hostnames to your Umbraco Cloud project, it's possible to configure certain transport security options for your custom hostnames. These options all relate to the traffic that goes through your hostname from the origin (Umbraco Cloud) to the end-user. This includes the protocols and encryption used to transport your website and assets from the webserver to the browser.
Currently, these options are available:
HTTP/2 (default: on)
TLS 1.3 (default: off)
Minimum TLS Version (default: 1.2)
Web Application Firewall (WAF) (default: on)
Web Application Firewall Sensitivity (default: off)
Managed Challenge (default: off)
Continent Managed Challenge (default: none)
When a new custom hostname is added to a Project it will have the default settings applied. But you can change the defaults for your Project, so new custom hostnames will get the default settings you have chosen.
The first usable version of HTTP was created in 1997. Because it went through different stages of development, this first version of HTTP was called HTTP/1.1. This version is still in use on the web. In 2015, a new version of HTTP called HTTP/2 was created. HTTP/2 progressively enhances your website’s performance. When a browser supports HTTP/2, Umbraco Cloud will take full advantage of HTTP/2 performance benefits end to end. For older browsers or non-HTTPS requests, the traffic will fall back to HTTP/1.1.
You don’t need to choose between better performance and backward compatibility. This is why HTTP/2 is enabled by default for all new custom hostnames added to a Umbraco Cloud project.
Transport Layer Security (TLS) TLS 1.3 is the newest, fastest, and most secure version of the TLS protocol. SSL/TLS is the protocol that encrypts communication between users and your website. When web traffic is encrypted with TLS, users will see the green padlock in their browser window. By turning on TLS 1.3, traffic to and from your website will be served over the TLS 1.3 protocol when supported by clients. The TLS 1.3 protocol has improved latency, new features, and is supported in Chrome (starting with release 66), Firefox (starting with release 60).
The minimum TLS Version only allows HTTPS connections from visitors that support the selected TLS protocol version or newer. This option relates to the TLS versions mentioned above and the current default, which is TLS 1.2. If you want your website traffic to only use TLS 1.3 you can change the minimum version. But be mindful of the implications that this might have (see browser support above). You don't need to change the minimum version to use TLS 1.3.
A Web Application Firewall (WAF) is a security solution designed to protect web applications by filtering and monitoring HTTP traffic between them and the Internet. Common attacks like cross-site scripting, SQL injection, and file inclusion are mitigated by acting as a shield between the web application and potential threats. For more detailed information, please refer to our WAF section.
The Umbraco Cloud WAF supports sensitivity configuration, extending the default WAF protection. The default WAF and WAF sensitivity configuration options don't interact and can be controlled separately. It is recommended to configure WAF sensitivity early in the project and adjust it based on the performance.
Low severity configuration will block malicious requests with high confidence - blocks less requests.
High severity configuration will block malicious requests with medium confidence, providing stricter filtering - blocks more requests.
Off configuration will not block any requests.
A managed challenge is a lightweight JavaScript-based page that detects users without user input. After successfully passing a challenge, the user will receive a cookie. Users with a cookie won't be asked to pass another challenge for 30 minutes anywhere on the project/hostname.
Enabling the Managed Challenge presents an automatic CAPTCHA to all requests for the project/hostname. The managed challenge will ensure that only human users will be able to access the content on the website. Presenting an automatically managed CAPTCHA is useful in cases when a website is experiencing higher load. Higher load on the website can be caused by any reason, such as, DDoS attack, aggressive scraped by bots, or high demand. Enabling a managed challenge will ensure that all of your website's resources are delivering value to the end users.
Selecting continent(s) in the list will present a managed challenge to all traffic from the continent(s). Continent-based managed challenge presents a challenge meant to only pass through the human users requesting the website from selected continents. A continent-based managed challenge is useful when a website's primary users live on a specific continent. By presenting a challenge to selected continents, you can block all malicious traffic from the continent while allowing humans to pass through.
All continents are supported, as well as presenting a challenge to all requests from the Tor network.
Access to the different options varies depending on the Umbraco Cloud plan your project is on. Currently, the features are available as follows:
Starter: HTTP/2
Standard: HTTP/2, TLS 1.3, Minimum TLS Version
Professional: HTTP/2, TLS 1.3, Minimum TLS Version
Click Security from the Settings dropdown on your Umbraco Cloud Project. The Security settings are scoped per environment, so if you have multiple environments and add your custom hostnames to different environments you can select the environment at the top of the page.
Aside from the environments, the Security page is divided into 'Default Settings' and 'Hostname Specific Settings'. Use the Default Settings to configure what should be applied to new and existing custom hostnames by default.
If you want to have different security options for different custom hostnames, select the custom hostname under Hostname Specific Settings and adjust the options. This might be useful if you want to test the different options on another custom hostname than your primary hostname.
On the security page, it's possible to enable or disable the different cipher suites for your project.
Enabling or disabling the different ciphers can be done under the minimum TLS version in the Ciphers drop-down:
Like the other Hostname Specific Settings, you can enable/disable specific ciphers for your custom hostname based on your needs.
With the Deploy Dashboard, it is possible to get an overview of your Umbraco Deploy installation and perform Deploy operations.
In this article, you'll find an overview of the different sections on the Deploy dashboard and how they can be used.
To access the Deploy dashboard, follow these steps:
Log in to the Umbraco Cloud Portal.
Select your project from the project list.
Choose the environment you want to work with (for example, Development, Staging, or Live).
Click Backoffice to open the Umbraco backoffice for that environment.
Navigate to the Settings section in the Backoffice. You will find the Deploy Dashboard at the end.
Here you can see whether the latest deployment has been completed or failed. You can see the version of Umbraco Deploy you are running, and the last time an operation was run.
With the Deploy operations, you can run different operations in Umbraco Deploy.
Below you can read what each operation will do when run through the dashboard.
Running this operation will update the Umbraco Schema based on the information in the .uda
files on disk.
Running this operation will extract the schema from Umbraco and output it to the .uda
files on disk.
Running this operation will clear the cached artifact signatures from the Umbraco environment. This should not be necessary, however, it may resolve reports of schema mismatches when transferring content that has been aligned.
This operation will set the cached artifact signatures for all entities within the Umbraco environment. Use this when signatures have been cleared and you want to ensure they are pre-generated before attempting a potentially longer restore or transfer operation.
Running this operation will download a zip file with all the Deploy artifacts representing the Umbraco schema in the form of .uda
files.
This operation is useful if you want to move to another Umbraco instance and migrate the data with you.
In the Configuration details, you can see how Umbraco Deploy has been configured on your environment. You get an overview of the Setting options, the current value(s), and notes help you understand each of the settings. Updates to the need to be applied in the appsettings.json
file.
The Schema Comparison table shows the schema information managed by Umbraco Deploy.
You can see a comparison between the information that is held in Umbraco and the information in the .uda
files on disk.
The table shows:
The name of the schema
The file name
Whether the file exists in Umbraco
Whether the file exists
Whether the file is up-to-date
You can also view details about a certain element by selecting "View Details".
This will show the difference between entities stored in Umbraco and the .uda
file stored on disk.
Learn how to configure a CI/CD pipeline in Azure DevOps and GitHub Actions Workflows using the sample scripts provided.
You'll find example shell scripts and pipeline configurations in the Sample scripts section, covering both Azure DevOps and GitHub Actions Workflows.
Umbraco Cloud repositories are not meant to be used as source code repositories. More details here.
Once you commit your code to Cloud the build pipeline converts your C# code to DLLs and deploys it on the respective environment.
You can use Azure DevOps as an external repository and with the pipelines, it will automatically keep your Azure DevOps source code repository in sync. The sync is done with the git repository of Umbraco Cloud of the development environment.
Before proceeding, you'll need an Umbraco Cloud project and a CI/CD pipeline. You will also need the required files to add to your pipeline for successful interaction with the Umbraco Cloud API.
Pick an Umbraco Cloud project, preferably with a development environment (but not a requirement)
Create a new Umbraco Cloud Project.
You can take a trial here
Create a new project in the Umbraco Cloud Portal
Use one of your existing projects.
Create a new or an existing CI/CD pipeline in Azure DevOps or GitHub Actions.
To get started with API interactions, you'll need to obtain your Project ID and API key. If you haven't already enabled the CI/CD feature, follow these steps:
Navigate to the Umbraco Cloud Portal and select your project.
Go to Settings
-> Advanced
. This is where you can generate an API key and find your Project ID.
Click on "Activate CI/CD Flow" toggle to enable the feature.
The API key is tied to the specific project for which it is generated. Make sure to keep it secure in Azure or GitHub, as it will be used for all subsequent API interactions related to that project.
With the feature enabled a button called "CI/CD Environment Targets" becomes available. Clicking the button will show a modal with your environments and their aliases. Next to the environment alias is a button you can click to copy the alias.
Below we have a couple of examples of how to set up a CI/CD Pipeline using either Azure DevOps or GitHub Actions.
Each guide describes:
How to set up a new repository in either GitHub or Azure DevOps
Get a copy of your Umbraco Cloud project into that repository
And finally how to configure a new pipeline using the provided samples
The sample pipelines are using either Bash-scripts or Powershell-scripts to facilitate communication with the Umbraco CI/CD API.
Details the setup of a CI/CD pipeline using Azure DevOps.
Details the setup of a CI/CD pipeline using GitHub Actions.
These are the guides for the old samples, relevant if you are using version 1 endpoints.
When adding a hostname to Umbraco Cloud, we ask you to point your DNS records to Umbraco Cloud.
Sometimes it's difficult to change the DNS record to point to Umbraco Cloud due to:
Existing Proxy/Web Application Firewall (WAF) in front of the hostname (hostname is proxied outside of Umbraco Cloud)
Requiring a zero downtime migration to Umbraco Cloud (hostname needs to be ready in Umbraco Cloud before pointing DNS records to Umbraco Cloud)
Add a hostname to Umbraco Cloud, activate the routing, and generate a certificate for the hostname before pointing it to Umbraco Cloud.
After the pre-validation completes, you can keep using an outside proxy or migrate the hostname fully to Umbraco Cloud. This is done by pointing the DNS records to Umbraco Cloud.
Use pre-validation in any of the following situations:
You're dealing with live or production domains that require 100% uptime.
The hostname will be proxied in front of Umbraco Cloud
You want to avoid the brief downtime that may occur while Transport Layer Security (TLS) certificates are being validated after pointing DNS to Umbraco Cloud.
The following steps outline how to use hostname pre-validation.
After adding your custom hostname in the Umbraco Cloud Portal:
Navigate to Hostname Settings.
Toggle the Pre-Validation option to enable it.
Umbraco Cloud will provide two DNS records:
A TXT record used to verify domain ownership.
A CNAME record that is required for the TLS certificate issuance.
Log in to your DNS provider or domain registrar.
Add the records provided:
TXT
_cf-custom-hostname.\<hostname\>
Provided by Umbraco Cloud
CNAME
_acme-challenge.\<hostname\>
Points to a domain under Umbraco's control (for example, \<hostname\>.xxxx.dcv.cloudflare.com
)
Return to the Hostname page in Umbraco Cloud. You'll see a Hostname Pre-Validation status dialog showing the current status of your validation.
The status will change to Active when everything is set up correctly. The hostname is validated, and the TLS certificate is issued.
Once the certificate is issued:
Update your domain's A record or CNAME to point to Umbraco Cloud DNS.
Update your proxy to serve traffic from Umbraco Cloud.
Your site will be accessible securely via HTTPS without any downtime because the certificate and routing setup are in place.
After the hostname is active and secure:
Go back to Hostname Settings and disable the pre-validation method.
Remove the TXT and CNAME records you added for pre-validation.
Umbraco Cloud will automatically handle future certificate renewals without the need for manual DNS management.
If you plan to use a custom certificate, the Hostname Pre-Validation method can be used to prove ownership of the hostname. This is done before binding the custom certificate.
You can do this by following these steps:
Enable Pre-Validation for the Hostname.
Add the TXT record provided to your Domain Name System (DNS) settings. The record will prove ownership of the domain.
Upload a custom certificate and set a binding to the Hostname.
Wait a couple of minutes, then disable Pre-Validation for the Hostname. The status will now show "Manual" for the Hostname.
In this article, you'll find a step-by-step guide on how to apply a hotfix to a Live environment using only Git.
GitKraken
You have an Umbraco Cloud project with two environments, Development and Live.
You have been working on building the site on a local clone of the Development environment. Now you want to send some but not all changes to the Live environment.
A set of commits have been pushed from your local clone to the Development environment. Out of these commits, you only need the changes from two of the commits in the Live environment for now.
Here are the steps to follow to apply selected changes to the Live environment without deploying from Development to Live.
Open your local clone of the Development repository in GitKraken (or your preferred Git client).
Make sure that the changes you push directly to your Live environment are already pushed to the Development environment. This will ensure that your environments are kept in sync.
Choose the commit where you want to create a new branch.
This branch should be created in an earlier commit that is corresponding to the state of the Live environment (before the changes you've made locally have been committed).
With the new Hotfix branch checked out, it's now time to cherry-pick the commits you want to apply to the Live environment.
Right-click the commit you want and choose "Cherrypick commit".
You will be asked if you want to commit this directly to the new branch - Choose Yes.
Choose No if you want to create a new message for the commit.
You can cherrypick as many commit as you like.
Your Git history will now look something like this.
Before you push the newly created branch to Umbraco Cloud we need to change the remote destination. If you hit Push now, the branch would be pushed to the Development environment. You need to add the Live environment as a new remote.
Find the clone URL for the Live environment in the Umbraco Cloud Portal.
In GitKraken add a new remote, by clicking the + next to Remote.
Give the new remote a name - like Live, and add the clone URL for the Live environment to both Push URL and Pull URL - click Add Remote.
You will be prompted to authenticate - use your Umbraco Cloud credentials.
You will see that the history from the Live repository is visible in the Git history.
Click Push.
Choose to push to the newly added remote, and write master
to make sure you are pushing to the master branch on the Live environment.
Hit Submit and the push will start.
Find a guide on how to extract the files in the Manual Extraction article.
You have now applied a hotfix to the Live environment. Make sure that you merge and remove the branch you've created on the Development repository before pushing it to the Development environment on Cloud. You can always create a new branch if you need to apply another hotfix to the Live environment.
When you are ready to build on your Development environment, follow the normal workflow of the Cloud to deploy the changes to the Live environment.
This guide can also be used for applying a hotfix to a Staging environment.
The above describes the workflow in GitKraken. You can use a git client of your choice or Git terminal/command prompt if you are comfortable with that.
Learn how to configure SMTP settings for your Umbraco Cloud project to enable email functionality for workflows, user invitations, and password resets.
In many cases, you might want to send emails from your Umbraco Cloud project. This could be for inviting users to the Backoffice or as part of an Umbraco Forms Workflow. To do so, you need a SMTP server and must configure it in your appsettings.json
file.
SMTP servers are not included with Umbraco Cloud projects. You will need to set up your own SMTP server elsewhere and configure it with your Umbraco Cloud project.
Configuring an SMTP service for your Umbraco Cloud project enables email features like user invitations, password resets, and email workflows in Umbraco Forms.
When working with Umbraco Forms, you can set up email workflows. This allows you to create forms that send out emails. For example, a contact form where customers can directly email you.
To set up an email workflow, you must configure the SMTP service. In some cases, you may also need to configure a SenderEmail for notifications.
Configure SenderEmail in the appsettings.json
file under Umbraco:CMS:Global:Smtp
. For more details, see the section in the Workflow Types article.
You need to configure an SMTP service for Backoffice users in the following cases:
Inviting a New User - When adding a user to your project from the Backoffice, an email invitation is sent. If you haven't set up an SMTP service, a fallback ensures the email is still delivered. However, this fallback only applies to user invitations.
Password Resets - If a Backoffice user forgets their password, they must request a reset link via email. This feature requires an SMTP service to be configured, as no fallback is available.
You can reset your Umbraco ID password from the Umbraco Cloud login page. Find more details on Umbraco ID, see the article.
Consider the following services for configuring your SMTP settings:
- quick to set up and developer-friendly.
- quick to set up.
- mainly for developers, as it is a bit more on the technical side.
- EU-based and GDPR compliant.
To configure SMTP:
Set up the SMTP server.
Configure the service as follows:
For Umbraco 10 and above, configure SMTP in the Umbraco:CMS:Global:Smtp
section in your appsettings.json
file.
To configure the SMTP service, enter the following details:
From: The default email address that will send out emails.
Host: The IP address or hostname for your SMTP service.
Port: The port number for your SMTP service.
SecureSocketOptions: Specifies the security used for the connection.
Username: Your SMTP service username.
Password: Your SMTP service password.
For legacy Umbraco (version 7 and 8), configure SMTP in the system.net/mailSettings
section of the web.config
file.
To configure the SMTP service, provide the following details:
Host: The IP address or hostname for your SMTP service.
UserName: Your SMTP service username.
Password: Your SMTP service password.
After configuring these settings, you can send emails from your Umbraco Cloud project. For more information on SMTP configuration, see the article.
Security has high priority on the Umbraco Cloud platform. Learn more about the different options and features related.
In this article you can find information about security on Umbraco Cloud.
All Umbraco Cloud websites use HTTPS by default. Both the default {projectName}.{region}.umbraco.io and custom domains are protected by periodically renewed certificates issued by Cloudflare. This service is offered as part of Umbraco Cloud for all plans.
Custom certificates can be used with all custom domains. Please refer to our .
As of April 2020, we've deprecated support for TLS 1.0 & TLS 1.1.
TLS 1.2 is now the default supported TLS protocol going forward.
On the Security page for your cloud project, you can change the default settings for both TLS and HTTP.
Learn more about how this in the article.
Umbraco Cloud Websites support the following TLS ciphers in this order:
TLS\_ECDHE\_RSA\_WITH\_AES\_256\_CBC\_SHA384
TLS\_ECDHE\_RSA\_WITH\_AES\_128\_CBC\_SHA256
TLS\_ECDHE\_RSA\_WITH\_AES\_256\_CBC\_SHA
TLS\_ECDHE\_RSA\_WITH\_AES\_128\_CBC\_SHA
TLS\_DHE\_RSA\_WITH\_AES\_256\_GCM\_SHA384
TLS\_DHE\_RSA\_WITH\_AES\_128\_GCM\_SHA256
TLS\_DHE\_RSA\_WITH\_AES\_256\_CBC\_SHA
TLS\_DHE\_RSA\_WITH\_AES\_128\_CBC\_SHA
The different Ciphers can be enabled or disabled on the security project settings page for your Cloud projects.
It's possible to enforce HSTS: by adding the headers to your website. This grants Umbraco Cloud Websites an A+ security rating on sslabs (March 2020).
You can add the header by modifying system.webServer/rewrite/outboundRules section in your web.config:
Alternatively this can be done in Startup.cs inside of the ConfigureServices method with the following C#:
This adds the "Strict-Transport-Security" header telling browsers how long the browser should not make any HTTP requests to this domain. In this example 63072000 seconds or 730 days is two years.
In order to integrate older external applications to access Umbraco Cloud Websites you might have to modify the TLS support in the .Net application.
For ASP.NET applications, inspect the <system.web><httpRuntime targetFramework>
element of web.config to find the version of the .NET Framework your application is using. .NET applications on .NET 4.7+ are using the OS specified TLS protocols. In Windows 8 & 10, Windows Server 2012 & 2016 TLS 1.2+ is used by default, therefore no actions necessary. .NET applications lower then 4.7 require updates to ensure they can communicate using TLS 1.2 by default.
More information specifically from Microsoft about .Net applications and Transport Layer Security (TLS) support can be found . For other application frameworks/languages we encourage to lookup their respective documentations.
Umbraco Cloud supports both HTTP2 and HTTP3 protocols.
By default, all ports are closed to secure them against external attacks. This is done for all ports apart from 80 (HTTP) and 443 (HTTPS).
Umbraco Cloud offers a multitude of features allowing you to block access to different resources.
Basic Authentication allows access to the Backoffice & Frontend of Umbraco Cloud Websites for authenticated users only.
IP based list allowing access to Frontend & Backoffice
IP based list allowing access to website database
WAF is or can be enabled on the custom hostname(s) you add to your Umbraco Cloud project. .
On Umbraco Cloud sites, you will find an ARRAffinity cookie. This is not sent over HTTPS, and might to some, look like a security risk.
It is not a security risk. This cookie is set by the load balancer (LB) and only used by the LB to track which server your site is on. It is set by the software we use (Azure App Service) and only useful when your website is being scaled to multiple servers. In Umbraco Cloud we cannot scale your site to multiple servers so the cookie is effectively unused.
There is no vulnerable data in this cookie and manipulating or stealing this cookie can not lead to any security issues.
In the future, the cookie will be set to HttpOnly
on Umbraco Cloud to conform to best practices. This does not mean that there's anything wrong with the current way it is set.
For more information see the .
You can block people and bots (like a malicious scanning bot) from accessing your website by adding their IP addresses to a deny-list.
The following rule can be added to your web.config file in the system.webServer/rewrite/rules/
section.
For anyone using the 123.123.123.123 IP, this will result in them getting a 502 error. You can choose your own error.
The original flow has been improved based on the feedback received from users of the feature.
This article covers how to migrate from version 1 samples to version 2.
You can keep using the old endpoints and samples, but you will miss out on the enhancements. There are currently no plans to deprecate the version 1 endpoints.
The biggest enhancement is the ability to target different environments. You can now target the flexible and the leftmost mainline environment.
The new endpoints are created to accommodate this enhancement, meaning you will have to supply a target environment alias in some requests.
The initial flow has been slightly changed. The upload of a deployment package is no longer tied to a "deployment-meta", but is now a separate step. Every uploaded artifact can be queried by the API, similar to querying deployments via the API.
When you request a deployment, you now also need to supply an artifactId
. More options are available when deploying.
To showcase how to use the version 2 endpoints and flow, updated samples are provided.
Start by deleting the scripts and YAML files you initially got from the CI/CD samples:
Delete the YAML:
azure-release-pipeline.yaml
cloud-sync.yml
cloud-deployment.yml
You probably only have either PowerShell or Bash.
PowerShell files to delete:
Add-DeploymentPackage.ps1
Apply-Patch.ps1
Get-ChangesById.ps1
Get-LatestDeployment.ps1
New-Deployment.ps1
Start-Deployment.ps1
Test-Deployment.ps1
Bash files to delete:
apply_patch.sh
create_deployment.sh
get_changes_by_id.sh
get_deployment_status.sh
get_latest_deployment.sh
start_deployment.sh
upload_package.sh
Copy the scripts from the sample repository's to the corresponding folder in your repo:
If you prefer PowerShell:
All .ps1
files in V2/powershell
should be copied to devops/powershell
All .yaml/.yml
files in V2/powershell/azuredevops
should be copied to devops
If you prefer Bash:
All .sh
files in V2/bash
should be copied to devops/scripts
All .yaml/.yml
files in V2/bash/azuredevops
should be copied to devops
Now you need some important values: Project ID and Target environment alias.
Open the azure-release-pipeline.yaml
in your favorite editor.
Replace ##Your project Id here##
with the project ID and the value ##Your target environment alias here#
with the environment alias.
You can use any of the available aliases, but to get similar functionality as before, select the environment described as Leftmost mainline
.
Start by deleting the scripts and YAML files you initially got from the CI/CD samples:
Delete the YAML:
main.yml
cloud-sync.yml
cloud-deployment.yml
You probably only have either PowerShell or Bash.
PowerShell files to delete:
Add-DeploymentPackage.ps1
Apply-Patch.ps1
Get-ChangesById.ps1
Get-LatestDeployment.ps1
New-Deployment.ps1
Start-Deployment.ps1
Test-Deployment.ps1
Bash files to delete:
apply_patch.sh
create_deployment.sh
get_changes_by_id.sh
get_deployment_status.sh
get_latest_deployment.sh
start_deployment.sh
upload_package.sh
Now copy the scripts from the sample repository's V2 folder to the corresponding folder in you repo:
If you prefer PowerShell:
All .ps1
files in V2/powershell
should be copied to .github/powershell
All .yaml/.yml
files in V2/powershell/github
should be copied to .github/workflows
If you prefer Bash:
All .sh
files in V2/bash
should be copied to .github/scripts
All .yaml/.yml
files in V2/bash/github
should be copied to .github/workflows
Now we need one important value: Target environment alias.
explains how to get the environment alias.
Go to your GitHub repository and enter the Settings
section.
On the left side menu, find the Security
section and click on Actions
.
Click on the tab Variables
.
Click on New repository variable
.
Call the variable TARGET_ENVIRONMENT_ALIAS
.
Use the environment alias as a value.
Click on Add variable
.
You can use any of the available aliases, but to get similar functionality as before, select the environment described as Leftmost mainline
.
This document describes when and what product updates are rolled out on Umbraco Cloud.
Umbraco CMS patch updates
Forms patch updates
Deploy
Internal Umbraco Cloud services (generally these updates will not affect running websites but in some cases, if they do we will notify Umbraco Cloud users via the status page)
When minor upgrades are available, you will need an additional mainline environment on your project in order to get the new version. Read the article for more details.
The status page will include all important rollout information:
We will release product updates only on Tuesday
The decision to roll out an upgrade will be made no later than the Thursday prior and the status page will be updated accordingly
A product upgrade will be rolled out if:
A fix needs to be shipped due to a critical issue in any product
A patch version of Umbraco Core is ready for release
A new version of Deploy is ready for release
A new version of Forms is ready for release
Umbraco Cloud reserves the right to roll out an emergency product fix to fix a critical issue at any time
Before a live upgrade is rolled out on Umbraco Cloud:
Write release notes and include special upgrade instructions and/or blog posts if necessary
Create a new version on the issue tracker
Take the build from AppVeyor and push to NuGet
Update our.umbraco.com release page
Update Umbraco Cloud’s site creation engine with the new version so that all new sites are built with the latest version
Run the auto-upgrader on Umbraco Cloud on a subset of test sites to verify there are no issues
Run the auto-upgrader on all Umbraco Cloud sites
This describes how a Umbraco Cloud project is auto-upgraded:
The upgrade payload will have been created for the specific product(s) being upgraded
The payload is a set of files (such as DLLs, and other ASP.NET website files)
The upgrader will verify that the home page of all the environments in the mainline environment is healthy, meaning they don’t return an HTTP status error. If all environments are ok, it will proceed.
The upgrader will take a snapshot of the left-most environments home page including its HTTP status code result and its HTML contents.
The payload is deployed to the left-most environments Git repository and committed with a tag for the product version being updated. This new Git repository commit will replace the Umbraco product assembly (DLL) files along with other product files such as files located in /umbraco
, /umbraco_client
folders
The normal Umbraco Cloud deployment process is invoked and the repository files are deployed to the website
The upgrader will automatically ensure the web.config version and the database version are updated so that the Installer/upgrade page is not shown
The upgrader will verify that the new HTTP status code returned from the left-most environments home page is OK and will verify that the HTML contents of the home page match that of the snapshot originally taken.
If either of these tests fails we will be notified and Umbraco will take appropriate measures to roll back the site to its previous state
The failed upgrade is then tracked for reporting and the customer will be notified if necessary
When the left-most environment is upgraded successfully, the upgrader will continue this same process for the next environment in the chain.
The upgrade process for patch and minor versions is the same for projects with child projects created off them. The difference is that we always upgrade the baseline as the first project, and afterward we upgrade the child projects. This ensures that any updates done from the baseline will also send the upgrade to the children.
It is important that developers understand what is considered a breaking change in Umbraco products. In most cases, an auto-upgrade will not have any breaking changes and we strive to ensure this is the case. However, in some rare cases, developers may be using Umbraco's internal code not intended for public consumption. In some releases, that code may change. It is important for developers to understand the risks of using Umbraco code that is not considered a breaking change when it is updated. This may directly affect a site that is auto-upgraded.
What is a breaking change is documented here:
No, it´s not possible to opt-out of product auto upgrades on Umbraco Cloud.
To support a site on Umbraco Cloud, all sites must run the latest versions of our products. That way, we know the sites are running in the most stable state.
<outboundRules>
<rule name="Add Strict-Transport-Security when HTTPS" enabled="true">
<match serverVariable="RESPONSE_Strict_Transport_Security" pattern=".*" />
<conditions>
<add input="{HTTPS}" pattern="on" ignoreCase="true" />
<add input="{HTTP_HOST}" pattern="localhost" negate="true" />
</conditions>
<action type="Rewrite" value="max-age=63072000; includeSubDomains; preload" />
</rule>
</outboundRules>
public void ConfigureServices(IServiceCollection services)
{
services.AddUmbraco(_env, _config)
.AddBackOffice()
.AddWebsite()
.AddComposers()
.Build();
services.AddHsts(options =>
{
options.MaxAge = TimeSpan.FromDays(730);
options.IncludeSubDomains = true;
options.Preload = true;
});
}
<rule name="RequestBlockByIP" patternSyntax="Wildcard" stopProcessing="true">
<match url="*"/>
<conditions>
<add input="{HTTP_CF_Connecting_IP}" negate="false" pattern="123.123.123.123"/>
</conditions>
<action type="AbortRequest"/>
</rule>
"Umbraco": {
"CMS": {
"Global": {
"Smtp": {
"From": "[email protected]"
}
}
}
},
"Umbraco": {
"CMS": {
"Global": {
"Smtp": {
"From": "[email protected]",
"Host": "127.0.0.0",
"Port": 587,
"SecureSocketOptions": "StartTls",
"Username": "[email protected]",
"Password": "password123/<API Key generated in your SMTP server account>"
}
}
}
},
<system.net>
<mailSettings>
<smtp from="[email protected]">
<network host="127.0.0.1" userName="username" password="password" />
</smtp>
</mailSettings>
</system.net>
Sometimes you might need to have a backup of your Cloud database. This can be accomplished directly on Umbraco Cloud.
When restoring a database backup on Umbraco Cloud, certain elements may cause issues:
SQL Server logins - Custom SQL Server logins (for example, admin, sysuser, etc.) may conflict with existing logins when restoring the database in the hosting platform.
Complex Database Objects - Custom complex database objects in SQL is an element with external dependencies or special server configurations, which may result in conflicts when restoring the database in our hosting platform.
On Umbraco Cloud, you can utilize our 35-day point-in-time recovery to create and download a bacpac
file from your project.
To create a backup follow the steps below:
Open your Cloud project.
Go to Backups in the Settings menu.
Click Create Backup.
Enter a description for your backup.
Choose the Environment from which you want to create the backup.
Choose the Date and Time for the backup to be created.
Click Create Backup.
When you click on the Create Backup button, the system will start creating a backup file in the form of a bacpac
file. Once the bacpac
file is created, you can download it by clicking on the download icon. If you want to delete any backups, click the delete icon next to the backup.
When a backup creation fails, you can click the triangle icon to view more details about the error.
CreateDatabaseBackupFailedUnableToFindResource
Metadata for new backup is missing.
CreateDatabaseBackupFailedUnableToFindOperation
Operation metadata for new backup is missing.
CreateDatabaseBackupFailedUnableToCreatePointInTimeRestore
Cannot create the temporary database used for point-in-time restore.
CreateDatabaseBackupFailedUnableToStartDatabaseRestore
Point-in-time restore on the temporary database failed.
CreateBackupJobContainerFailed
The job that creates and stores the backup file failed.
CreateBackupJobContainerUnknownError
An uncategorized error occurred during the job that creates and stores the backup file.
CreateBackupJobContainerTimeOut
Job for creating and storing the backup file took too long.
There might be times when you want to upload a database backup to Umbraco Cloud. You might need to restore your database to a certain point in time, or you might be migrating a project to Umbraco Cloud.
Follow the steps below to upload a .bacpac
file to your Umbraco Cloud project:
Go to your Umbraco Cloud project.
Go to the "Configuration" tab in the side menu.
Click on "Backup".
Click "Upload backup" under "Database Uploads to Umbraco Cloud".
Choose a .bacpac
file to upload to your project.
Write a description of the database you are uploading.
Click "Upload .bacpac".
Once the Database has been uploaded, restoring the backup to your environment is possible.
When an upload fails, you can click the triangle icon to view more details about the error.
ImportBackupAborted
User aborted the upload.
ImportBackupFailedUnknown
An unknown error occurred during the upload.
ImportBackupFailed
Upload took too long.
When restoring a database backup on Umbraco Cloud, certain elements may cause issues. For more details, see the Limitations section .
Once you have uploaded a backup, you might want to restore it to one of your environments. To restore a backup to an environment follow the steps below.
Click on the small watch on the right side.
Choose which environment to replace the database with the backup.
Optional: Create a Cloud Backup of the selected environment's database before restoring the backup.
Click "Restore backup"
Once you click "Restore backup" the database will be restored to your selected environment. Wait for it to finish and you will successfully have replaced your environment database with your backup.
Make sure to check your environment and see if everything works as expected and that the data from the backup is there.
Use the following steps:
Connect to your SQL Server using SQL Server Management Studio (SSMS).
Expand "Databases", right-click "Databases", then select "Import Data-tier Application...".
Proceed through the dialog, by browsing to the saved location of your bacpac
file, and then setting the options appropriate to your configuration
Complete the import dialog and the database will be restored.
There might be use cases, where you want to upload certain files to your Blob Storage programmatically rather than using Azure Storage Explorer.
In this article, we provide the steps to programmatically connect to your Umbraco Cloud Environments Azure Blob Storage containers and persist files programmatically.
These files within the folder will only be available on Azure Storage and are not publicly visible in Umbraco CMS. The only exception is that the files that can be shared publicly via the *.blob.core.windows.net
URL.
By the end of this article, you will have connected and uploaded a file to your Cloud Blob Storage.
The first thing to do if you want to connect to the Azure Blob Storage container of your environment is the credentials.
To find the connection details for your environment's Blob Storage, follow the steps below:
Go to your project on Umbraco Cloud.
Go to Configuration in the side menu.
Go to Connections.
Scroll down to Blob Storage Connection Details
Copy the credentials needed for connecting to Azure Blob Storage.
Follow the steps below to get started connecting to Azure Blob Storage programmatically:
Clone down your Umbraco Cloud Project. You can find more information on how to clone a project in the Working Locally article.
Run your project.
Install Azure.Storage.Blobs
package on your project. You can do it either via NuGet Package Manager on Visual Studio or install it via NuGet.
Run the project to complete the installation of the package.
Add a new class called BlobStorageService
which serves as a service that has a method to connect to Blob Storage:
using Azure.Storage.Blobs;
namespace UmbracoProject
{
public class BlobStorageService
{
public BlobContainerClient GetContainerClient(string connectionString, string containerName)
{
BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);
return containerClient;
}
}
}
Add a new class called BlobStorageComposer
to inject the service:
using Umbraco.Cms.Core.Composing;
namespace UmbracoProject;
public class BlobStorageComposer : IComposer
{
public void Compose(IUmbracoBuilder builder)
{
builder.Services.AddScoped<BlobStorageService>();
}
}
Add a new class called BlobStorageController
which serves as the Surface Controller:
using Azure.Storage.Blobs;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Core.Cache;
using Umbraco.Cms.Core.Logging;
using Umbraco.Cms.Core.Routing;
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Core.Web;
using Umbraco.Cms.Infrastructure.Persistence;
using Umbraco.Cms.Web.Website.Controllers;
namespace UmbracoProject;
public class BlobStorageController : SurfaceController
{
private readonly BlobStorageService _blobStorageService;
public BlobStorageController(
IUmbracoContextAccessor umbracoContextAccessor,
IUmbracoDatabaseFactory databaseFactory,
ServiceContext services,
AppCaches appCaches,
IProfilingLogger profilingLogger,
IPublishedUrlProvider publishedUrlProvider,
BlobStorageService blobStorageService)
: base(umbracoContextAccessor, databaseFactory, services, appCaches, profilingLogger, publishedUrlProvider)
{
_blobStorageService = blobStorageService;
}
// access the endpoint in backoffice via /umbraco/surface/BlobStorage/BlobUpdate
public async Task<IActionResult> BlobUpdate()
{
string SASUrl = "Replace this with the Shared access signature URL (SAS) from Umbraco Cloud settings";
string containerName = "Replace this with the Container Name from the Umbraco Cloud settings";
string connectionString = $"BlobEndpoint={SASUrl}";
BlobContainerClient containerClient = _blobStorageService.GetContainerClient(connectionString, containerName);
string localPath = "data";
Directory.CreateDirectory(localPath);
string fileName = Guid.NewGuid().ToString() + ".txt";
string localFilePath = Path.Combine(localPath, fileName);
try
{
// Write some content to the file
await using (StreamWriter writer = new StreamWriter(localFilePath))
{
await writer.WriteLineAsync("Hello, World! This file is created programmatically!");
}
}
catch (Exception)
{
// ignored
}
// Get a reference to a blob
string blobName = "FolderProgramatically/" + Guid.NewGuid().ToString() + ".txt"; //the blobName can be anything
BlobClient blobClient = containerClient.GetBlobClient(blobName);
Console.WriteLine("Uploading to Blob storage as blob:\n\t {0}\n", blobClient.Uri);
// Upload data from the local file
await blobClient.UploadAsync(localFilePath, true);
return Content("Check your Blob Storage to see your new file!");
}
}
The controller is used to create a directory named FolderProgramatically
and a .txt
file in Azure Blob Storage.
In the above code, update the SASUrl
and containerName
values with your own from the Umbraco Cloud Settings. To find these values, refer to the instructions in the Connect to Azure Storage Explorer to upload files manually article.
You can also secure the values in Secrets Management in the project Settings on Umbraco Cloud so you do not store them in code. For more information, see the Secrets Management article.
Run the project.
Visit the {{yourProjectURL}}/umbraco/surface/BlobStorage/BlobUpdate
endpoint in the backoffice of your project to manually trigger the creation of the file to the Blob Storage.
Connect to your Blob Storage and there you will find the folder and file that has been created programmatically:
Now that you are connected to Blob Storage programmatically, you can customize it to suit your upload needs.
For more information on how to work with Azure Blob Storage, see the following articles from Microsoft:
This article explains how Minor upgrades work in Umbraco Cloud.
When a new minor version is released, there are two ways to upgrade your project:
To enable automatic minor upgrades, follow these steps:
Go to your Umbraco Cloud project.
Navigate to Configuration -> Automatic Upgrades.
Enable Automatic Minor Upgrades.
With automatic upgrades enabled, all products on Umbraco Cloud will automatically be upgraded. This includes Umbraco CMS, Umbraco Forms, and Umbraco Deploy. Your project does not need to be running the latest minor version for automatic upgrades to work. The project will be upgraded to the latest minor version when it is released.
If you create a new project on Umbraco Cloud automatic upgrades are enabled by default.
A secondary mainline environment is included in all Umbraco Cloud plans, except Starter. Find pricing details for Umbraco Cloud Starter plans on our website.
A manual upgrade involves a more hands-on approach, where the upgrade process is initiated and controlled by the user or development team. This allows for greater flexibility and oversight, enabling teams to test and adapt the upgrade to their specific needs and configurations. A manual upgrade provides an opportunity to thoroughly test the new version in a controlled environment before applying it to live production environments. This ensures compatibility and minimizes disruptions.
For more information about manual minor upgrades, see the Manual upgrade of Umbraco CMS article.
Umbraco Cloud supports performing minor upgrades to your projects automatically. The feature is available when a new minor version of Umbraco is released (for example 10.5.0 or 10.6.0).
The upgrade will resolve most issues it encounters, but some Umbraco configurations may need manual intervention. This is usually related to custom code that depends on APIs that have changed or been removed in the new minor version.
If anything fails during this process, you can reach out for support using the in-app chat in the bottom right corner. We will assist you through the upgrade process if any issues arise.
Symptoms and feedback are given from the upgrade process: Unable to run the Umbraco installer
The first step in the process, after having updated all the files, is to call the Umbraco install engine. This is done in order to get its database updated to support the new version. As this step is the first time the site gets requested after the updated files are run, it may fail. The reason is often code that is incompatible with the upgraded files.
It can be code that references APIs that have been deprecated, or code that has some strong references to specific versions. If the error is clear, it will be shown on the screen. It will be a typical ASP.NET error message also called a Yellow Screen of Death (YSOD). You should request the site, and check the error it shows. If the error isn't descriptive, then it is time to clone the repository to your local machine and fix the issue. The usual suspects would be:
The code you have running is referencing an API that has been changed, is being modified, is obsolete, or removed.
The web.config
had assembly bindings for a specific DLL version that doesn't exist anymore. During the upgrade process, we do update the references we are shipping, but there might be something missing.
Once you have the site running locally, you should push your changes to the repository. This will update the site, and it should now be in a running state.
The upgrade process left off when it needed three more steps. These three steps now need to be done manually.
Complete the installer
To complete the installer, you should visit the site: https://dev-YOURSITEALIAS.euwest01.umbraco.io
. This will show you the installer screen, where you should insert your backoffice credentials and follow the process. It will run through a few steps, and later Umbraco will be updated to the latest version.
Export the metadata files.
The second thing you need to do is to regenerate the metadata files used for transferring items like document types, data types, and media types. This is done by accessing the Power tools (Kudu) on the project, opening the cmd prompt, and browsing to the wwwroot/data folder. Once there, you need to enter echo > deploy-export
. This will generate the required files for the upgraded site to work with Umbraco Deploy.
The last thing to do is to go to the /site/locks
folder (still through Kudu) and rename the file called upgrading
to upgraded-minor
- rename the file by typing ren upgrading upgraded-minor
. This will indicate to Umbraco Cloud, that the left-most environment is now ready to deploy all its changes to the next environment.
Before deploying the upgrade to the next environment, you should verify that everything looks as expected on the left-most environment.
On Umbraco Cloud, it is possible to set up an Organization. An organization is handy if you are managing many projects for different customers. It is also handy if you need to manage permissions for multiple users (such as developers and content editors.
With an organization, you get an overview of all projects and members that are part of it. You can also manage payment methods for projects, as well as many other functions outlined on this page.
In the following sections, we will go through the different options that are available to an Organization:
In the Information section of the Organization, you can find all the details about your Organization. If there are any changes to your details, you can change them here.
In the Members section, you can view current members, pending invites, and see the Multi-Factor Authentication (MFA) status for the Members of your Organization. You can also set up different permissions for your Members, such as Read, Write, and Administrators for your organization by adjusting their Roles.
Members added to your organization can see different details about their organization based on the user group they are added to. Currently there are three different groups, Read, Write and Admin. Below you can see what each user group has access to under the organization they are a part of.
Organization Members with Admin Access can do the following in the organization:
Update the organization's information
Invite others to the organization
Invite Users to project under the organization
Edit organization team
See pending invitations
See organization information
See organization projects
See payment history
See subscriptions
See organization Members
See payment history
Handle Multi-Factor Authentication (MFA) for users
Handle payment methods
Change permissions for Members
Remove role from users
Organization members with Write Access can do the following in the organization:
See Organization information
See Organization Members
Invite to the organization
See pending invitations
Organization Members with Read Access can do the following in the organization:
See Organization information
See Organization Members
When working in organizations on Umbraco Cloud, as a company, you can enforce a certain type of Multi-Factor Authentication (MFA) method for members.
Administrators of Organizations on Umbraco Cloud can enforce MFA for specific members of their organization.
To enforce a certain MFA for a member, follow these steps:
Go to the Organizations tab under your user on Umbraco Cloud.
Go to the Members tab under Organization.
Go to Multi-Factor Authentication.
Find the member that needs to have MFA enabled.
Click on the cogwheel and select the Enforced MFA Method from the drop-down list for the member.
Once it has been enabled, the next time the member logs in, they will be forced to setup the chosen Multi-Factor Authentication (MFA) method. It is possible for an administrator to reset the authenticator app settings for members of the organization.
In the Projects section, you can get an overview of all the Projects that have been created in your Organization.
It is possible to see the plan, project status, payment status, creation date, region, and number of environments for each of your projects.
As an administrator, you can invite members of your organization to the different projects under the organization.
In the Access Rights section, you can get a list of all the Access Rights your Members have to each Project in your Organization.
In the Payment Methods section, you can view the payment methods for your organization. From here, you can add or delete credit card details for your Organization. These payment options will be used, when you create new projects under your organization.
In the Payment History section, you can see the payment history for your organization.
The Sustainability Dashboard is designed to help users monitor and improve the environmental impact of their websites on Umbraco Cloud. For more information, see the article.
The Login Providers section enables you to configure access to the Umbraco Cloud Portal and Projects.
The section also offers the possibility to follow Sign-ins and changes to Login Provider configurations.
Learn more about Login Providers for your Organization in the article.
If your Umbraco Cloud project uses sensitive information such as API keys, encryption keys, and connection strings, it is recommended to store these as secrets.
There are two ways to add secrets to your Cloud project, as an Environment Secrets or as a Shared Secrets.
Environment Secrets are intended to be utilized exclusively within a particular environment during the runtime of your Umbraco solution.
Shared Secrets are utilized across all environments and will be seamlessly integrated into any new environment you create. Shared Secrets are particularly well-suited for safeguarding credentials necessary for project development, such as access to private NuGet feeds.
Utilizing environment-specific secrets for private NuGet feeds will result in the unsuccessful creation of new environments due to the unknown status of the secret. In such instances, Shared Secrets should be used.
Typical secrets are Private Keys, 3rd-party API tokens, database passwords, or otherwise sensitive data that needs to be kept secret.
When the secrets have been added they will be exposed exclusively to the assigned environments.
It will be assigned as an environment variable at runtime using the assigned name for the secret.
It will then use a reference that only the managed identity of the environment has access to.
When adding a secret to your environment, it will restart.
Secrets are stored as environment variables. The underlying platform has a maximum size limit for all environment variables combined. If too many secrets are added, or if secret values are too large, your environment may fail to start.
It is recommended to:
Keep secrets small and concise.
Store only sensitive values as secrets (for example: API keys, connection strings).
Use appsettings.json
for general configuration values.
To add a secret to your environment, follow these steps:
Go to your Umbraco Cloud project
Go to the Settings section and go to Secret Management
Choose either shared or environment secrets
Choose the environment to add the secret and click Add secret
Add the Key and the Value in the fields and click Add secret
Save the key to the environment.
When you develop locally, you cannot access secrets that are stored in the key vault associated with a cloud environment.
We recommend that you use common methods for handling secrets locally, such as using app settings in the appsettings.development.json
.
The app setting should not be committed to the code repository or it needs to be ignored via a gitignore
file.
An example could be that you have a secret in a cloud environment with the key name "ApiKey",
You should specify this with a corresponding name in a configuration file such as appsettings.development.json
:
Secrets for cloud environments are stored in a key vault and loaded by the app service (using a key vault reference) as an environment variable.
This enables you to get the value at runtime as you normally would fetch an environment variable.
You can use the method, getting it from the System namespace in .NET as below:
_secretMessage = Environment.GetEnvironmentVariable("SecretMessage");
Secrets can also be used to override AppSettings defined in appsettings.json
files.
In order for this to work, when adding the secret, the Key value should be all the settings' names joined by double underscores.
For example, to change the Serilog's default options under Serilog:MinimumLevel:Default
, the Secret key would look like this:
Serilog__MinimumLevel__Default
The value defined in appsettings.json
file will be overwritten with the Cloud Secret's value.
When naming a secret, it is possible to use alphanumeric characters as well as '_' (underscore).
Some words are reserved and cannot be accepted:
COMMAND
HOME
PORT
REMOTE
DEBUGGING
VERSION
REGION_NAME
CONNECTIONSTRINGS__UMBRACODBDSN
The following prefixes are not accepted.
The list consists of:
UMBRACO_
WEBSITE_
SCM_
SDEPLOY_
DEPLOYMENT_
DOCKER_
CONTAINER_
DIAGNOSTICS_
APPSERVICEAPPLOGS_
WEBSITE_
DOTNET_
IDENTITY_
MSI_
WEBJOBS_
FUNCTIONS_
AzureWebJobsWP_
PHP_
FILE_
DATABASE_
WORDPRESS_
MACHINEKEY_
SQLCONNSTR
SQLAZURECONNSTR_
POSTGRESQLCONNSTR_
CUSTOMCONNSTR_
MYSQLCONNSTR_
AZUREFILESSTORAGE_
AZUREBLOBSTORAGE_
NOTIFICATIONHUBCONNSTR_
SERVICEBUSCONNSTR_
EVENTHUBCONNSTR_
DOCDBCONNSTR_
REDISCACHECONNSTR_
FILESHARESTORAGE_
The following prefixes are allowed for Secrets on Umbraco Cloud:
Umbraco__CMS__Global__Smtp__
Umbraco__Forms__Security__FormsApiKey__
Umbraco__Forms__FieldTypes__Recaptcha__
Umbraco__CMS__Integrations__
Umbraco__CMS__DeliveryAPI__
UMBRACO__LICENSES__
UMBRACO__AUTHORIZEDSERVICES__
UMBRACO__COMMERCE__
It is also possible to use Secrets to save API keys, Passwords, and ReChaptcha for all our Umbraco products on Umbraco Cloud.
Do you have an existing or new secret that you want to add to a key vault that conflicts with the name restrictions? Contact Umbraco Support and it will be considered as soon as possible.
RestorePackagesWithLockFile
in your .csproj fileIf RestorePackagesWithLockFile
is used and set to true, you will experience that no changes will be made to the website. This happened even though the CI/CD deployments were completed successfully, and files were updated as expected in the Cloud repository.
The reason for this is that the KUDU deploy process fails. This process takes the newly committed files from the cloud repository and runs restore, build, and publish on the cloud environment.
To resolve this issue, remove the RestorePackagesWithLockFile
to allow the deployments to go through as expected.
The mechanism to determine changes since the last deployment is not able to do so when the left-most mainline environment has changed. This happens when you either add or remove a mainline environment. The responds with status 409 and the following json payload:
You need to manually make sure that all latest changes on your left-most mainline environment is also present in your local copy.
Once this is done you can run a new deployment, where you skip the cloud-sync step.
If you experience problems with your environment not properly booting up after deployment, .
The sample pipelines are naively trying to apply any change coming from the generated patch file on cloud. This doesn't always work and you might see an error similar to the following:
The root cause is due to conflicts between your source and the code in the repository on Umbraco Cloud. This is usually due to one of two things:
Cloud project package(s) has been auto-upgraded, and that diff was already applied.
You and your team are not following the .
In both cases you have to make sure that your repository is up too speed with any changes there are in the cloud environment. You will have to resolve potential conflicts manually.
Once that has been done, you should run a new deployment without the cloud-sync
step.
For Azure DevOps, see the section.
Ensure your GitHub repository is up-to-date with any changes in your Umbraco Cloud environment.
Locate the main.yml
file in the following directory: {projectname}.github\workflows
on tour local project.
Open the main.yml
file in a text editor and navigate to the “jobs” section.
Comment out the entire “cloud-sync” section and the “needs: cloud-sync” under “cloud-deployment”. An example is provided in the screenshot below.
Commit the changes, and push them to GitHub. This action will trigger a build and run the pipeline.
At this point, the pipeline should execute successfully and your changes will be pushed to Umbraco Cloud. If this is the case, proceed to the next step.
Uncomment the lines you previously commented out and make a new commit. Push these changes to GitHub.
Optional: Add "[skip ci]" to the last commit message, to avoid automatically triggering the pipeline
Your pipeline should now be functioning as expected.
For GitHub, see the section.
Navigate to your azure-release-pipeline.yaml
and comment out these two lines:
Trigger a code deployment and ensure that you uncheck the "Umbraco Cloud Sync" stage as mentioned below.
Ensure that your Azure DevOps repository is up to date with any changes in your Umbraco Cloud environment.
Find the pipeline in Azure DevOps.
Click on "Run Pipeline" in the top right corner.
Click on "Stages to run"
Uncheck the "Umbraco Cloud Sync" checkbox. Confirm on "Use selected stages".
Click on "Run" back in the "Run Pipeline" view.
As no changes were made to your pipeline, it will run as usual on next push to Azure DevOps.
We currently have a size limit set to 134217728 bytes or about ~128 MB.
Make sure that the package you are trying to upload does not contain anything unnecessary.
You can see an example of how you could zip your repository before uploading it, by referring to our or samples.
.umbraco
file cannot be found in the root of the repositoryThe .umbraco
file is missing or has been renamed. This file needs to be present in the root of the zipped package.
.umbraco
file is not validThe .umbraco
file has invalid characters. Sometimes people need to change the repository's folder structure and the default project's name. Ensure that the base field does not use backslashes ('') as the folder denominator.
Below is an example of the default .umbraco
file that comes with a new Umbraco Cloud project.
The service goes through all .csproj-files contained in the uploaded package, and compares that to the versions running in your left-most cloud environment. We do this to try to prevent you from downgrading the crucial Umbraco packages used by cloud.
The full error could look like this:
The error tells you which package to look for and which version is currently in your left-most cloud environment. The error also contains the problematic incoming .csproj-file and the version referenced by it.
If the incoming package references multiple packages with lower versions, the error will list each one.
We recommend aligning the package versions in your .csproj files with the higher version mentioned in the error for that package or a later version.
If you have orphaned csproj-files you should remove them or rename them. Orphaned would be backup .csproj files or files not referenced by any of the main project files nor referenced in a .sln file.
/app/work/repository/Readme.md
to stat: No such file or directoryIn some instances we see an issue where filename casing is causing an error.
Rename the Readme.md
file in the root of your repository to something different, the file can keep the markdown-extension. Commit the change to your repository and run the pipeline.
If you want you can change the filename back to Readme.md
after a successful CI/CD deployment.
In rare cases deployments fail, and the cloud infrastructure doesn't clean up correctly. This leaves behind an "updating" marker. The next time you try to deploy through your pipeline you will encounter an error.
In order to fix this issue, you need to use to remove the leftover marker file.
Access KUDU on the "left-most" environment
If you only have one environment you want the live environment
If you have more than one environment, you want the left-most mainline environment
Navigate to site
> locks
folder In there, there should be a file named updating
Remove the updating
file.
Once the marker file is removed, run your pipeline again.
This happens when using CI/CD to deploy changes to your live environment, and later add a new Cloud environment. Your environment will fail to boot up and will show the following error message:
This issue arises because the environment is missing in the local umbraco-cloud.json
file. To resolve this issue, follow these steps:
Navigate to Kudu in your Live environment
Select “Debug console” and choose “CMD”.
Find the umbraco-cloud.json file. Path to this file may vary depending on your setup, but the default location on cloud is C:\home\site\repository\src\UmbracoProject
Click ‘edit’ on the file and copy all its content. This content is consistent across environments, so it’s safe to do so.
Paste the copied content into the umbraco-cloud.json
file in your local project and push the changes.
After completing these steps, your left-most mainline environment should be correctly registered across all environments, allowing you to continue your work without any issues.
When you create an Umbraco Cloud project, the project URLs are based on the name of your project.
Let's say you have a project named Snoopy
. The default hostnames will be:
Umbraco Cloud Portal - www.s1.umbraco.io/project/snoopy
Live site - snoopy.euwest01.umbraco.io
Development environment - dev-snoopy.euwest01.umbraco.io
Staging environment - stage-snoopy.euwest01.umbraco.io
The hostnames contain the region on which your project is hosted. The options available when choosing a region for your Umbraco project are:
West Europe (euwest01)
East US (useast01)
South UK (uksouth01)
Australian East (aueast01)
Canada Central (cacent01)
To access the backoffice, add /umbraco
at the end of the Live, Development, or Staging URL.
When working with hostnames on Umbraco Cloud, there are some limitations to be aware of:
Umbraco ID Login - You can only enable a maximum of 100 hostnames for Umbraco ID login.
To add and manage your hostnames on Umbraco Cloud, follow the steps below:
Go to your project on Umbraco Cloud.
Go to Configuration in the side menu.
Click on Hostnames in the menu.
Click Add new hostname to add a new hostname.
Ensure that the hostname you are binding to your Umbraco Cloud environment has a DNS entry that resolves to the Umbraco Cloud service. The DNS settings can either use a CNAME or an A & AAAA record:
CNAME: Usually used for domains with "www
" in the URL.
This is recommended to use, if possible, as the record is not changed as often as A & AAAA IPs are. When setting up a CNAME it needs to point to dns.umbraco.io
.
A & AAAA records: Are usually used for the Apex domain (without "www
" in the URL).
It needs to be created at the root of your domain.
A-records to either or both IPv4 addresses:
162.159.140.127
172.66.0.125
AAAA records to either or both IPv6 addresses (to support IPv6 connectivity):
2606:4700:7::7d
2a06:98c1:58::7d
If you're using the consider changing them to the new A & AAAA records above.
Check with your DNS host or hostname registrar regarding configuration details for your Hostnames.
To specify the hostname for each root node using a multisite setup, follow these steps:
Go to the Backoffice of the project.
Right-click the root content node.
Select Culture and Hostnames.
Click Add New Domain in the Culture and Hostnames window.
Enter your Domain name and select the Language from the drop-down list.
Click Save.
Once you've assigned a Hostname to your Umbraco Cloud environment, you may want to hide the default umbraco.io
URL (e.g. snoopy.euwest01.umbraco.io). To do so, see the article.
Umbraco Cloud supports Internationalized Domain Names (IDN) allowing you to configure domain names including special characters.
When using an IDN direct access to the Umbraco backoffice from that domain is unavailable. If you have configured måneskin.dk
as a domain, you cannot access the backoffice using måneskin.dk/umbraco
. The backoffice will still be accessible using the default Cloud URL (maaneskin.euwest01.umbraco.io/umbraco
), or from other domain names that do not include special characters.
All hostnames added to an Umbraco Cloud project's environment will get a TLS (HTTPS) certificate added, by default. The certificate is issued by Cloudflare and valid for 90 days after which it will be automatically renewed. Everything around certificates and renewals is handled for you and you only need to ensure the DNS records are configured according to our recommendations above.
Cloudflare is a popular DNS provider, which offers a variety of different services to improve performance and security. We also use it for DNS and Hostnames on Umbraco Cloud.
When adding a hostname to your project hosted on Umbraco Cloud, using your own Cloudflare account the process is slightly different.
Set Proxy Status to DNS Only when creating a CNAME or A-record for your hostname in Cloudflare.
Change Proxy Status to Proxied once your hostname is Protected on the Hostname page for your Cloud project.
To minimize downtime, you can also use the .
CAA is a defined in Resource Record (RFC) 6844. It allows domain owners to specify which Certification Authorities (CAs) can issue certificates for their domains. If you use CAA records on your domain, you will either need to remove CAA entirely or add the following through your DNS provider:
This is necessary because Google Trust Services is the Certificate Authority for the certificates issued on Umbraco Cloud.
CAA records can be set on the subdomain, but it's not something that is commonly used. If there’s a CAA record at, e.g., app.example.com, you’ll need to remove or update it. If you want to use wildcards and allow certificates for any subdomain, the CAA record should look like this:
On the Professional and Enterprise plans, you can manually add your certificate to your project and bind it to one of the configured hostnames.
This section covers common configurations for using a custom WAF or proxy with your Umbraco Cloud website.
If your hostname can't point to dns.umbraco.io
, Umbraco Cloud won't be able to reissue a certificate for your hostname during future renewals (3 months). You can publish a Domain Control Validation (DCV) record or use a custom certificate.
The DCV record is a CNAME record with key _acme-challenge.<hostname>
pointing to <hostname>.0df3da1ce1ef695a.dcv.cloudflare.com
. For example, www.example.com
- CNAME _acme-challenge.www.example.com
points to www.example.com.0df3da1ce1ef695a.dcv.cloudflare.com
The DCV record will ensure that Umbraco Cloud can always issue/renew the certificate for the custom hostname.
When configuring the hostname on Umbraco Cloud use the .
*.{region}.umbraco.io
You can proxy freely to the default Umbraco Cloud hostname. The application runtime will see *.{region}.umbraco.io
as the application URL. Multisite set-ups aren't supported when proxying to default hostnames.
Learn more about best practices for working with rewrite rules on Umbraco Cloud projects.
This article discusses how to upgrade your Umbraco Cloud plan and important considerations to keep in mind.
Before you decide to upgrade your Umbraco Cloud plan, you need to consider a few things:
Changing a plan for a project will change the outgoing IP of the project. If your solution has an external service that requires whitelisting the outgoing IP of the project, please visit the documentation for prior to the upgrade.
If you are on the Starter plan, you can either upgrade your plan to a Standard or a Professional plan.
On the Standard plan, you have the option to upgrade to a professional plan.
Before upgrading, make sure to check the and the features you get on the new plan.
When upgrading your plan (for example, from Starter to Standard), log files such as trace logs will not be transferred to the new environment.
If you need to retain log history, make sure to download and back up the log files before upgrading. For more information on accessing the logs, see the article.
The first step to upgrading your Umbraco Cloud plan is to access your project in the project overview at .
In the project overview, you can find all the projects that you have been invited to or have created.
From here you need to find the project that you want to upgrade the plan.
Under the project on the right side, you have a dropdown menu called settings:
In the menu, you can find a tab called "Upgrade plan".
Clicking on the tab will direct you to the overview of the plans that you can upgrade to.
From here you can see the different plans, the price per month, and the limitations between each of the plans.
If you are on a Starter plan you can upgrade to the Standard and the Professional plan.
If you are on the Standard plan you can upgrade to the Professional plan.
Follow the below steps to upgrade your plan:
Click on the Select Plan button to choose the plan you want to upgrade to.
[Optional] Choose to upgrade to a dedicated option in the next step.
Review the Summary to make sure that everything selected is correct in the last step.
Once you click the Upgrade Project button, the project will be upgraded to the new plan and if selected to a dedicated server.
If your project exceeds usage limits, you'll be automatically upgraded to a suitable plan to keep your website running smoothly.
We will send an email to the project owner and the technical contact(s) to inform them about this update. The upgrade to a new plan will be reflected in your next bill and will take effect from the date of the upgrade.
Once you are upgraded to a new plan, you also get access to all the features that are included in that plan. .
If you would like to downgrade your plan, you can do so by first lowering your data usage limit to match the desired plan.
Once you have adjusted your data usage, contact Umbraco Support for assistance with the downgrade. Keep in mind that when you downgrade to a lower plan, the changes will take effect immediately. This means your usage limits will be reduced, and any extra features associated with your previous plan will be deactivated. You will continue to be billed for the old plan until your next scheduled billing date.
If you have any questions regarding this process, feel free to reach out to .
{
"Serilog": {
…
},
"Umbraco":{
…
},
"ApiKey": "Value",
}
{
"type":"LeftMostEnvironmentChanged",
"title":"The projects left-most environment has changed",
"status":409,
"detail":"Unable to calculate changes based on a different left-most environment",
"traceId":"..."
}
error: patch failed: src/UmbracoProject/UmbracoProject.csproj:9
error: src/UmbracoProject/UmbracoProject.csproj: patch does not apply
dependsOn: cloudSyncStage
condition: in(dependencies.cloudSyncStage.result, 'Succeeded', 'Skipped')
[project]
base = "src/UmbracoProject"
csproj = "UmbracoProject.csproj"
Cannot apply update because the following packages would be downgraded: Package: Umbraco.Cms, Version: 13.4.0 ==> Project file: /Update/src/MyAwesomeProject.Code/MyAwesomeProject.Code.csproj contains lower Version: 13.1.0 .
“System.InvalidOperationException: Unable to determine environment by its {environment-id}”
example.com. IN CAA 0 issue "pki.goog"
example.com. IN CAA 0 issuewild "pki.goog"
Learn how to manually upgrade your Umbraco Cloud project to run the latest version of Umbraco CMS.
Projects on Cloud will either be automatically upgraded with patch releases or it can be done through the portal when new minors are available.
In rare cases, your project might not be on the latest patch or minor and you will need to upgrade the project manually.
This article will give you a step-by-step on how to manually upgrade your Umbraco Cloud project.
When upgrading a Umbraco Cloud project manually, the first step is to either clone down left-most mainline environment to your local machine or pull down the latest changes for your left-most mainline environment.
Navigate to the /src/UmbracoProject/
folder to find the .csproj
file.
Make sure you can run your Cloud project locally and restore content and media. It's important that you check that everything works once the upgrade has been applied and for this, you need to have a clone locally that resembles the Cloud environment as much as possible.
To get the latest version of Umbraco, follow these steps:
Run the dotnet add package Umbraco.Cms
command in the directory that contains your project files. If you want a specific version, run the dotnet add package Umbraco.Cms --version <VERSION>
command.
Run dotnet restore
to install the package.
Open your .csproj
file and confirm that the Umbraco.Cms
package reference shows the correct version.
<ItemGroup>
<PackageReference Include="Umbraco.Cms" Version="x.x.x" />
</ItemGroup>
Alternatively, you can also update Umbraco via the NuGet Package Manager
in Visual Studio:
After updating the NuGet packages, follow these steps to complete the upgrade. Make sure everything is functioning correctly before pushing the changes to your Umbraco Cloud project.
Run the project locally
When the project spins up, you'll be prompted to log in to verify the upgrade
On the installation screen, you need to verify the upgrade:
Hit Continue - this will complete upgrading the database
The upgrade will finish up
When it's complete you will be sent to the Umbraco backoffice
Make sure that everything works on the local clone and that you can run the project without any errors.
Before you deploy the upgraded project to the Cloud, it's important that you check if there are any dependencies on the new Umbraco version.
If updates are available for Umbraco Forms or Umbraco Deploy then you can upgrade those locally as well, before moving on.
When you've upgraded everything locally, and made sure that everything runs without any errors, you are ready to deploy the upgrade to Umbraco Cloud.
Stage and commit all changes in Git
Push the changes to the Cloud environment
When everything is pushed, head on over to the Umbraco Cloud Portal
Access the backoffice of the Cloud environment you pushed the upgrade
You will again be prompted to log in to complete the database upgrade
You will be sent to the backoffice once the upgrade is complete
Again it's important that you make sure everything runs without any errors before moving on to the next Cloud environment.
When working with an Umbraco Cloud project, you can handle the project configuration directly in the Umbraco Cloud Portal. You can manage the following configurations from the left-side menu:
The Environments section provides an overview of your project’s environments. Here, you can:
Access the Website (frontend) and backend,
Open Kudu, and
Clone down the environment locally.
Each environment has an error log that appears only if there are any unread errors in that specific environment. You can view the errors by clicking on Error logs in the environment menu.
In the Error logs page, you can manually mark each error as read which will move it from the "New" section to the "Read" section. Errors marked as read will be permanently deleted after 30 days.
During development, too many errors can slow down the error page. To fix this, connect to the environment's database locally and delete the errors. Learn how to connect to the database in the section.
Environment errors are stored in the UCErrorLog
table.
The query below deletes 90% of the errors. The query always deletes the oldest errors first. You can tweak the query to delete any percentage of errors by changing the number in the first row.
The Team section allows you to:
Manage team members and their permissions on different environments.
Add new team members.
Manage backoffice user groups and for your project.
Monitor pending project invitations.
The Summary section displays key information such as the project plan, the region where the project was created, payment status, and more.
In the Project History section, you can view a list of high-level activities for your cloud project.
You can see metrics related to the overall health and performance of the Azure app service hosting the different environments of your solution.
The Usage section allows you to:
View the usage of Custom Domains, Media Storage, Bandwidth, and Bandwidth History for your project.
Check whether the project is using above or below the allowed amount for its plan.
View the top 10 bandwidth usage paths, referrers, and the top 50 media files.
The Connections section provides connection details for your Umbraco Cloud databases. You need to allow your IP to connect to the databases with your local machine.
The Automatic Upgrades section handles minor and patch upgrades for the Umbraco components used by Umbraco Cloud. By default, new projects are opt-in for these upgrades.
From this page, you can manage whether your site is automatically upgraded to the latest minor version(s) of the Cloud products. To learn more about automatic upgrades, visit the section.
The CDN and Caching section lets you manage CDN Caching and Optimization settings for your project. You can:
Modify the default settings that apply to all hostnames added to the project.
Set specific caching settings per hostname if different configurations are required for certain hostnames.
Purge Cache for individual hostnames or all of them.
In the Hostnames section, you can bind hostnames to your Umbraco Cloud project.
You can configure deployment webhooks for your environments in this section. Webhooks are triggered upon successful deployments, and you can specify where the deployment information is sent.
The Advanced section provides options for managing advanced settings for your project, including:
for projects on Standard, Professional, or Enterprise plans.
Enable IIS logging for each environment. The log files can be accessed in Kudu at C:\home\LogFiles\http
. IIS logs have a rolling size limit of 100 MB, overwriting the oldest files once the limit is reached.
.
Change the .NET framework runtime for each environment of your Umbraco Cloud project.
Change the value of the DOTNET_ENVIRONMENT
environment variable for each environment of your Umbraco Cloud project. To learn more about working with multiple environments in ASP.NET Core, refer to the .
The Backups section enables you to create database backups for one or more of your cloud environments.
The Public access setting, found under the Security tab, allows you to deny access to your project. Users who are not part of the project or whose IP addresses have not been allowed will not be able to access the project.
You can enable or disable this setting on the Public access page. Access to manage Public access requires your project to be on the Standard plan or higher.
The Transport Security section enables you to manage transport security settings for your project. You can configure specific transport security options for all hostnames or individual hostnames within your project.
The Management API Security section allows you to secure access to the backend services of your project. This can be managed from the Security menu on the Umbraco Cloud Portal.
If you have a custom certificate, you can upload and bind it to your custom hostnames. This can be done instead of using the TLS: Transport Layer Security (HTTPS) certificates provided by the Umbraco Cloud service.
The Secrets Management section is used for storing sensitive information such as API keys, encryption keys, and connection strings used by your Umbraco Cloud project.
You can change your Umbraco Cloud project to run in a dedicated setup with additional computational resources compared to the shared setup. You can choose between different dedicated options depending on the number of resources you will need for your project.
You can upgrade your project to a Standard or a Professional plan from the Management menu, depending on your needs. The option is not available if you are already on a specific plan or if you are running in Trial mode.
You can rename your Umbraco Cloud project from the Management menu.
You can rename your project from the Rename Project section in the Management menu on the Umbraco Cloud Portal. When you rename a project, the default hostnames and clone URLs assigned to the project are updated to match the new project name. You can also rename your project files and folders locally.
You can delete your Umbraco Cloud project from the Management menu. Deleting your Umbraco Cloud project is permanent - all data, media, databases, configuration, setup, and domain bindings are removed in the process.
DELETE TOP(90) PERCENT
FROM [dbo].[UCErrorLog]
WHERE [Read] = 0
This page describes how to set up your Visual Studio solution to work locally with an Umbraco 7 or 8 Cloud project.
This article is only relevant if you are working on a Umbraco Cloud project running Umbraco 7 or Umbraco 8 (legacy Umbraco).
if you are on a later version, follow the working locally article.
If you're writing a lot of custom code (or like Intellisense), we recommend the following setup:
A Visual Studio solution with a
Website Project for the Umbraco site (coming from the cloned git repository from the Umbraco Cloud Project), and
Class Library Project for the code that will be created for the Umbraco site - this can be MVC Controllers, WebApi Controllers, Surface Controllers or data access plus whatever else you might need to write code for.
Below is a screenshot of our recommendation on how the projects should be configured. We use the following naming conventions: *.Web
for the Umbraco website and *.Core
for the accompanying code.
Visual Studio 2017 v15.9.6 or later
Git and/or Git Credential Manager for Windows
Important: The UaaS.cmd tool is no longer supported by Umbraco HQ.
Manually creating and configuring a Visual Studio solution with the right projects can take a bit of time. We have made a little command line tool that will set the solution up for you.
Download the UaaS.cmd tool from umbra.co/uaas-cmd and place it in the folder you want the solution in.
Important: Be aware if you run the Uaas.cmd tool as an administrator it will generate the files in your Windows/System folder.
This is a recommended setup. If you don't like the setup then you can play with it and make it your own. There's nothing magic about this setup. It is adding a few files to your Umbraco Cloud website to give you a flying start to begin working with Visual Studio.
What follows is a recommendation and not the only way to work with Visual Studio.
Before running the UaaS.cmd tool you will need the git clone URL for your Umbraco Cloud Project.
Go to the Project in the Portal
Copy the URL from "How to connect my machine"
Running the UaaS.cmd tool will download the latest Visual Studio generator (waasp.exe) and prompt you to enter the clone URL for your Project. Then enter the "Namespace", which will be the name of the Visual Studio solution and thus the namespace for the solution as well.
Does an error appear where the tool says: "Unable to connect to the remote server", but you can still add the clone Url? You then need to allow the UaaS.cmd through your firewall/antivirus.
If you haven't cloned the repository before, you will be asked to enter the username and password for the Umbraco Cloud Project. This also happens if you do not have a git credentials manager installed. In both cases, use the credentials you use to access the Portal and the Umbraco backoffice.
Once it's done running the tool will have created a Visual Studio solution file *.sln
and two Projects.
*.Web
contains the Umbraco site that was (git) cloned from your Project
*.Core
is a Class Library that you can use for your custom code, as mentioned above
Both projects are configured with the NuGet packages for Umbraco using the version that corresponds to the site cloned from Umbraco Cloud.
The result should look something like this within the folder where the UaaS.cmd tool ran:
You can now open the solution in Visual Studio and hit F5
to start the site directly from Visual Studio.
One thing to notice about this setup is that you will get two git repositories as well as two projects.
The site cloned from your Umbraco Cloud Project will be contained within a git repository that is connected to your Project on Umbraco Cloud. Whenever you want to deploy changes to your (remote) Umbraco Cloud site you should commit everything within the *.Web
folder. This is where the git repository for Umbraco Cloud is also located.
Going up one level to where the *.sln
file is located you will notice a .git
folder. This is the second git repository. You should use this repository for all the code you write as well as the solution and project files for Visual Studio.
Think of everything within the *.Web
folder as your deployment repository, and everything surrounding that folder as your source code repository. The Umbraco Cloud repository (within the *.Web
folder) will not (and should not) be committed to the other git repository.
Now that you've added your own touch to your site, you're ready to deploy to your Umbraco Cloud environment. The key thing to know is that your custom code from the *.Core
project will be built into a .dll
file in your *.Web
project. This .dll
file is what you need to push up to the Cloud repository.
Once you have everything your site will need committed you can follow the deployment workflow to complete the deployment.
As mentioned in the previous section, you will start with two projects in Visual Studio. A *.Web
project with the Umbraco site configured as a Website project, and a *.Core
project configured as a class library.
So what goes where?
Anything that is used within Umbraco, like plugins and configuration, should by default be placed in the *.Web
project. Here is a list of other elements that you want to place in the *.Web
project:
Website assets like CSS, JavaScript and related images
Views, Partial Views and Partial View Macros
Configuration (web.config
and all the Umbraco specific or related config files in ~/Config/
)
Usercontrol ascx-files
Plugins (typically located in App_Plugins
)
Meta data (the files that Umbraco Deploy uses in the folder ~/Data/Revision/
)
Media files will also be placed under the *.Web
folder. As Website projects show all files on disk by default you will be able to see these through Visual Studio. Media files from the /Media/
folder should not be committed to the git repository, but more on that in the next section.
We recommend placing all your code in the *.Core
project (instead of, for example, using App_Code for that). This includes, but is not limited to:
Controllers for MVC, Web Api
Controllers for Umbraco Plugins, Surface, API
Models and ViewModels
Data Access (the *.Core
project references Umbraco so you can use the Umbraco datalayer as needed)
Extensions methods
To use ModelsBuilder with IntelliSense in Visual Studio, you'll need to make some configuration changes to the web.config file of your *.Web
project. This is to ensure that the models produced by ModelsBuilder are stored in the right place for compilation.
Make sure ModelsBuilder.Enable is set to true (default): <add key="Umbraco.ModelsBuilder.Enable" value="true" />
Set the Mode to AppData
or LiveAppData
. This will ensure you can use ModelsBuilder with Visual Studio. So in your Web.config, you should to have: <add key="Umbraco.ModelsBuilder.ModelsMode" value="AppData" />
Create a directory called "Models" in your App_Code folder in the *.Web
directory of your site. Then add: <add key="Umbraco.ModelsBuilder.ModelsDirectory" value="~/App_Code/Models/" />
to Web.config.
This will make the models of your Document Types available with IntelliSense in Visual Studio. You can read more about configuring ModelsBuilder here.
*.Core
projectIn order to use Umbraco's features in your *.Core
project, you have to add references to the DLLs in your *.Web/bin
.
You can do this by right-clicking on References and selecting Add Reference. Browse and select the DLLs you'd like to use and then hit OK. Don't forget to build.
When working with this solution setup it's important to remember that you are operating with two different git repositories:
One for your source code, and
One within the *.Web
folder for committing and deploying your changes to Umbraco Cloud.
The cloned git repository from Umbraco Cloud comes with its own .gitignore
so files that should not be committed are already handled.
All files that are required to run the Umbraco site should be committed to the git repository in the *.Web
folder. From there they can be deployed to Umbraco Cloud. This includes assemblies (*.dll
).
For the *.Core
part of the solution as well as the solution file and default .gitignore
file you commit that to the source code repository. You should ideally set a remote for this git repository to your own git host like GitHub, BitBucket or Visual Studio Team Services.
These are the files and folders you typically want to commit in your own source code repository:
The project and code files in *.Core
The solution file *.sln
.gitignore
UaaSClone.cmd (used for re-establishing the *.Web
folder with the git repository from Umbraco Cloud)
When you are working in a team you will have additional people that will use this same setup. However, they will only clone your source code repository from your GitHub, Bitbucket, or Visual Studio Team Services account. They will, by default, not get the *.Web
folder and the Umbraco site, because that part is not contained within the source code repository.
To help to get up and running we added a UaaSClone.cmd
, which can be run after cloning the source code repository. Running this command line tool will clone the Umbraco Cloud repository to the right folder, and set up Visual Studio for them.
Some Umbraco packages are available on NuGet and you can install NuGet packages into the *.Web
project to add functionality to your site. Remember, this is a normal Visual Studio solution, so you can work with NuGet packages exactly like you're used to.
If you need to program something that depends on a NuGet package you should install that NuGet package in both projects.
Install it in *.Core
so you can write the code you need against the library you working with (obtained from NuGet)
Also install it in *.Web
so that the library files also end up in your website and your compiled code works there as well
A guide to help you migrate your Umbraco CMS site to Umbraco Cloud.
One way to start your Umbraco Cloud journey is to migrate an existing Umbraco CMS project to the platform. There are some requirements that this project needs to meet as well as some specific steps to follow.
In this article, you can find all the information you need to migrate your existing Umbraco CMS project to Umbraco Cloud.
To properly migrate your Umbraco CMS project to Umbraco Cloud it is important to ensure that your project meets the requirements.
Each requirement outlined below is presented with recommended suggestions when a project does not meet the requirements.
Before initiating the migration, the project should be cleared of unnecessary files and data. This includes emptying recycle bins in the Umbraco backoffice and deleting temporary files in the project repository.
Run the project.
Access the Umbraco Backoffice.
Empty the Recycle bin in the Content section.
Empty the Recycle bin in the Media section.
Stop the project.
Delete the following folders from the project directory:
umbraco/Data/TEMP
umbraco/Logs
The data from the Umbraco CMS project will be migrated to Umbraco Cloud by uploading a database .bacpac
file. The next steps will guide you through creating a .bacpac
file from the project database.
Creating a bacpac
file requires that the project use an SQL Server database. If the project is using an SQLite database a couple of different options are available:
Find an external tool to convert the SQLite database to SQL Server.
Migrate your content and data to Umbraco Cloud using .
Use or a similar tool to export a .bacpac
file of your project database.
Save the .bacpac
file on your machine.
When migrating a project to Umbraco Cloud it is important to do so with a clean project. Using a clean project ensures that no unknown factors can come into play during the migration.
You can create a new Umbraco Cloud project in one of the two ways:
Create an .
The project will be free for 14 days, whereafter a subscription is required.
Create a new Umbraco Cloud project from the Umbraco Cloud Portal.
Follow the setup instructions detailed below.
Click Create project in the Umbraco Cloud Portal.
Choose Umbraco Cloud as the Type.
Choose a plan that enables you to add an extra mainline environment.
Select the version that matches the project you want to migrate.
Give the project a name.
Choose from which Region the site should be hosted.
Select a project owner.
Ensure a Technical contact is added.
Click Continue.
Verify all the information is correct.
Check the "Terms and conditions" box.
Click Create Project.
Once the project is set up:
Select Configure environments.
Add a new mainline environment.
Throughout this guide, this mainline environment will be referred to as the Development environment.
Having more than one environment on your project, will enable you to start over with the migration process should it be needed.
With the Cloud project set up and ready, the migration can start in the next step.
The database is uploaded to the Umbraco Cloud project via the Umbraco Cloud Portal.
Follow the Upload Database and Restore Database sections in the article to complete this step in the migration.
You will not be able to view the front end of the website yet, as the project files have yet to be migrated.
The Umbraco Cloud project is now ready for the next step where the two projects will be merged.
To continue the migration the next step is to clone down the Umbraco Cloud environment to merge it with the Umbraco CMS project.
Follow the steps outlined in the article to clone down the Development environment on the project.
In the following steps, the Umbraco CMS project will be merged into the Umbraco Cloud project.
Move the following files from the Umbraco CMS project into the cloned Cloud project:
View files in ~/Views
(.cshtml
)
Controllers and Models
CSS files and scripts in ~/wwwroot
Merge the relevant configuration files.
Use a tool like to identify which configurations to merge.
Do not merge the following configuration keys in appSettings.json
:
Umbraco:CMS:Global:
Id
Umbraco:CMS:Global:
UseHttps
Umbraco:CMS:Global:
NoNodesViewPath
ConnectionStrings:
umbracoDbDSN
ConnectionStrings:
umbracoDbDSN_ProviderName
Merge custom code in the Program.cs
file.
Open the appSettings.json
file.
Connect the Cloud clone to the Umbraco CMS project database by adding a new connection string:
Run the project locally.
All data, content, and configuration have been merged into the cloned Cloud environment.
There will be no images or media files in the project. These will be migrated later in the process.
The next step in the migration is to generate data files needed to synchronize with the Cloud project.
Access the backoffice of the local Cloud clone using Umbraco ID.
Navigate to the Deploy dashboard in the Settings section.
Locate the Export Schema to Data Files in the Deploy Operation section.
Click Export Schema to initiate the export.
Use the Deploy Status section at the top to determine when the export is complete.
Stop the project.
Add and commit the changes through Git.
Learn more about working with a local Cloud clone in the article.
Push the migration to the Cloud environment.
All content, data, and configuration, except for the media files, have been migrated to the Cloud project.
The next step will be to add the media files to the Cloud project using Azure Blob Storage.
All media on Umbraco Cloud projects are stored in a dedicated Azure Blob Storage container.
Follow the guide in the article to access the Azure Blob Storage container connected to the Development environment.
Locate the media files for your Umbraco CMS project.
Copy the ~/wwwroot/media
folder into the Azure Storage Explorer.
Reload the front end and backoffice of the Umbraco Cloud project to verify that the images have been added correctly.
The Umbraco CMS project has now been migrated to an Umbraco Cloud project.
Verifying the migration by cloning the Development environment to your local machine is recommended.
This needs to be a new clone. The clone used throughout the migration steps can be deleted.
Follow the steps outlined in the article to clone down, restore, and run the Development environment locally.
The Umbraco CMS project has now been migrated onto Umbraco Cloud.
Following this guide, the Umbraco CMS project has been migrated to the Umbraco Cloud Development environment. For the migration to be complete, it should be deployed to the Umbraco Cloud Live environment.
To publish the website to the web, attach a hostname to the Live environment.
This article will provide steps on how to migrate a Cloud project from Umbraco 8 to Umbraco 10.
It is currently not possible to upgrade directly from Umbraco 8 to the latest version.
The recommended approach for upgrading from version 8 to the latest version is to use this guide to upgrade from Umbraco 8 to Umbraco 10 . Umbraco 10 contains the that must be upgraded from Umbraco 8. You can then use the steps to upgrade from Umbraco 10 to the latest version.
Since the underlying framework going from Umbraco 8 to the latest version has changed, there is no direct upgrade path. That said, it is possible to re-use the database from your Umbraco 8 project on your new project in order to maintain the content.
It is not possible to migrate the custom code as the underlying web framework has been updated from ASP.NET to ASP.NET Core. All templates and custom code will need to be reimplemented.
You also need to make sure that the packages that you are using are available on the latest version.
A Umbraco 8 Cloud project running the latest version of Umbraco 8.
A clean Cloud project running the latest version of Umbraco with at least two environments.
A backup of your Umbraco 8 project database.
It is recommended to have at least two environments on the new Umbraco project.
If you use Umbraco Forms, make sure to have to True
before step 1.
Create a backup of the database from your Umbraco 8 project using the .
Alternatively, you can clone the environment down and take a backup of the local Database after restoring. Make sure to restore both content and media from your Cloud environment after cloning it down.
Import the database backup into SQL Server Management Studio.
Clone down the left-most mainline environment from the new Cloud project.
Test the project and make sure to log in to the backoffice.
Update the connection string in the new Cloud projects appsettings.json
file so that it connects to the Umbraco 8 database:
Enable to authorize the database upgrade.
Run the new Cloud project locally and login to authorize the upgrade.
Select "Continue" when the upgrade wizard appears.
After it has finished upgrading, stop the site and disable the unattended upgrade.
Run the site and log in using Umbraco ID to verify if your project has been upgraded to the new version.
This is only content migration and the database will be migrated.
You need to manually upgrade the view files and custom code implementation. For more information, see Step 3 of this guide.
The following files/folders need to be copied from the Umbraco 8 folder into the new Cloud project folder:
~/Views
- Do not overwrite the default Macro and Partial View Macro files unless changes have been made to these.
Any files/folders related to Stylesheets and JavaScript.
~/Media
folder from v8 needs to be copied over into the wwwroot - media
folder:
Connect to from the v8 project
Download the media folder from Azure Storage Explorer
Add the downloaded media folder from v8 to the Azure Storage Explorer of the new project.
Migrate custom configuration from the Umbraco 8 configuration files (.config
) into the appsettings.json
file on the new Cloud project.
As of Umbraco version 9, the configuration no longer lives in the Web.Config
file and has been replaced by the appsettings.json
file.
, if relevant.
As of Umbraco Forms version 9, it is only possible to store Forms data in the database. If Umbraco Forms was used on the Umbraco 8 project, the files need to be migrated to the database.
Run the new Cloud project locally.
It will give you an error screen on the frontend as none of the Template files have been updated. Follow Step 3 to resolve the errors.
Go to the backoffice of the project.
Navigate to the Settings section and open the Deploy dashboard.
Click on Export Schema to Data Files
in the Deploy Operations section in order to generate the UDA files.
Once the operation is completed, the status will change to Last deployment operation completed
.
Check ~\umbraco\Deploy\Revision
folder to ensure all the UDA files have been generated.
Return to the Deploy dashboard.
Click on Update Umbraco Schema from Data Files
in the Deploy Operations section to make sure everything checks out with the UDA files that were generated.
The latest version of Umbraco is different from Umbraco 8 in many ways. With all the files and data migrated, it is now time to rewrite and re-implement all custom code and templates.
One of the changes is how published content is rendered through Template files. Due to this, it will be necessary to update all the Template files (.cshtml
) to reflect these changes.
Read more about these changes in the section of the Umbraco CMS documentation.
Template files need to inherit from Umbraco.Cms.Web.Common.Views.UmbracoViewPage<ContentModels.HomePage>
instead of Umbraco.Web.Mvc.UmbracoViewPage<ContentModels.HomePage>
Template files need to use ContentModels = Umbraco.Cms.Web.Common.PublishedModels
instead of ContentModels = Umbraco.Web.PublishedModels
Depending on the extent of the project and the amount of custom code and implementations, this step is going to require a lot of work.
After the project runs locally without errors, deploy and test it on the Cloud's left-most mainline environment.
Push the migration and changes to the Umbraco Cloud left-most mainline environment.
Go to the backoffice of the left-most mainline environment once everything has been pushed.
Go to Settings and open the Deploy Dashboard.
Click on Export Schema to Data Files
in the Deploy Operations section.
The deployment will result in either of the two:
Last deployment operation failed
- something failed during the check.
Select Clear Signatures
from the Deploy Operations section.
Select Update Umbraco Schema
from the Deploy Operations section to clear up the error.
Last deployment operation completed
Everything checks out: The left-most environment has been upgraded.
Transfer Content and Media from the local clone to the left-most mainline environment.
To transfer members make sure that the following Deploy settings are configured in the appsettings.json
: .
Test everything in the left-most mainline environment.
Deploy to the Live environment.
Test everything in the left-most mainline environment until it runs without any errors.
Setup rewrites on the new Cloud project if relevant.
Assign hostnames to the project if relevant.
In this example, you will learn how to target deployments to more than one environment.
The sample will enable you to work on two different branches, where each branch will deploy to a different environment.
Replace the azure-release-pipeline.yaml
with the one called azure-release-pipeline-more-targets.yaml
. It's okay to rename azure-release-pipeline-more-targets.yaml
.
Its locations in the sample scripts are:
Bash: /V2/bash/azuredevops/advanced
PowerShell: /V2/powershell/azuredevops/advanced
Make sure you don't have multiple YAML files that contain triggers (unless you designed your pipeline's workflow that way).
Now you need the aliases of the environments you want to target.
Insert the aliases into the placeholders in azure-release-pipeline-more-targets.yaml
, the values you need to replace are:
##Your target environment alias here##
##Your other target environment alias here##
Remember to fix the projectId placeholder if you haven't already: ##Your project ID here##
Next, look at the triggers for the pipeline:
Here, you can change when a deployment is triggered based on which branch is pushed to.
The pipeline needs to resolve the target based on the triggering branch, which is done in the following code.
The triggering branch is evaluated in the statement if [ "$(Build.SourceBranchName)" = "main" ]; then
or elif [ "$(Build.SourceBranchName)" = "flexible" ]; then
.
The code will write which alias is targeted and write a pipeline variable (targetEnvironment
). This variable is then used by later steps.
When updating the triggering branch names, it must be updated in the two mentioned places: In the trigger and in the script.
Replace the main.yml
with the one called main-more-targets.yml
. It's okay to rename main-more-targets.yml
.
Its locations in the sample scripts are:
Bash: /V2/bash/github/advanced
PowerShell: /V2/powershell/github/advanced
Make sure you don't have multiple YAML files that contain triggers (unless you designed your pipeline's workflow that way).
Now you need the aliases of the environments you want to target.
Now go to the repository in GitHub, and click on the Settings section.
Expand secrets and variables in the left-hand menu titled Security
and click on Actions
.
Now go to the Variables tab
Add a repository variable
called FLEXIBLE_ENVIRONMENT_ALIAS
and enter the environment alias you selected earlier.
If you followed the you should already have a variable called TARGET_ENVIRONMENT_ALIAS
.
Next, look at the triggers for the pipeline:
Here you can change when a deployment is trigger based on which branch is pushed to.
The pipeline needs to resolve the target based on the triggering branch, which is done in the following code.
The triggering branch is evaluated in the statement if [[ "${{ github.ref_name }}" == "main" ]]; then
or elif [ "${{ github.ref_name }}" = "flexible" ]; then
.
The code will write which alias is targeted and write a pipeline variable (targetEnvironmentAlias
). This variable is then used by later jobs.
When updating the triggering branch names, it must be updated in the two mentioned places: In the trigger and in the script.
Umbraco CI/CD Flow is designed to facilitate the seamless integration of your existing CI/CD flow with Umbraco Cloud. The primary objective of this feature is to enable your automated workflows to deploy directly to Umbraco Cloud. This lets you leverage the best of both worlds: the robustness of your current CI/CD setup and the specialized hosting environment of Umbraco Cloud.
Umbraco Cloud continues to be a cornerstone in this setup, providing a cloud-based hosting solution specifically optimized for Umbraco CMS. With integration to your Continuous Integration and Continuous Deployment (CI/CD) pipeline, Umbraco CI/CD allows the inclusion of automated workflows. These automated workflows include building, testing, and deploying your Umbraco projects.
Explore the practical benefits of using Umbraco CI/CD Flow for your development and deployment needs. This solution aims to simplify your workflow, improve team collaboration, and reduce deployment time. Here are some key advantages to consider:
Seamless Integration with Existing CI/CD
Umbraco CI/CD Flow allows customers to connect their existing CI/CD pipelines to Umbraco Cloud, making the transition smoother and reducing the learning curve.
Enhanced CI/CD Features
The feature enables unique CI/CD features like PR-flows and automated tests, which are not natively available in Umbraco Cloud. This adds a layer of quality assurance and streamlines the development workflow.
Scalability and Flexibility
Umbraco CI/CD Flow allows for greater scalability and flexibility in your deployment process. You can adapt your existing CI/CD pipeline to handle larger projects or more complex workflows without having to overhaul your Umbraco Cloud setup.
Centralized Management
With Umbraco CI/CD Flow, you can centralize the management of your deployments, tests, and workflows. This makes it easier to monitor, troubleshoot, and optimize your processes, leading to more efficient and reliable deployments. Automating deployment minimizes the risk for human errors that could have a negative effect on the target environment.
Umbraco CI/CD Flow serves as a bridge between your existing CI/CD pipeline and Umbraco Cloud, enabling a more streamlined and automated deployment process. While it offers a number of advantages, there are also limitations that need to be considered. On the page '' you will find a detailed list of the pros and cons of using Umbraco CI/CD Flow.
The CI/CD process for Umbraco projects involves some key steps, from code development locally to deployment to Umbraco Cloud. The flow is generally as follows:
Code Development: Developers work on features or bug fixes in their local environments.
Customer code repository: Changes are committed and pushed to a version control system like Git in the customer's own repository.
Customer pipeline: The code is compiled and built. Tests can be run automatically in the associated pipeline to ensure code quality. Finally, the code is packaged into a zip file and prepared for deployment.
Umbraco Cloud API: The customer pipeline uploads the source packed as a zip file to Umbraco Cloud API.
Umbraco cloud repository: The deployments start which triggers the queueing of the build in Umbraco services. It then pushed the Umbraco Cloud repository to the left-most mainline environment. And if a live environment, the website has been updated.
In a bit more detail the flow will look like this from a pipeline perspective.
To ensure you make the most of Umbraco CI/CD Flow, we suggest exploring the documentation further. Familiarizing yourself with the fundamentals is a good starting point, but delving deeper will enable you to fully harness its capabilities.
Here are three essential pages to get you started:
: Gain a comprehensive understanding of how to interact with the Umbraco Cloud API for seamless deployments and management.
: Follow our step-by-step guide to set up a sample pipeline, making your development and deployment process more efficient.
: Familiarize yourself with the current limitations and considerations to ensure you're making the most out of Umbraco CI/CD Flow.
These resources will provide you with the knowledge and tools you need to successfully implement and optimize your use of Umbraco CI/CD Flow.
"ConnectionStrings": {
"umbracoDbDSN": "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;TrustServerCertificate=true;",
"umbracoDbDSN_ProviderName": "System.Data.SqlClient"
}
"ConnectionStrings": {
"umbracoDbDSN": "Server=YourLocalSQLServerHere;Database=NameOfYourDatabaseHere;User Id=NameOfYourUserHere;Password=YourPasswordHere;TrustServerCertificate=True",
}
stages:
# resolve which environment to deploy to based on triggering branch
- stage: resolveTarget
displayName: Resolve Target Environment
jobs:
- job: setTargetEnvironment
steps:
- script: |
echo "Triggering branch: $(Build.SourceBranchName)"
if [ "$(Build.SourceBranchName)" = "main" ]; then
echo "Target is: $(targetEnvironmentAlias)"
echo "##vso[task.setvariable variable=targetEnvironment;isOutput=true]$(targetEnvironmentAlias)"
elif [ "$(Build.SourceBranchName)" = "flexible" ]; then
echo "Target is: $(flexibleTargetEnvironmentAlias)"
echo "##vso[task.setvariable variable=targetEnvironment;isOutput=true]$(flexibleTargetEnvironmentAlias)"
else
echo "no target environment defined for branch: $(Build.SourceBranchName)"
exit 1
fi
name: setTargetEnvironmentValue
# Trigger when committing to main branch
on:
push:
branches:
- main
- flexible
workflow_dispatch: # Allow manual triggering of the workflow
jobs:
# resolve which environment to deploy to based on triggering branch
set-env:
runs-on: ubuntu-latest
outputs:
targetEnvironmentAlias: ${{ steps.set.outputs.targetEnvironmentAlias }}
steps:
- name: Resolve Target Environment
id: set
run: |
echo "Triggering branch: ${{ github.ref_name }}"
if [[ "${{ github.ref_name }}" == "main" ]]; then
echo "Target is: $leftmostMainline"
echo "targetEnvironmentAlias=$leftmostMainline" >> $GITHUB_OUTPUT
elif [ "${{ github.ref_name }}" = "flexible" ]; then
echo "Target is: $flexible"
echo "targetEnvironmentAlias=$flexible" >> $GITHUB_OUTPUT
else
echo "no target environment defined for branch: $(Build.SourceBranchName)"
exit 1
fi
env:
leftmostMainline: ${{ vars.TARGET_ENVIRONMENT_ALIAS}}
flexible: ${{ vars.FLEXIBLE_ENVIRONMENT_ALIAS }}
Configure an External Login Provider for access to the backoffice of your Umbraco Cloud project environments.
The External Login Providers feature in Umbraco Cloud allows you to integrate third-party authentication systems to manage backoffice user logins securely and efficiently. This functionality is especially useful for teams that want to simplify login management or use their existing identity systems.
Using OpenID Connect, Umbraco Cloud supports external login providers such as Microsoft Entra ID, Auth0, Google, and so on. This feature helps administrators manage backoffice access, assign user roles, and improve security.
This guide shows you how to set up and configure external login providers for your Cloud projects. It includes the following steps:
Additionally, you can explore a few examples in the section below:
To use the External Login Provider feature on Umbraco Cloud there are the following requirements:
Any cloud project based on:
Umbraco 13 with Umbraco.Cloud.Identity.Cms 13.2.1 or higher installed
Umbraco 14 with Umbraco.Cloud.Identity.Cms 14.2.1 or higher installed
Umbraco 15 with Umbraco.Cloud.Cms 15.1.1 or higher installed
You can use any login provider that supports the Open ID Connect protocol.
This guide covers implementing the following External Login Providers with Cloud:
Microsoft Entra ID
Auth0
Access the Microsoft Azure Portal.
Locate the Microsoft Entra ID and enter your tenant.
Select Add.
Choose App registration.
Register your app.
Ignore the Redirect URI as that will be covered later in the guide.
Click Register.
Once the app has been registered, you must find and note down a series of keys. These keys will be used to set up the login provider on Umbraco Cloud.
Locate and note down the following keys:
Application (client) ID - found on the Overview page for the app.
Authority URL - available from Endpoints on the Overview page.
Secret ID - needs to be generated on the Certificates & Secrets page.
Access your Auth0 dashboard.
Navigate to Applications.
Select Create Application.
Give the application a name and select Regular Web Application.
Go to the Settings section.
Identify and note down the following keys:
Domain URL (Authority URL)
Client Id
Client Secret
Access the Google Developer Console.
Select Create Project and give it a name.
Go to the OAuth consent screen page.
Select the Internal User Type and click Create.
Fill in the required information.
Add Authorized domains from where login should be allowed.
Click Save and continue.
Navigate to Credentials.
Select + Create Credentials and choose OAuth client ID.
Choose Web Application as the application type.
Fill in the required fields.
Click Save to complete creating the credentials.
Before you move on, take note of the following keys:
Client ID (generated through the steps above)
Client Secret (generated through the steps above)
Authority URL (https://accounts.google.com
)
Once you have the keys from your login provider, you need to follow the next steps in the Umbraco Cloud Portal.
Keep the configuration for your login provider open, as you will come back to it later in the guide.
Access the Umbraco Cloud Portal.
Navigate to the External Login Provider page under the Security section.
Select Add Configuration.
Fill out the fields.
Click Create to add the new configuration.
Select Redirect URIs.
Take note of the Redirect URI.
Head back to the configuration for your external login provider.
Click on Authentication.
Select Add a platform.
Select Web and add the Redirect URI.
Add more Redirects URIs if needed.
Under Implicit grant and hybrid flows check the following options:
Access Tokens (used for implicit flows)
ID tokens (used for implicit and hybrid flows)
Click Configure to complete the configuration.
Navigate to the Settings section.
Scroll down to find the Application URIs.
Add the Redirect URI to the Allowed Callback URLs.
Add more Redirect URIs if needed.
Open the Credentials created earlier through this guide.
Select Add URI.
Add the Redirect URI.
Click Save to complete the configuration.
Learn about what type of data and information you need for each field in the configuration form.
Alias
A unique alias for the provider.
Use only lower-case.
Spaces are not allowed.
Client Id
A unique Client ID generated in the external login provider.
Entra ID: Guid
Auth0: Random characters
Google: {randomchars}.apps.googleusercontent.com
Client Secret
A secret that is generated in the External Login Provider and is associated with the Client Id.
Authority
The URL for the External Login Provider. This can be found in the External Login Provider.
Entra ID: https://login.microsoftonline.com/<Directory (tenant)>
Auth0: https://{accountId}.uk.auth0.com
Google: https://accounts.google.com
Scopes
These are OpenID-Connect scopes. These are the minimum requirement and will allow the app to authenticate and get the users profile data, email and name.
Default values: openid
, profile
and email
.
Auth Type
Currently only OpenIDConnect is available.
Default: OpenIdConnect
Default User Group
Choose which Umbraco User Group the user should be assigned to if nothing else is defined. Custom User Group added to the backoffice will also be available.
Default Options:
Administrators
Writers
Editors
Translators
Sensitive Data
Enforce User Group on login
A checkbox to choose whether each login will re-evaluate the users role or if it should happen only on the first login.
N/A
User Group Mappings
Use this field to map roles within the login provider with Umbraco User Groups. Example: A user with the "Content Editor" role in the login provider, will be added to the Writer User Group in Umbraco.
Login Provider Role
= Umbraco User Group
Entra ID: Object ID of User Group
= Umbraco User Group
No User Group Found Behaviour
This decides what happens if the mapping for the users User Group hasn't been defined. The options are to select the Default User Group or to disallow the user access to the backoffice.
Options: UseDefaultUserGroup
, Unauthorized
User Group Claim Name
Your provider may assign users to specific roles (For example: Admin, Editor, Viewer).
The User Group Claim Name is the field in the authentication token (claim) that identifies these roles. The system reads this claim to determine a user’s permissions.
Example: If your provider sends roles in a claim named user_roles
, you would set the User Group Claim Name to user_roles
so the system can properly recognize user permissions.
Entra ID: email (ID)
, groups
Metadata Address
If you need a special metadata address for your External Login Provider, you can set it here. By default, the system will resolve the metadata address from the Authority Url, which is why this property is optional.
A common scenario for using a special metadata address is when working with Entra ID and configuring claims mapping. In this case, you must set the metadata address to the following:https://login.microsoftonline.com/{tenant}/v2.0/.well-known/openid-configuration?appid={client-id}
When using an External Login Provider, the invitation flow to the backoffice can no longer be managed within Umbraco. This is because users must first be created in the External Login Provider before they can log in. Umbraco Cloud does not handle this integration.
As an administrator, you are responsible for managing user access to the backoffice.
Send users an email with a backoffice link, instructing them to click "Login with [your login provider]".
The following scenarios showcase how to use the configuration options when setting up the external login provider.
You can use the scenarios to learn how to configure the External Login Provider to fit your needs.
Any user that will be authenticated via the external login provider will end up in a default Umbraco backoffice User Group. As an admin, it will be your job to distribute the users into groups if needed.
Configure the Default User Group field, to specify which group all users should be added to by default.
Any user authenticated via the external login provider will always end up in the same Umbraco backoffice User Group. The group will be re-evaluated on each login, allowing you to change the group all users are in.
Configure the Default User Group field with the User Group all users should be added to.
Enable the Enforce User Group on login.
Any user authenticated via the external login provider can have a role claim associated with its login. This claim can then map to a backoffice User Group. A user with a role that cannot be mapped will end up in a default group.
Configure the Default User Group with the User Group that should be the fallback group.
Select User Default User Group under the No User Group Found Behaviour setting.
Fill in the User Group Mappings map.
Enable Enforce User Group on login.
Any user authenticated via the external login provider can have a role claim associated with its login. This claim can map to a backoffice User Group. If no roles match this claim, the user is denied access to the Umbraco backoffice.
Select Unauthorized in the No User Group Found Behaviour setting.
Fill in the User Group Mappings map.
Enable Enforce User Group on login.
This section provides a step-by-step guide to setting up a CI/CD pipeline in Azure DevOps using the provided sample Bash or Powershell scripts.
Before setting up the pipeline in Azure DevOps, make sure that the following steps from the Configuring a CI/CD pipeline are done:
Pick a Cloud project
Activate CI/CD Flow
Next, you will need to define your pipeline in YAML and use it to interact with the Umbraco Cloud API.
Please be aware that since this involves using your custom pipeline, any issues that arise will need to be resolved by you.
Go to your repositories in Azure DevOps and click on "Create a repository".
Create a new empty repository (don't add a README and don't add a .gitignore), and note down the clone URL.
Go to the Umbraco Cloud Portal and clone your cloud project down locally. This article describes how you can find the clone URL.
Now working locally remove the Git Remote called origin
, which currently points to Umbraco Cloud
git remote remove origin
Optionally rename branch master
to main
# optional step
git branch -m main
git symbolic-ref HEAD refs/heads/main
Add a new remote called origin and pointing to the Azure DevOps clone URL and push
git remote add origin https://{your-organization}@dev.azure.com/{your-organization}/{azure-project-scope}/_git/{your-repository}
git push -u origin --all
Now we can move on to setting up a pipeline.
While working with the project on your local machine, follow these steps to prepare the pipeline, using the samples from the repository.
Select your preferred scripting language:
For a pipeline that uses Powershell scripts you will need the following files:
From the root folder
cloud.zipignore
From the powershell
folder
Get-LatestDeployment.ps1
Get-ChangesById.ps1
Apply-Patch.ps1
Add-DeploymentArtifact.ps1
Start-Deployment.ps1
Test-DeploymentStatus.ps1
From the powershell/azuredevops
folder
azure-release-pipeline.yml
cloud-sync.yml
cloud-artifact.yml
cloud-deployment.yml
Do the following to prepare the pipeline:
Copy the cloud.zipignore
file to the root of your repository
Make a copy of the .gitignore
from your repository and call the copy cloud.gitignore
Both files should be in the root of your repository
In the bottom of the .gitignore
file add the line **/git-patch.diff
Also in the root, create a folder called devops
Copy the 4 YAML files from the powershell/azuredevops
folder into the devops
folder
Inside devops
create an additional folder called powershell
Copy the Powershell scripts from the powershell
folder to the powershell
folder
Note: If you have not changed the branch to main
, then in the azure-release-pipeline.yaml
file change the branch from main
to master.
Commit all changes, and push to Azure DevOps
For a pipeline that uses Bash scripts you will need the following files:
From the root folder
cloud.zipignore
From the bash
folder
get_latest_deployment.sh
get_changes_by_id.sh
apply-patch.sh
upload_artifact.sh
start_deployment.sh
get_deployment_status.sh
From the bash/azuredevops
folder
azure-release-pipeline.yml
cloud-sync.yml
cloud-artifact.yml
cloud-deployment.yml
Do the following to prepare the pipeline:
Copy the cloud.zipignore
file to the root of your repository
Make a copy of the .gitignore
from your repository and call the copy cloud.gitignore
Both files should be in the root of your repository
In the bottom of the .gitignore
file add the line **/git-patch.diff
Also in the root, create a folder called devops
Copy the 4 YAML files from the bash/azuredevops
folder into the devops
folder
Inside devops
create an additional folder called scripts
Copy the Bash scripts from the bash
folder to the scripts
folder
Note: If you have not changed the branch to main
, then in the azure-release-pipeline.yaml
file change the branch from main
to master.
Commit all changes, and push to Azure DevOps
The pipeline needs to know which Umbraco Cloud project to deploy to. In order to do this you will need the Project ID
and the API Key
. This article describes how to get those values.
You will also need the alias of the environment you want to target. This article described how you can see a list of environments you can target here. Note the environment alias you want to target.
Now go to the repository in Azure and click on "Set up build".
On the next screen click on "Existing Azure Pipelines YAML file"
Select main
(or master
if you did not change the branch name) in Branch
Select /devops/azure-release-pipeline.yaml
in Path and continue
Now you are on the "Review your pipeline YAML" screen
Replace the ##Your project Id here##
with the Project Id you got from Umbraco Cloud Portal
Replace the ##Your target environment alias here##
with the alias of the environment you want to target
Click on "Variables"
Add the variable umbracoCloudApiKey
with the value of the API Key you got from Umbraco Cloud Portal
When you click on "Save and Run" your first deployment will be triggered. Which means that Azure DevOps is set up with all the needed information to be able to deploy your Cloud project back to Umbraco Cloud.
With everything set up, you may want to confirm that Umbraco Cloud reflects the changes you are sending via your pipeline.
While working on your project locally, add a new Document type.
Commit the change to main
branch (or master
if you did not change the branch name) and push to your repository.
The pipeline starts to run
Once the pipeline is done log into Backoffice on your left-most environment in Umbraco Cloud
Go to the Settings section and see that your new Document type has been deployed
The mentioned scripts are provided as a starting point. It is recommended that you familiarize yourself with the scripts and with documentation related to how to use Azure DevOps.
The scripts demonstrates the following:
How to sync your Azure DevOps repository with an environment in Umbraco Cloud via the environment alias
How to prepare and upload an artifact that can be used for a deployment
How to deploy changes to an environment in Umbraco Cloud, targeted via the environment alias
The azure-release-pipeline.yaml
is the main pipeline, and is the one that will be triggered on a push to the main
branch in your repository. You can configure a different trigger behavior in this file.
You can add your Build and Test stage between the cloudSyncStage
and cloudPrepareArtifact
stages. Keep in mind that you do not need to retain the dotnet build artifact for upload later. The cloudPrepareArtifact
job will take care of packaging all your source code and upload to Umbraco Cloud.
Make sure that you checkout the potentially updated code if you add Build and Test steps.
The cloud-sync.yml
shows how you can sync your Azure DevOps repository with the targeted environment of your Cloud project. In this sample, it accepts any change from the API and applies and commits it back to the branch which triggered the pipeline. However the commit does not trigger the pipeline again.
If you don't want the pipeline to commit back to the triggering branch, this is where you need to change the pipeline.
The cloud-artifact.yml
shows how you can prepare and package an artifact and finally upload it to Umbraco Cloud.
There are a couple of things here to be aware of:
The sample is overwriting the .gitignore
file with cloud.gitignore
. This is a way to accommodate your gitignore-needs when working locally. For instance you might want to ignore frontend builds, but you want them build and published to cloud.
The sample contains a special cloud.zipignore
file. This is a convenient way to tell the pipeline which files not to include when creating the zip package to send to cloud.
If you want to customize the artifact take a look at Artifact Best Practice.
The cloud-deployment.yml
shows how you can deploy to a named environment of your Cloud project. The sample shows how to request the deployment and wait for cloud to finish the operation.
Please follow the above guide first.
The Umbraco Cloud Portal helps you manage your Umbraco Cloud project. From here, you can view and manage all your Cloud projects in one place.
When you log in to the Umbraco Cloud Portal, the projects dashboard gives an overview of all your Umbraco Cloud projects. Here, you can view all the projects you've created or have been added to as a team member.
You can see the project's environments, usage for each project, and which plans it is on. You can also see whether it is a baseline or baseline-child project.
In the top-right corner of the Umbraco Cloud Portal, you will find:
Create New Project - Allows you to create more projects using the plan you wish and a project will be ready for you within a few minutes.
Notifications - You can also see notifications for your different projects. For example: if your project has been automatically updated or if an upgrade has failed.
Profile - Manage projects, subscriptions, pending invites, organization information, profile details, view release notes, and log out of the portal.
In the right-side corner of the Umbraco Cloud Portal, you can enable Show environments and Show usage of the project from the Settings option.
Collapse Groups allows you to collapse the groups on the project dashboard. You can also expand the groups depending on the view you prefer.
To get a better overview of your projects, it is possible to sort your projects into Groups. This can be done by clicking the Edit Groups button on the top right side of the Umbraco Cloud Portal.
After clicking on Edit Groups, you can create new groups to categorize your projects and create a better overview for yourself.
Click Add Group, give the group a name, and then drag and drop your projects into the group of your choice.
In the bottom-right corner of the Umbraco Cloud Portal, you'll find a chat bubble. This feature allows you to contact the Umbraco HQ Support team for assistance with your Umbraco Cloud projects.
Support availability depends on your plan:
Starter and Standard plans: Support is available for Cloud platform-specific issues.
Professional plan: Includes support for implementation and CMS-related issues through chat.
For more details on plans and pricing, see Umbraco Cloud plans.
When you click on the User Profile link, you will find the following options:
Managing your projects has been simplified with Umbraco Cloud. By navigating to a specific project, you can quickly view the environments within your project.
Project Name: includes options to Create environments or Invite User.
Environment Name: offers options to Restart the environment, view History, Logs, Error Logs, Clone project, Delete project.
Links: Provides access to View Website (frontend), Backoffice, Power Tools (Kudu), and Clone project.
Change Details: Allows you to view change details.
To manage the environments in your project, click Create Environments to add or remove environments as needed. For more information on how the number of environments varies by plan, refer to the Project Overview article.
Additionally, changes are deployed from one Cloud environment to another from the project view. Find out more in the Cloud-to-Cloud article.
In the Settings section, you will find more options to configure your project.
On Umbraco Cloud, you may receive invitations to join different projects. These project details are available under the Pending Invites tab. On the Pending Invites page, as a user, you will see the following details:
Project Name
Invited By
Expiration Date of the invite
Status
Options to approve, reject, or delete the invitations that have expired.
The Profile section includes the following information:
Name: The name displayed on Umbraco Cloud.
Email: The email address used for logging in to Umbraco Cloud and receiving email notifications from the Umbraco Cloud Portal.
{% hint style="info" %} It is not possible to change this email address at a later time. {% endhint %}* Telephone: The contact number of the user.
Edit profile: Allows you to update and ensure your information is valid and up to date for your Umbraco Cloud profile.
Change Password: Provides the option to change the password for your Umbraco Cloud account.
In the Umbraco Cloud portal, you can find a link to the Release Notes in the Profile dropdown. Release notes are published monthly and list the most relevant fixes and features added to the portal.
The Logout option allows you to securely log out of your Umbraco Cloud account.
Learn how to configure and use external login providers via your Umbraco Cloud organization.
The External Login Providers feature in Umbraco Cloud enables you to integrate third-party authentication systems for managing Portal user logins securely and efficiently. This functionality is built for teams that want to manage login using an existing identity setup.
Using OpenID Connect, Umbraco Cloud supports external login providers like Microsoft Entra ID, Auth0, and Google. The feature helps administrators manage backoffice access, assign user roles, and improve security.
This guide shows you how to set up and configure external login providers for the Cloud Portal, including related Project Permissions. It includes the following steps:
Access the Microsoft Azure Portal.
Locate the Microsoft Entra ID and enter your tenant.
Select Add.
Choose App registration.
Register your app.
Ignore the Redirect URI as that will be covered later in the guide.
Click Register.
Once the app has been registered, locate and note down the following keys.
Application (client) ID - found on the Overview page for the app.
Authority URL - available from Endpoints on the Overview page.
Secret ID - needs to be generated on the Certificates & Secrets page.
These keys will be used to set up the login provider on Umbraco Cloud.
Access your Auth0 dashboard.
Navigate to Applications.
Select Create Application.
Give the application a name and select Regular Web Application.
Go to the Settings section.
Identify and note down the following keys:
Domain URL (Authority URL)
Client Id
Client Secret
Access the Google Developer Console.
Select Create Project and give it a name.
Go to the OAuth consent screen page.
Select the Internal User Type and click Create.
Fill in the required information.
Add Authorized domains from where login should be allowed.
Click Save and continue.
Navigate to Credentials.
Select + Create Credentials and choose OAuth client ID.
Choose Web Application as the application type.
Fill in the required fields.
Click Save to complete creating the credentials.
Before you move on, take note of the following keys:
Client ID (generated through the steps above)
Client Secret (generated through the steps above)
Authority URL (https://accounts.google.com
)
Once you have the keys from your login provider, follow the next steps in the Umbraco Cloud Portal.
Keep the configuration for your login provider open, as you will come back to it later in the guide.
Access the Umbraco Cloud Portal.
Navigate to your Organization
Navigate to External Login Providers page under the Login Provider section.
Select Add Configuration.
Fill out the fields.
.
Click Create to add the new configuration.
Click on Sign-in and Redirect Urls.
Take note of the Redirect URI.
Head back to the configuration for your external login provider.
Click on Authentication.
Select Add a platform.
Select Web and add the Redirect URI.
Add more Redirect URIs if needed.
Check the following options under Implicit grant and hybrid flows:
Access Tokens (used for implicit flows)
ID tokens (used for implicit and hybrid flows)
Click Configure to complete the configuration.
Navigate to the Settings section.
Scroll down to find the Application URIs.
Add the Redirect URI to the Allowed Callback URLs.
Add the Redirect URI to the Allowed Logout URLs as well.
Add more Redirect URIs if needed.
Open the Credentials created earlier through this guide.
Select Add URI.
Add the Redirect URI.
Click Save to complete the configuration.
This section provides an overview of what type of data and information is needed for each field in the configuration form.
A descriptive name for the Login Provider
A unique alias for the provider in the Organization. Use only lower-case. Spaces are not allowed.
A unique Client ID is generated in the external login provider.
Entra ID: Guid
Auth0: Random characters
Google: {randomchars}.apps.googleusercontent.com
A secret that is generated in the external login provider and is associated with the Client ID.
The URL for the external login provider. This can be found in the External Login Provider.
Entra ID: https://login.microsoftonline.com/<Directory (tenant)>
Auth0: https://{accountId}.uk.auth0.com
Google: https://accounts.google.com
If you need a special metadata address for your External Login Provider, you can set it here. By default, the system resolves the metadata address from the Authority URL, making the property optional.
A common scenario for using a special metadata address is when working with Entra ID and configuring claims mapping. In this case, you must set the metadata address to the following: https://login.microsoftonline.com/{tenant}/v2.0/.well-known/openid-configuration?appid={client-id}
.
Your provider may assign users to specific roles. For example: Admin, Editor, Viewer.
The User Mapping Claim Name is the field in the authentication token (claim) that identifies these roles. The system reads this claim to determine a user's permissions.
For example, if the roles claim is called user_roles
in your provider, you set the User Mapping Claim Name to user_roles
.
When trying to access Umbraco Cloud Portal through s1.umbraco.io
, you are greeted by an Umbraco ID sign-in screen.
To sign in with your login provider, you must use a special sign-in URL that is unique to your Login Provider.
Go back to Cloud Portal, where you registered the Login Provider.
Click on the Sign-in and Redirect URLs
button.
Give the URL to the Organization members you want to sign in using your Login Provider.
Project Permissions lets you set up access to Projects in the Portal while signed in with your Login Provider.
You must add one Project Permission model per Project and one per Login Provider. It is not required to add Project Permissions to all projects. Projects without a Project Permissions tied to a Login Provider will not be shown to a user logged in with that particular Login Provider.
To set up Project Permission, follow these steps:
Select a Project on the left side of the screen.
Click on "+ Add" on the Login Provider you want to add Project Permissions for.
Fill in the fields in the modal:
Default Access Level (required)
No Claim Found Behavior (required)
User Mapping Claim Name
Project User Mappings
Consists of two fields: "Provider Role Value" and "Project Access Level"
Select the level of access you want users to get for this project.
The dropdown has two possible permissions:
Read
Write
A team member with Read permissions can only view the project in the portal and the backoffice. They are not able to deploy or change anything on the project itself.
A team member with Write permissions can do everything on a project except delete it and edit the team. A user with Write permissions can deploy changes between environments through the portal.
This value is works as a fallback value and can be overwritten by the "Project User Mappings" setting. If there are no Mappings available for the user, the "No Claim Found Behavior" setting will evaluate if this fallback permission is used or "NoAccess".
This setting is used for adding granular control.
You can use the Role Claim from your Login Provider to assign Permissions to your users.
The setting has two options:
NoAccess
Use Default Access Level
When NoAccess
is selected, it will block the user's access to the Project if they do not have the correct Role assigned.
Using the "Use Default Access Level" option, all users in your Login Provider will automatically get the permission you selected in "Default Access Level". The only exception is when they have a hit on the Project User Mappings.
This is used for the name of your provider's default or custom Role claim name. Use this if you want to override the one already entered in the Login Provider configuration.
Use this to map the Provider Role Value (a role coming from your external login provider) to a Project Permission Level in the portal.
If your external login provider is configured to assign roles to users, those role values are included in the ID token. You can then use these values to automatically assign the appropriate access level when the user signs in to the portal.
For example, a role like Happy.Write
from your identity provider could be mapped to the Write
permission level for your Cloud project.
Use the Audit section to troubleshoot your Login Providers and keep an eye on user Sign-ins.
There is an audit log for each Login Provider. If you remove the Login Provider, the audit log will also disappear.
The following audit types are listed:
The Umbraco Cloud API serves as a publicly accessible endpoint that customers can utilize to execute relevant tasks.
With the endpoints for version 2, you are given more control over the process.
These are the most important differences between the V1 and V2 endpoints:
With version 2, it is possible to target a flexible environment or the left-most environment.
More options are available when deploying.
Simplified api call flow: Uploading an artifact is decoupled from the actual deployment.
.
To integrate Umbraco Cloud into your CI/CD pipeline, you'll need to make API calls to the following endpoint :
Path for artifacts
/v2/projects/$projectId/deployments/artifacts
Paths for deployments
/v2/projects/$projectId/deployments
/v2/projects/$projectId/deployments/$deploymentId
Paths for querying deployments and fetching changes
/v2/projects/$projectId/deployments
/v2/projects/$projectId/deployments/$latestCompletedDeploymentId/diff
You will find relevant examples using HTTP Request Syntax
in the sections below.
To authenticate with the Umbraco Cloud API, you'll need your Project ID and API Key. These credentials can be found under Configuration > Advanced in the Umbraco Cloud portal.
The two elements to be used for the authentication are:
Cloud Project ID: The ID of your Umbraco project.
CI/CD API Key: Your unique identifier.
By including the API key header in your HTTP requests, you ensure secure access to your Umbraco Cloud project's resources.
For enhanced security, it's crucial to store the provided API key in a secure location. Options include a variable group in Azure DevOps or using the Secrets feature in GitHub Actions.
Each API key is tightly coupled with a specific Umbraco Cloud project and can only be used for deployments related to that project.
To authenticate your API requests, you'll need to include your API key in a custom HTTP header named Umbraco-Cloud-Api-Key.
Artifacts are tied to a project. The uploaded artifact will be available to use in any deployment to an environment on that project. The artifact needs to be a zip file with the source code needed to build your website.
.
Once the file is uploaded, you will get a response which follows the following JSON schema:
List artifacts uploaded related to a project. The endpoint is paged and accepts the options skip
and take
.
If skip
is not supplied, its value will default to 0.
If take
is not supplied, its value will default to 10.
Response looks like:
The Create Deployment endpoint starts a new deployment and returns a unique deploymentId
.
Some new options are available to use in the request payload:
artifactId
REQUIRED Id of the artifact you want to deploy
targetEnvironmentAlias
REQUIRED Alias of the environment you want to deploy to
commitMessage
OPTIONAL The commit message you want stamped in the Umbraco Cloud environment repository.
noBuildAndRestore
OPTIONAL Option to skip the restore and build in the isolated instance, default to false
skipVersionCheck
OPTIONAL Option to skip the version check in the isolated instance, default to false
The response from the API should be an HTTP 201 Created response including a deploymentId
.
You can use the deploymentId to query the Get Deployment status endpoint.
To monitor the status of a deployment, you can periodically query the 'Get Deployment Status' API. This API endpoint is an HTTP GET request to the Umbraco Cloud API. It requires both the projectId
and the deploymentId
obtained from previous steps to be included in the path.
Deployments in Umbraco services can take varying amounts of time to complete. Therefore, it's advisable to poll this API at regular intervals to stay updated on the deployment's current state. For example, you might choose to poll the API every 25 seconds for a duration of 15 minutes. These figures are a starting point. The optimal polling frequency and duration may differ for your specific pipeline.
A new query parameter has been added to limit the deploymentStatusMessages. As a value for the query parameter you can use the modifiedUtc
value from a previous response.
lastModifiedUtc
OPTIONAL Only show new deploymentStatusMessages since this point in time.
The response from this API call will return the same deployment object in JSON format as you would receive from other API interactions. Ultimately, the deploymentState
field will indicate either 'Completed' or 'Failed'.
Should the deployment fail, check the deploymentStatusMessages
for more information.
The endpoint lets you retrieve a list of completed deployments. It can only list deployments that have been run through the api.
The API allows you to filter and limit the number of returned deployments using query parameters:
Skip
: OPTIONAL zero or positive integer
Take
: OPTIONAL zero or positive integer
Includenulldeployments
: OPTIONAL boolean, defaults to true
TargetEnvironmentAlias
OPTIONAL Will query only for deployments to a specific environment.
The skip
and take
parameters, while optional, are always required to be used together.
With includenulldeployments
set to true, you will get all completed deployments, including those that did not create any new changes in the cloud repository.
The response from this API call will return an object containing a list of deployment objects. The deployment objects are consistent with the structure used in other API responses. Deployments are listed in descending order based on their creation timestamp.
Sometimes updates are done directly on the Umbraco Cloud repository. It is encouraged not to do any actual work there, but auto-upgrades and environment changes will affect the Umbraco Cloud git repositories. To keep track of such changes, you can use the 'Get Deployment Diff' API. This API endpoint will provide you with a git-patch file detailing the changes between a specific deployment and the current state of the repository. To make this API call, you'll need to include both the projectId
and the deploymentId
of the deployment you want to check for differences against. This is a standard HTTP GET request.
The required query parameter has been added to the endpoint:
TargetEnvironmentAlias
REQUIRED The intended deployment target environment for the diff.
The API response will vary based on whether or not there are changes to report. If no changes are detected, you'll receive an HTTP 204 No Content status. If there are changes, the API will return an HTTP 200 OK status along with a git-patch file as the content. This git-patch file can then be applied to your local repository to sync it with the changes.
When interacting with the Umbraco Cloud API, you may encounter HTTP status codes that indicate the success or failure of your API request. Below is a table summarizing the possible status codes, their corresponding errors, and basic root causes to guide your troubleshooting:
Most errors have a response body that corresponds to this JSON, and the “detail” field will have a more complete error message.
This section provides a step-by-step guide to setting up a CI/CD pipeline in GitHub Actions using the provided sample Bash or Powershell scripts.
Before setting up the pipeline in GitHub, make sure that the following steps from the are done:
Pick a Cloud project
Activate CI/CD Flow
Next, you will need to define your pipeline in YAML and use it to interact with the Umbraco Cloud API.
Please be aware that since this involves using your custom pipeline, any issues that arise will need to be resolved by you.
Go to your repositories in GitHub and click on "New".
Create a new empty repository, and note down the clone URL.
Go to the Umbraco Cloud Portal and clone your cloud project down locally. describes how you can find the clone URL.
Now working locally remove the Git Remote called origin
, which points to Umbraco Cloud
Optionally rename branch master
to main
Add a new remote called origin and pointing to the GitHub clone URL and push
Now we can move on to setting up a pipeline.
The pipeline needs to know which Umbraco Cloud project to deploy to. In order to do this you will need the Project ID
and the API Key
. describes how to get those values.
You will also need the alias of the environment you want to target. described how you can see a list of environments you can target here. Note the environment alias you want to target.
Now go to the repository in GitHub, and click on the Settings section.
Expand secrets and variables in the left-hand menu titled Security
and click on Actions
.
Create a repository secret
called UMBRACO_CLOUD_API_KEY
with the API Key
value from the Umbraco Portal.
Create another repository secret
with the name PROJECT_ID
and the Project ID
value from the Umbraco Portal.
Now go to the Variables tab
Create a repository variable
called TARGET_ENVIRONMENT_ALIAS
and enter the environment alias you selected earlier.
Now GitHub is set up with the needed information to be able to run a deployment back to Umbraco Cloud.
Next up it setting up the actual pipeline.
The sample pipelines have a job called cloud-sync
. This job is responsible for checking for changes in your Umbraco Cloud project, fetching them, and applying them back to your repository. In order for this to work, you need to give the GITHUB_TOKEN
write permissions to the repository during workflow runs.
This is how you can grant these permissions:
Working in your repository on GitHub
, click on Settings
in the top right
In the left sidebar, click on Actions
and then on General
Scroll down to the Workflow permissions
sections
Select the Read and write permissions
Click save
While working with the project on your local machine, follow these steps to prepare the pipeline, using the .
Select your preferred scripting language:
For a pipeline that uses Powershell scripts you will need the following files:
From the root folder
cloud.zipignore
From the powershell
folder
Get-LatestDeployment.ps1
Get-ChangesById.ps1
Apply-Patch.ps1
Add-DeploymentArtifact.ps1
Start-Deployment.ps1
Test-DeploymentStatus.ps1
From the powershell/github
folder
main.yml
cloud-sync.yml
cloud-artifact.yml
cloud-deployment.yml
Do the following to prepare the pipeline:
Copy the cloud.zipignore
file to the root of your repository
Make a copy of the .gitignore
from your repository and call the copy cloud.gitignore
Both files should be in the root of your repository
In the bottom of the .gitignore
file add the line **/git-patch.diff
Also in the root, create a folder called .github
Inside .github
create two additional folders
workflows
powershell
Copy the 4 YAML files from the github
folder into the workflows
folder
Copy the Powershell scripts from the powershell
folder to the powershell
folder
Note: If you have not changed the branch to main
, then in the main.yml
file change the branch from main
to master.
Commit the all changes, and push to GitHub
For a pipeline that uses Bash scripts you will need the following files:
From the root folder
cloud.zipignore
From the bash
folder
get_latest_deployment.sh
get_changes_by_id.sh
apply-patch.sh
upload_artifact.sh
start_deployment.sh
get_deployment_status.sh
From the bash/github
folder
main.yml
cloud-sync.yml
cloud-artifact.yml
cloud-deployment.yml
Do the following to prepare the pipeline:
Copy the cloud.zipignore
file to the root of your repository
Make a copy of the .gitignore
from your repository and call the copy cloud.gitignore
Both files should be in the root of your repository
In the bottom of the .gitignore
file add the line **/git-patch.diff
Also in the root, create a folder called .github
Inside .github
create two additional folders
workflows
scripts
Copy the 4 YAML files from the github
folder into the workflows
folder
Copy the Bash scripts from the bash
folder to the scripts
folder
Note: If you have not changed the branch to main
, then in the main.yml
file change the branch from main
to master.
Commit the all changes, and push to GitHub
The push will start a new pipeline run.
With everything set up, you may want to confirm that Umbraco Cloud reflects the changes you are sending via your pipeline.
While working on your project locally, add a new Document type.
Commit the change to main
branch (or master
if you did not change the branch name) and push to your repository.
The pipeline starts to run
Once the pipeline is done log into Backoffice on your left-most environment in Umbraco Cloud
Go to the Settings section and see that your new Document type has been deployed
The mentioned scripts are provided as a starting point. It is recommended that you familiarize yourself with the scripts and with documentation related to how to use GitHub Actions.
The scripts demonstrates the following:
How to sync your GitHub repository with an environment in Umbraco Cloud via the environment alias
How to prepare and upload an artifact that can be used for a deployment
How to deploy changes to an environment in Umbraco Cloud, targeted via the environment alias
The main.yml
is the main pipeline, and is the one that will be triggered on a push to main
branch. You can configure a different trigger behavior in this file.
You can add your Build and Test jobs between the cloud-sync
and cloud-artifact
jobs. Keep in mind that you do not need to retain the dotnet build artifact for upload later. The cloud-artifact
job will take care of packaging all your source code and upload to Umbraco Cloud.
Make sure that you checkout the potentially updated code if you add Build and Test steps.
The cloud-sync.yml
shows how you can sync your GitHub repository with the targeted environment of your Cloud project. In this sample, it accepts any change from the API and applies and commits it back to the branch which triggered the pipeline. However the commit does not trigger the pipeline again.
If you don't want the pipeline to commit back to the triggering branch, this is where you need to change the pipeline.
The cloud-artifact.yml
shows how you can prepare and package an artifact and finally upload it to Umbraco Cloud.
There are a couple of things here to be aware of:
The sample is overwriting the .gitignore
file with cloud.gitignore
. This is a way to accommodate your gitignore-needs when working locally. For instance you might want to ignore frontend builds, but you want them build and published to cloud.
The sample contains a special cloud.zipignore
file. This is a convenient way to tell the pipeline which files not to include when creating the zip package to send to cloud.
If you want to customize the artifact take a look at .
The cloud-deployment.yml
shows how you can deploy to a named environment of your Cloud project. The sample shows how to request the deployment and wait for cloud to finish the operation.
Please follow the above guide first.
GET https://api.cloud.umbraco.com/v2/projects/{{projectId}}/deployments
Umbraco-Cloud-Api-Key : {{apiKey}}
Invoke-RestMethod -Uri https://api.cloud.umbraco.com/v2/projects/$projectId/deployments -Headers @{ "Umbraco-Cloud-Api-Key" = $apiKey } -Method Get
curl -s -X GET https://api.cloud.umbraco.com/v2/projects/$projectId/deployments -H "Umbraco-Cloud-Api-Key: $apiKey"
@projectId = Get this value from the portal
@apiKey = Get this value from the portal
@description = my awesome optional description text
@version = my awesome optional version text
@file = path to file + filename
POST https://api.cloud.umbraco.com/v2/projects/{{projectId}}/deployments/artifacts
Umbraco-Cloud-Api-Key: {{apiKey}}
Content-Type: multipart/form-data; boundary=--TheFormDataBoundary
----TheFormDataBoundary
Content-Disposition: form-data; name="file"; filename="package.zip"
content-type: application/octet-stream
< {{file}}
----TheFormDataBoundary
Content-Disposition: form-data; name="description"
{{description}}
----TheFormDataBoundary
Content-Disposition: form-data; name="version"
{{version}}
----TheFormDataBoundary--
{
"artifactId": string,
"fileName": string,
"blobUrl": string,
"filesize" : number,
"createdUtc": string,
"description": string,
"version": string
}
@skip = 0
@take = 10
@projectId = Get this value from the portal
@apiKey = Get this value from the portal
GET https://api.cloud.umbraco.com/v2/projects/{{projectId}}/deployments/artifacts?skip={{skip}}&take={{take}}
Umbraco-Cloud-Api-Key: {{apiKey}}
Content-Type: application/json
{
"projectId": string,
"data":
[
{
"artifactId": string,
"fileName": string,
"blobUrl": string,
"filesize" : number,
"createdUtc": string,
"description": string,
"version": string
}
],
"totalItems": number,
"skippedItems": number,
"takenItems": number
}
@projectId = Get this value from the portal
@apiKey = Get this value from the portal
@targetEnvironmentAlias = left-most or flexible environment alias
@artifactId = Use artifact id from recent upload
@commitMessage = My awesome commit message for cloud
@noBuildAndRestore = false
@skipVersionCheck = false
POST https://api.cloud.umbraco.com/v2/projects/{{projectId}}/deployments
Umbraco-Cloud-Api-Key: {{apiKey}}
Content-Type: application/json
{
"commitMessage": {{commitMessage}},
"artifactId": {{artifactId}},
"targetEnvironmentAlias": {{targetEnvironmentAlias}},
"noBuildAndRestore": {{noBuildAndRestore}},
"skipVersionCheck": {{skipVersionCheck}}
}
{
"deploymentId": string,
"projectId": string,
"environmentAlias": string,
"deploymentState": string,
"deploymentStatusMessages":
[
{
"message": string,
"timestampUtc": string
},
],
"createdUtc": string,
"completedUtc": string,
"modifiedUtc": string
}
@projectId = Get this value from the portal
@apiKey = Get this value from the portal
@deploymentId = Get this value from the response of the endpoint above
@lastModifiedUtc = Get this value from a previous call to this endpoint
GET https://api.cloud.umbraco.com/v2/projects/{{projectId}}/deployments/{{deploymentId}}?lastModifiedUtc={{lastModifiedUtc}}
Umbraco-Cloud-Api-Key: {{apiKey}}
Content-Type: application/json
{
"deploymentId": string,
"projectId": string,
"environmentAlias": string,
"deploymentState": string,
"deploymentStatusMessages":
[
{
"message": string,
"timestampUtc": string
},
],
"createdUtc": string,
"completedUtc":string,
"modifiedUtc": string
}
@projectId = Get this value from the portal
@apiKey = Get this value from the portal
@skip = Defaults to zero
@take = Defaults to 100
@includeNullDeployments =
@targetEnvironmentAlias =
GET https://api.cloud.umbraco.com/v2/projects/{{projectId}}/deployments?skip={{skip}}&take={{take}}&includeNullDeployments={{includeNullDeployments}}&targetEnvironmentAlias={{targetEnvironmentAlias}}
Umbraco-Cloud-Api-Key: {{apiKey}}
Content-Type: application/json
{
"projectId": string,
"data":
[
{
"id": string,
"artifactId": string,
"targetEnvironmentAlias": string,
"state": string,
"createdUtc": string,
"modifiedUtc": string,
"completedUtc": string,
}
],
"totalItems": number,
"skippedItems": number,
"takenItems": number
}
@projectId = Get this value from the portal
@apiKey = Get this value from the portal
@deploymentId =
@targetEnvironmentAlias =
GET https://api.cloud.umbraco.com/v2/projects/{{projectId}}/deployments/{{deploymentId}}/diff?targetEnvironmentAlias={{targetEnvironmentAlias}}
Umbraco-Cloud-Api-Key: {{apiKey}}
Content-Type: application/json
400
BadRequest
Check the requested path, supplied headers, and query parameters
401
Unauthorized
Check the Project ID and Api Key
404
NotFound
Usually related to the supplied deploymentId in the path not being found
409
Conflict
The state of the referenced deployment is not ready for the work you are requesting
500
InternalServerError
InternalServerError
{
“title”: string,
“status”: number,
“detail”: string,
}
git remote remove origin
# optional step
git branch -m main
git symbolic-ref HEAD refs/heads/main
git remote add origin https://github.com/{your-organization}/{your-repository}.git
git push -u origin --all
jobs:
cloud-sync:
uses: ./.github/workflows/cloud-sync.yml
secrets:
projectId: ${{ secrets.PROJECT_ID }} # change the part inside the curly braces
umbracoCloudApiKey: ${{ secrets.UMBRACO_CLOUD_API_KEY }} # change the part inside the curly braces
with:
targetEnvironmentAlias: ${{ vars.TARGET_ENVIRONMENT_ALIAS }} # change the part inside the curly braces
cloud-artifact:
uses: ./.github/workflows/cloud-artifact.yml
secrets:
projectId: ${{ secrets.PROJECT_ID }} # change the part inside the curly braces
umbracoCloudApiKey: ${{ secrets.UMBRACO_CLOUD_API_KEY }} # change the part inside the curly braces
cloud-deployment:
needs: cloud-sync
uses: ./.github/workflows/cloud-deployment.yml
secrets:
projectId: ${{ secrets.PROJECT_ID }} # change the part inside the curly braces
umbracoCloudApiKey: ${{ secrets.UMBRACO_CLOUD_API_KEY }} # change the part inside the curly braces
with:
targetEnvironmentAlias: ${{ vars.TARGET_ENVIRONMENT_ALIAS }} # change the part inside the curly braces
# Trigger when committing to main or flexible branch
trigger:
batch: true
branches:
include:
- main
- flexible
User Sign-ins
-
See information about Project Permissions evaluated at the Sign-in.
External Login Providers
Added and Updated
Entries include the changed properties. The Client Secret is always redacted.
Project Permission
Added, Updated, and Deleted
Shows information on the changed properties and stored Role mapping options
Follow this guide when upgrading your Cloud project to a new major version of Umbraco CMS.
Before upgrading your Umbraco Cloud project to the latest major version, you must consider the version your project is already on. This will impact the upgrade flow you will be following.
When upgrading from an STS version, you must start by upgrading to the closest Long-term Support (LTS) major. If the version you are upgrading to is an STS version, you can upgrade to that version, directly from the closest LTS. You can upgrade directly if there are no LTS versions between the current one and the one you are upgrading to.
Refer to the to learn which versions are STS.
Start by upgrading to the closest LTS. In this case, that is Umbraco 13. After that, you can upgrade directly from Umbraco 13 to Umbraco 15.
When upgrading from an LTS version, you must start by looking at the versions between yours and the one you are upgrading to. Is there another LTS version in that line, you need to upgrade to that version first.
Refer to the to learn which versions are LTS.
Between version 10 and 15, there is another LTS version: Umbraco 13. The first step is therefore to upgrade to Umbraco 13. After that, you can upgrade directly from Umbraco 13 to Umbraco 15.
Look for the "Upgrade from/to Umbraco xx" boxes. These boxes contain important information about any extra steps needed for a specific version.
Follow the requirements for .
An Umbraco Cloud project running
The latest . is installed locally.
At least two environments on your Cloud project.
A backup of your project database.
Directly from your environment. See the article,
Or clone down, restore the project, and back up the local database.
Before proceeding, you must determine whether the .NET framework version needs to be updated for your project. If no changes to the .NET version are required, you can skip this step and proceed with Step 2.
Refer to the section to identify whether a .NET version update is necessary for your upgrade.
Go to the project in the Umbraco Cloud portal.
Navigate to Configuration -> Advanced.
Scroll down to the Runtime Settings section.
Select the appropriate .NET version from the Change .NET framework runtime for your Umbraco install dropdown for each environment in your Cloud project.
Clone down the left-most mainline environment.
Build and run the .
Log in to the backoffice.
Restore content from your Cloud environment.
Open the csproj
file located in the /src/UmbracoProject
folder.
Determine if you need to update the .NET version based on the changes made in :
If the .NET version was updated: Update the <TargetFramework>
to match the version set in your Cloud environment.
If the .NET version was not updated: Skip this step.
Go to Tools > NuGet Package Manager > Manage NuGet Packages for Solution.
Navigate to the Updates tab.
Select the version you are updated to and follow the instructions:
Update the following packages:
Umbraco.Forms.Deploy
Umbraco.Cms
Umbraco.Deploy.Cloud
Umbraco.Deploy.Contrib
Umbraco.Forms
Umbraco.Cloud.Cms
Umbraco.Cloud.StorageProviders.AzureBlob
Update the following packages:
Umbraco.Forms.Deploy
Umbraco.Cms
Umbraco.Deploy.Cloud
Umbraco.Deploy.Contrib
Umbraco.Forms
Umbraco.Cloud.Cms
Umbraco.Cloud.Identity.Cms
Umbraco.Cloud.Cms.PublicAccess
Umbraco.Cloud.StorageProviders.AzureBlob
Microsoft.Extensions.DependencyInjection.Abstractions
From Umbraco 13, the Umbraco.Deploy.Forms
package has been replaced with the Umbraco.Forms.Deploy
package.
Remove the Umbraco.Deploy.Forms
package.
Update the following packages:
Umbraco.Cms
Umbraco.Deploy.Cloud
Umbraco.Deploy.Contrib
Umbraco.Forms
Umbraco.Cloud.Cms
Umbraco.Cloud.Identity.Cms
Umbraco.Cloud.Cms.PublicAccess
Umbraco.Cloud.StorageProviders.AzureBlob
Microsoft.Extensions.DependencyInjection.Abstractions
Install the Umbraco.Forms.Deploy
package.
Update the following packages:
Umbraco.Deploy.Forms
Umbraco.Cms
Umbraco.Deploy.Cloud
Umbraco.Deploy.Contrib
Umbraco.Forms
Umbraco.Cloud.Cms
Umbraco.Cloud.Identity.Cms
Umbraco.Cloud.Cms.PublicAccess
Umbraco.Cloud.StorageProviders.AzureBlob
Microsoft.Extensions.DependencyInjection.Abstractions
Ensure the feature is enabled.
Run the project locally.
Log in to the Umbraco backoffice to verify the upgrade has happened.
If you cannot login locally via Umbraco ID and URL shows /umbraco/authorizeupgrade?redir=
then this is because of the Unattended Upgrades setting. It must be set to true
and deployed to the environment before the upgrade.
If you receive a missing deploy license error after upgrading, even though the license is valid, it may be due to browser caching. Google Chrome has an aggressive caching that can interfere with license validation during startup. To resolve this:
Open Chrome's Developer Tools (F12).
Right-click the reload button next to the address bar.
Select Empty cache and hard reload.
It is recommended to clear the cache and cookies thoroughly in all browsers you're using to access the Umbraco backoffice. This step can help resolve unexpected startup issues after the upgrade.
Ensure that the project runs locally without any errors.
Push the changes to the Cloud environment. See the article.
Test that everything works with the upgrade on the Cloud environment.
We highly recommend that you go through everything in your Cloud environment. This can help you identify any potential errors after the upgrade, and ensure that you are not deploying any issues onto your production environment.
The next part is to deploy the upgrade through to the production environment.
For major upgrades that include content migrations, the process can be extensive. This is especially true for sites with a large amount of content. In these cases, it is recommended to:
Initiate a content freeze to prevent changes during the migration.
Rearrange your custom hostname(s) to minimize website downtime.
You can choose between two approaches based on your needs:
"With content freeze" - involves a more detailed upgrade process but helps reduce downtime on your live website.
"Without content freeze" - provides a more straightforward process that may result in longer downtime on your live website.
Delete any environments between your left-most and production environments.
Create a new environment from the production environment - call it Staging.
Initiate content-freeze.
Import content using either of the following approaches:
directly from the backoffice.
Use the functionality in the Cloud Portal.
Deploy the upgrade from the left-most environment.
Verify and test all functionality on the upgraded environment.
from the production environment.
Ensure the hostname(s) no longer point to the production environment.
to the new environment (Staging).
Deploy the upgrade to the production environment.
In case the upgrade is taking longer than expected, restore a backup of the Staging database on the production environment.
Cancel content-freeze.
Verify and test all functionality in the production environment.
from the Staging environment.
Ensure the hostname(s) no longer point to the Staging environment.
to the production environment.
Deploy the upgrade to the next environment.
Verify and test all functionality on the upgraded environment.
Deploy the upgrade to the production environment.
In case the upgrade is taking longer than expected, restore a backup of the database on the production environment.
Verify and test all functionality in the production environment.
This article will provide detailed steps on how to migrate a Umbraco 7 Cloud project to Umbraco 8.
Taking your Umbraco CMS project from Umbraco 7 to 8 is called a migration as it requires that the data is migrated in the process. This article covers each step involved in this process.
Read the to learn more about limitations and other things related to migrating your Umbraco site from 7 to 8.
You can find the full playlist here:
A Umbraco 7 Cloud project running the latest version of Umbraco 7.
Make sure Umbraco Forms data is not handled as content.
See for more details on how to check the setting.
A clean Cloud project running the latest version of Umbraco 8 with at least 2 environments.
Clone down the Umbraco 7 Cloud project.
Run the project locally and restore Content and Media.
Clone down the Development environment from the Umbraco 8 Cloud project.
Install the community package on the cloned Umbraco 8 site.
Copy ~/App_Data/Umbraco.sdf
or ~/App_Data/Umbraco.mdf
from the cloned Umbraco 7 project.
Paste the file into ~/App_Data
on the clone of the Umbraco 8 project.
Open web.config
from the Umbraco 8 project.
Locate the Umbraco.Core.ConfigurationStatus
key.
Replace the value with the version your Umbraco 7 project is running.
Run the Umbraco 8 project locally
Authorize the migration - Cloud credentials are used for this.
Click Continue to start the migration.
Log in to the backoffice and verify that everything is there once the migration is complete.
Before moving on to the next step, make sure that the Umbraco 8 project is no longer running.
The following files/folders need to be copied into the Umbraco 8 project:
~/Views
- do not overwrite the default Macro and Partial View Macro files, unless changes have been made to these.
~/Media
Any files/folders related to Stylesheets and JavaScripts.
Any custom files/folders the Umbraco 7 project uses, that aren't in the ~/Config
or ~/bin
.
~/App_Data/UmbracoForms
- in the case Umbraco Forms was used on the Umbraco 7 site.
Merge the configuration files carefully to ensure any custom settings are migrated while none of the default configurations for Umbraco 8 is overwritten.
Run the Umbraco 8 project locally
It will give you an error on the frontend as none of the Template files have been updated yet.
Open the command line tool in the ~/data
folder on the Umbraco 8 project.
Generate UDA files by running the following command: echo > deploy-export
.
Once a deploy-complete
marker is added to the ~/data
folder, it is done.
Check ~/data/revision
to ensure all the UDA files have been generated.
Run echo > deploy
in the ~/data
folder to make sure everything checks out with the UDA files that were generated.
Running the echo > deploy
command will generate a new marker. Move forward with the migration based on the marker:
deploy-failed
Something failed during the check
Run echo > deploy-clearsignatures
followed by echo > deploy
to clear up the error
deploy-complete
Everything checks out: Move on to the next step
Umbraco 8 is different from Umbraco 7 in many ways. This means that in this step, all custom code, controllers, and models need to be reviewed and rewritten for Umbraco 8.
One of the changes made, is how published content is rendered through Template files. Due to this, it will be necessary to update all Template files (.cshtml
) to reflect these changes.
Read more about these changes in the .
Template files need to inherit from Umbraco.Web.Mvc.UmbracoViewPage<ContentModels.HomePage>
instead of Umbraco.Web.Mvc.UmbracoTemplatePage<ContentModels.HomePage>
.
Template files need to use ContentModels = Umbraco.Web.PublishedModels
instead of ContentModels = Umbraco.Web.PublishedContentModels
.
@Model.Value("propertyAlias")
replaces @Umbraco.Field("propertyAlias")
.
@Model.PropertyAlias
replaces @Model.Content.PropertyAlias
.
@Model.Value<IPublishedContent>("propertyAlias")
replaces Model.Content.GetPropertyValue<IPublishedContent>("propertyAlias")
.
Depending on the size of the project and the amount of custom code and implementations, this step is going to require a lot of work.
Once the Umbraco 8 project runs without errors on the local setup, the next step is to deploy and test on the Cloud Development environment.
Push the migration and changes to the Umbraco Cloud Development environment
Progress through the steps based on the deployment result:
deploy-failed
: Run echo > deploy-clearsignatures
followed by echo > deploy
to clear up the error.
deploy-complete
: The Development environment has been upgraded.
Transfer Content and Media from the local clone to the Development environment.
Test everything on the Development environment.
Deploy to the Live environment.
Once the migration is complete, and the Live environment is running without errors, the site is almost ready for launch.
Setup rewrites on the Umbraco 8 site.
Assign hostnames to the project.
Hostnames are unique, and can only be added to one Cloud project at a time.
@addTagHelper *, Smidge
@inject Smidge.SmidgeHelper SmidgeHelper
public class Program
{
public static void Main(string[] args)
=> CreateHostBuilder(args)
.Build()
.Run();
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureUmbracoDefaults()
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStaticWebAssets();
webBuilder.UseStartup<Startup>();
});
}
"$schema": "./umbraco/config/appsettings-schema.json",
"$schema": "./appsettings-schema.json",
<add name="UsersMembershipProvider"
type="Umbraco.Web.Security.Providers.UsersMembershipProvider, Umbraco"
minRequiredNonalphanumericCharacters="0"
minRequiredPasswordLength="8"
useLegacyEncoding="true"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
passwordFormat="Hashed" />
To make rewrite rules on Umbraco Cloud as seamless as possible, we've installed the IIS Rewrite Module on all our Umbraco Cloud servers.
You need to use config transform to add rewrite rules.
The rewrite rules should be added to the <system.webServer><rewrite>
module in your project's web.config
file.
<!--
<rewrite>
<rules></rules>
</rewrite>
-->
When setting up rewrite rules on Umbraco Cloud, there are a few important things to keep in mind:
Always include a condition to exclude the Umbraco backoffice path (/umbraco
). Failing to do so may prevent you from deploying to and from the environment.
To continue working locally with your Umbraco Cloud project, you should also add a condition to exclude localhost
.
To serve verification files from the .well-known
directory (for example, Apple Pay or Google), follow the Rewrite rule workaround in the CMS documentation.
umbraco.io
URLAfter assigning a hostname to your live environment, you may want to hide the project's default URL (for example, example.euwest01.umbraco.io). This could be for improving Search Engine Optimization (SEO) or to communicate to your users that the site is accessible only through the primary hostname.
One approach for this is to add a new rewrite rule to the <system.webServer><rewrite><rules>
section in the web.config
file. For example, the following rule will redirect all requests for the project example.euwest01.umbraco.io
to example.com
. It will use HTTPS and include the www.
prefix, responding with a permanent redirect status.
<rule name="Redirect umbraco.io to primary hostname" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="\.umbraco\.io$" />
<add input="{HTTP_HOST}" pattern="^(dev-|stage-)(.*)?\.umbraco\.io$" ignoreCase="true" negate="true" />
<add input="{REQUEST_URI}" pattern="^/umbraco" ignoreCase="true" negate="true" />
<add input="{REQUEST_URI}" pattern="^/App_Plugins" ignoreCase="true" negate="true" />
<add input="{REQUEST_URI}" pattern="^/sb" negate="true" /> <!-- Don't redirect Smidge Bundle -->
<add input="{HTTP_COOKIE}" pattern="^(.+; )?UMB_UCONTEXT=([^;]*)(;.+)?$" negate="true" /> <!-- Ensure preview can render -->
<add input="{HTTP_HOST}" pattern="^localhost(:[0-9]+)?$" negate="true" />
</conditions>
<action type="Redirect" url="https://www.example.com/{R:0}" redirectType="Permanent" />
</rule>
Once you've applied a certificate to your site, anybody visiting your site will always end up on HTTPS instead of the insecure HTTP.
To accomplish this, add a rewrite rule to the live environment's web.config
in the <system.webServer><rewrite><rules>
section.
For example, the following rule will redirect all requests for the site http://example.com URL to the secure https://example.com URL and respond with a permanent redirect status.
<rule name="Redirect HTTP to HTTPS" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
<add input="{HTTP_HOST}" negate="true" pattern="^localhost(:[0-9]+)?$" />
<add input="{REQUEST_URI}" negate="true" pattern="^/\.well-known/acme-challenge/" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:0}" redirectType="Permanent" />
</rule>
It is possible to transform all of your URLs to use a trailing slash consistently for SEO.
To accomplish this, add a rewrite rule to the Live environment's web.config
in the <system.webServer><rewrite><rules>
section.
For example, the following rule will redirect all requests for https://example.com/page
to https://example.com/page/
, and respond with a permanent redirect status. This way you can ensure that you use the trailing slashes consistently on your site.
<rule name="Add trailing slash" stopProcessing="true">
<match url="(.*[^/])$" />
<conditions>
<add input="{REQUEST_FILENAME}" negate="true" matchType="IsDirectory" />
<add input="{REQUEST_FILENAME}" negate="true" matchType="IsFile" />
<add input="{REQUEST_FILENAME}" negate="true" pattern="(.*?)\.[a-zA-Z0-9]{1,4}$" />
<add input="{REQUEST_URI}" pattern="^/umbidlocallogin" negate="true" />
<add input="{REQUEST_URI}" negate="true" pattern="^/umbraco" />
<add input="{REQUEST_URI}" negate="true" pattern="^/DependencyHandler.axd" />
<add input="{REQUEST_URI}" negate="true" pattern="^/App_Plugins/" />
<add input="{REQUEST_URI}" negate="true" pattern="^/\.well-known/acme-challenge/" />
</conditions>
<action type="Redirect" url="{R:1}/" />
</rule>
Another example would be to redirect from non-www to www:
<rule name="Redirect to www prefix" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" negate="true" pattern="^www\." />
<add input="{HTTP_HOST}" negate="true" pattern="^localhost(:[0-9]+)?$" />
<add input="{HTTP_HOST}" negate="true" pattern="\.azurewebsites\.net$" />
<add input="{HTTP_HOST}" negate="true" pattern="\.umbraco\.io$" />
</conditions>
<action type="Redirect" url="https://www.{HTTP_HOST}/{R:0}" />
</rule>
Adding the .azurewebsites.net
pattern is required for the deployment service and the content transfer between environments to continue to function.
An example configuration to help ensure your custom rules integrate properly:
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<location path="." inheritInChildApplications="false">
<system.webServer>
<rewrite xdt:Transform="Insert">
<rules>
<!-- Add your custom rules here -->
</rules>
</rewrite>
</system.webServer>
</location>
</configuration>
Sometimes, you might experience an issue where a .azurewebsites.net
link will appear instead of the custom hostname. In this case, a restart will usually fix the issue, however, it is not ideal that this appears at all.
The following redirect is a way to amend the issue where the .azurewebsites.net
link appears instead of the hostname. It will redirect from the .azurewebsites.net
link to the hostname of the website, should this link be called instead.
<rule name="Redirects azurewebsites.net to actual domain" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="^(.*)?.azurewebsites.net$" />
<add input="{REQUEST_URI}" negate="true" pattern="^/umbraco" />
<add input="{REQUEST_URI}" negate="true" pattern="^/DependencyHandler.axd" />
<add input="{REQUEST_URI}" negate="true" pattern="^/App_Plugins" />
<add input="{REQUEST_URI}" negate="true" pattern="localhost" />
</conditions>
<action type="Redirect" url="https://www.hostname.com/{R:0}" appendQueryString="true" redirectType="Permanent" />
</rule>
The redirect for .azurewebsites.net
can be used on projects where only one custom hostname is configured.
This article explains how you can work with a local clone of your Umbraco Cloud project. The tutorial works with both Windows and Mac.
We recommend using the following tools to work with a local clone of your Umbraco Cloud project:
Git needs to be installed on your computer to clone down the project and push your changes up to Cloud.
We recommend using one of the following git-clients if you are new to Git:
Microsoft Visual Studio or JetBrains Rider - for running the project on your local machine.
To clone an Umbraco Cloud project, follow these steps:
Open the project you wish to clone in the Umbraco Cloud Portal.
Click on the arrow next to the Development environment.
Select Clone project.
Copy the clone URL to copy the Development environment's git repository endpoint.
Use your favorite Git client to clone down the project. In this guide, we will use Git Bash.
Type the following command in the Git Bash terminal:
git clone <Git clone URL>
The <Git clone URL>
should be the URL you copied from the Cloud Development environment.
Press Enter.
Once the project has been cloned, you will get a folder with files for your Umbraco Cloud project. Now, you have a copy of your Umbraco Cloud Development environment that you can run locally.
To run your Umbraco Cloud project locally, you will need to install the latest .NET SDK (if you do not have this already).
With dotnet installed, run the following commands in a terminal application of your choice. You can also refer to the Readme
file in the project folder.
Navigate to the newly created project folder.
Run the following commands:
cd src/UmbracoProject
Build and run the project:
dotnet build
dotnet run
The terminal output will show the application starting up and will include localhost URLs which you can use to browse to your local Umbraco site.
The first time the project is run locally, you will see the Restore from Umbraco Cloud screen. If the cloned environment has Umbraco Deploy metadata files, they are automatically extracted with the option to restore content from Cloud to the local installation.
Click Restore to restore your site's content if any. Wait until this process is completed as it also creates the local SQLite database for your site.
When working locally, we recommend using Visual Studio but you can use any other development tool of your choice.
Once the project has been cloned down, you will get a folder with files for your Umbraco Cloud project.
Navigate to src/UmbracoProject
. Here, you will find the files for your Umbraco installation.
Open the UmbracoProject.csproj
file in Visual Studio.
Build and run your solution in Visual Studio.
You can create content, add media, and create your custom code. When you're ready to deploy your changes make sure to have a look at the deployments documentation.
To collaborate effectively in an Umbraco Cloud project, ensure you have a solution file in Visual Studio. This allows for adding additional projects.
If you want to add a solution file for your Cloud project, you can do it either:
Using the terminal of your choice, navigate to the root of the git repository of your Umbraco Cloud project and enter the following command:
dotnet new sln --name <MyAwesomeSolution>
Open the UmbracoProject.csproj
project in Visual Studio.
Click on the solution:
Save the solution file using the Save as option:
Provide a File name to create the solution file in the folder that you specified.
If you want to add additional projects to your solution, you can do it either through the:
Run the following commands to add additional projects to your solution:
dotnet new classlib --name MyAwesomeProject.Web --output src/MyAwesomeProject.Web
dotnet sln add .\src\MyAwesomeProject.Code\MyAwesomeProject.Code.csproj
dotnet sln add .\src\MyAwesomeProject.Web\MyAwesomeProject.Web.csproj
Open the UmbracoProject.csproj
project in Visual studio.
Click on the solution:
Right-click the solution and choose Add
-> New Project...
Add a class library using the latest .NET SDK to your project:
Once the Class library (.Core
) has been added, you can see the project(s) that have been added in Solution Explorer.
To rename your Umbraco Cloud project files and folder, do the following:
Navigate to the .umbraco
file at the root of the project and view the following:
[project]
base = "src/UmbracoProject"
csproj = "UmbracoProject.csproj"
The base
property provides the folder location which contains the application and the csproj
property is the name of the .csproj file.
Rename the UmbracoProject
directory and .csproj
file.
Update the .umbraco
file with the new name and any C# code namespaces reflecting the name of your project.
Additionally, if you prefer to organize your code, you can add additional Class Library projects that are referenced by the Umbraco application .csproj file.
For example: Rename UmbracoProject.csproj
to MyAwesomeProject.Web.csproj
and have one or more additional class library projects such as MyAwesomeProject.Code.csproj
[project]
base = "src/MyAwesomeProject.Web"
csproj = "MyAwesomeProject.Web.csproj"
If you've built and run the project locally, update your local Git repository to reflect any changes made. When a Cloud project first runs, a Git hook is created. It triggers a schema update via Umbraco Deploy when changes are pulled from an upstream environment.
The file you'll need to update is post-merge
within .git/hooks/
in your cloned environment files. It can be opened with a text editor. You can either delete the file so it will be recreated with the new path or update it. The default contents are shown below and can be updated to reflect the new path to the umbraco/Deploy
folder.
#!/bin/sh
echo > src/UmbracoProject/umbraco/Deploy/deploy
You can work locally with your Umbraco Cloud site without needing a Windows machine or a local web server installed. This enables users on macOS or Linux-based operating systems to use their preferred editor to modify code in their Umbraco Cloud site.
On the Umbraco Cloud portal, go to your project and clone the site using your favorite Git client.
Configure a SQL Server connection string using ConnectionStrings
in appsettings.json
or appsettings.Development.json
(the launchSettings.json
configures the local instance to run as 'Development'):
"ConnectionStrings": {
"umbracoDbDSN": ""
}
Configure the local instance to install unattended by adding the following settings to appsettings.Development.json
:
{
"Umbraco": {
"CMS": {
"Unattended": {
"InstallUnattended": true,
"UnattendedUserName": "",
"UnattendedUserEmail": "",
"UnattendedUserPassword": ""
}
}
}
}
In your terminal, navigate to the src/UmbracoProject
folder and run the following commands to start the project:
dotnet build
dotnet run
When running the site for the first time, the database schema will be inserted automatically into the database (with "InstallUnattended": true
in appsettings.Development.json
), so the site will start up ready for use.
A FAQ section addressing common technical questions about Umbraco Cloud.
This section provides answers to common technical questions about Umbraco Cloud, specifically for developers. If you're looking for general product information, visit the FAQ on our website.
Yes, you can start a free 14-day trial with no obligation to buy.
No, it runs on the latest publicly available version of Umbraco.
A well-built site with around 50,000 daily visitors (~1.5 million monthly) performs well on Umbraco Cloud. For business-critical, high-traffic sites, consider Umbraco Cloud Professional or Enterprise, possibly with a dedicated server.
Auto-scaling is not available yet but is under consideration. However, we do offer dedicated worker resources. Contact Us to learn more.
No, load balancing is not currently supported.
Yes. Since Umbraco Cloud uses the standard Umbraco version, you can:
Clone your site.
Restore your data locally.
Delete your Umbraco Cloud project.
While leaving is unfortunate, choosing the best solution for your needs is always supported.
Umbraco Cloud works best as the foundation for a new project. While migration is possible, adjustments may be needed to align with Umbraco Cloud’s workflow. For more details, see the Migrate to Umbraco Cloud article.
Umbraco Cloud uses Azure infrastructure for localization in Umbraco CMS. You can find the available languages in the dropdown below.
All Umbraco Cloud plans use P1V3 Azure App Service Plans as their underlying infrastructure, which includes:
2 CPU Cores
8GB of RAM
250 GB Disk space
1,920 Transmission Control Protocol (TCP) connections
Quotas for different Umbraco Cloud plans can be found in the Umbraco Cloud Plans article.
Each plan also has hostname limitations, which are listed in the pricing details. Most Cloud sites operate within these limits, but solutions are available for those requiring additional resources.
Website usage and performance can be monitored through the Usage and the Availability & Performance pages.
The 'Usage' page provides details on bandwidth consumption.
The 'Availability & Performance' page allows monitoring of CPU and memory usage.
Yes. Hostnames managed in a customer's Cloudflare (CF) zone can be enrolled as DNS Only or via the hostname pre-validation flow in the orange-to-orange configuration.
Orange-to-orange configuration is the recommended approach for maximum control, as you get to keep full control of your Edge configuration. In an orange-to-orange configuration, any Umbraco Cloud Cloudflare provided features, such as Managed Challenge, Web Application Firewall (WAF), can be stacked or disabled and managed manually in the customer zone.
The DNS Only configuration is the recommended approach for minimum custom Cloudflare maintenance. In the DNS Only configuration, the customers' Cloudflare zone won't apply DDoS protection or Web Application Firewall, and the Umbraco Cloud Cloudflare features will continue working.
It is worth mentioning that Umbraco Cloud websites already provide many baseline Cloudflare features such as DDoS or Web Application Firewall by default.
All HTTP requests to custom hostnames on Umbraco Cloud pass through Cloudflare, which adds extra HTTP headers. These headers provide location-based information that can be useful for multilingual sites, redirections, or analytics.
Location headers:
cf-ipcity
: Visitor's city
cf-ipcontinent
: Visitor's continent
cf-iplatitude
: Visitor's latitude
cf-iplongitude
: Visitor's longitude
uc-ipcountry
: Visitor’s country (identical to cf-ipcountry).
All supported versions of Umbraco CMS are available on Umbraco Cloud. The Long-Term Support & End-of-Life page provides more details on supported versions.
Upgrade occurs the first Tuesday after a new patch version of Umbraco CMS, Forms, or Deploy has been released.
Cloud projects are automatically upgraded to the latest patch and minor version of Umbraco CMS, Forms, and Deploy. Each new patch version is first tested with a test suite, then on 10 test sites. If successful, the upgrade is rolled out in batches of 100 customer accounts.
Auto-upgrades are rolled out after verifying that all environments respond without errors. If any environment returns an HTTP status error, the upgrade process is aborted.
Other reasons for missing the upgrade:
A failed test after applying the auto-upgrade, which compares environment states before and after the upgrade. If discrepancies are found, the environment is rolled back.
Active deployments during the upgrade attempt.
Environments running different minor versions, such as one environment on 15.0.x and another on 15.1.x.
For more details, see the Upgrades article.
Pending commits do not stop the auto-upgrade.
Yes, manual upgrades are fine, such as upgrading from 15.1.1 to 15.1.2 locally. If you need to upgrade before the scheduled service upgrade or if an automatic upgrade failed, you can perform a manual update. However, you will need to run the upgrade installer manually on each environment, including live.
Any default Umbraco files may be overwritten during upgrades. This usually affects only files changed in the newest release, but there’s no guarantee. For example, if you’ve customized the login page, it will likely be reverted after each upgrade.
Yes, you can conduct penetration tests on your Cloud site. However, please inform Support beforehand so the team can monitor for any unusual activity.
Test results are welcome to help improve Umbraco's security. Contact Support via the chat button at the bottom right of the Umbraco Cloud portal.
No, DDoS attacks are strictly prohibited on Umbraco Cloud sites.
Umbraco Cloud’s ability to support your website depends on different factors, such as visitor volume and media storage requirements.
Performance needs vary by website based on its design and configuration. We recommend conducting a load test to determine if Umbraco Cloud can handle your specific website. This test simulates real-world traffic to assess the computational power and resources your site needs.
You can use tools like LoadNinja to run these tests and understand your website’s requirements.
It is recommended to discuss the load test plan with Support before proceeding. Contact Support via the chat button at the bottom right of the Umbraco Cloud portal.
Can't find an answer to your question? Many security-related topics are covered in the Security article.
Yes. Umbraco Cloud provides automatic Transport Layer Security (TLS)/HTTPS certificates for all hostnames added to a project's environment. These certificates, issued by Cloudflare, are valid for 90 days and automatically renewed as long as the hostname remains active.
Yes. Professional and Enterprise Plans allow the use of custom certificates for custom hostnames, replacing the default certificates provided by Umbraco Cloud.
Learn more about how to use your own certificates in the Custom certificates article.
By default, Umbraco Cloud supports HTTP/2.
No, this is not a security risk. The ARRAffinity cookie is set by the load balancer (LB) to track which server the site is on. It is a built-in feature of Azure App Service and is only useful when scaling to multiple servers. Since Umbraco Cloud does not scale sites across multiple servers, this cookie remains unused.
Learn more in our Security article.
Yes, any valid certificate can be used on Umbraco Cloud.
This warning appears when domain bindings are not set up correctly. Check bindings in the Cloud Portal under the Manage hostnames section.
Yes. IP filtering can be added to control access. However, Umbraco Deploy must still communicate between environments, and the site should remain accessible locally.
Learn more and how to set it up in the Security article.
Yes, TDE is enabled by default for sites created after May 2, 2017. For older sites, this feature can be enabled upon request.
No, a shared database should not be used. Umbraco Cloud is designed so each team member can safely make changes locally and push them to the Cloud environment. Other developers can do the same, allowing changes to be tested in a structured way. Once changes are confirmed, developers can pull updates and continue working on new features.
Using a shared database can cause two major issues:
Umbraco's flexible load balancing automatically activates when multiple developers share a database. Without proper load balancing setup, changes made by one developer may not be visible to others, leading to potential data overwrites.
The deployment engine (Umbraco Deploy) is not designed for shared databases. Local sites may quickly fall out of sync, causing errors and mismatches when changes are pushed to the Cloud instance.
Yes, custom .NET assemblies can be used in Umbraco implementations.
Umbraco Cloud sites run on IIS 8.5, so most configurations that work on IIS will work on Umbraco Cloud. However, components that require server installation are not supported. If the component can be deployed in the bin folder, it should generally work.
Umbraco Cloud operates similarly to Azure Web Apps. If a solution runs on Azure Web Apps, it should work on Umbraco Cloud.
Yes, Umbraco Cloud projects function like standard Umbraco websites, with multiple environments and deployment options for code and content.
The best way to add custom code (templates, .cs
files, packages, DLLs, etc.) is to run the site locally using Git.
Yes, custom tables can be created in the database. Connection strings for different environments are available on the Connection Details page in the Settings menu.
Custom tables and data do not automatically replicate across Cloud environments. Consider using Umbraco Migrations and the PetaPoco data layer to automate deployment of custom data.
Yes, WebSockets are enabled on all sites.
When content, media, or schema is deleted in one environment, the deletion is not automatically applied when deploying to another environment.
This is intentional behavior.
Only files are deleted—database entries remain to prevent accidental data loss in Live/Production environments.
Learn more in the Deploying Deletions article.
Umbraco Cloud runs on Azure App Service Plans, a standard platform for hosting web applications. Most packages that work in local development or on other hosting platforms will also work on Umbraco Cloud.
The main exception is packages that store custom data in the Umbraco database. Most packages either extend functionality without storing data or use existing Umbraco services for storage.
If a package does save data in custom database tables, it will still function on Umbraco Cloud. However, unless the package developer has added support for data transfers, saved information will not move between environments.
This may not be an issue for packages designed to work within a single environment. For example, Umbraco Workflow, which typically runs on staging or production. However, if you need to move data between environments (for example, from staging to production or for local debugging), check whether the package supports this.
If data transfer between environments is not working, contact the package developer to ask about support.
Most packages work on Umbraco Cloud without modification. However, if a package saves data in custom database tables, an extra step is needed for seamless data transfer between environments.
Umbraco Cloud uses Umbraco Deploy to transfer Umbraco schema (for example, document types) and content (for example, media, pages) between environments. To support custom data transfer, package developers must create a Deploy Connector, which tells Umbraco Deploy how to handle the package’s data.
ID Mismatches – If a package references an integer ID (for example, a content node with ID 1023
), the same content in another environment may have a different ID (for example, 1039
). The Deploy Connector must map IDs correctly.
Missing Dependencies – If a package references a content item (1023
) that does not exist in the target environment, deployment errors may occur.
Umbraco Commerce Deploy - An open-source example of Connectors.
Umbraco Deploy Contrib – Pre-installed on all Cloud sites and is updated regularly.
Extending Umbraco Deploy Documentation - Step-by-step guide on building a Deploy Connector.
If you need help, reach out to Support for guidance.
Yes, you can select from:
West Europe
East US
South UK
East Australia
Central Canada
Yes, projects created in the EU region can be moved to another region. For more details, see the migrate between regions article.
You can choose a region from the Region drop-down list when creating a new project.
master
project be in one region and a child project in another?No. Baseline projects must remain within the same region.
Yes. The update process works the same across all regions.
Not currently.
Everything except Baseline functionality is available.
Yes. Once we have specific plans, we will announce them publicly.
You can check the region in the project's Summary page on the cloud Portal.
The hostnames contain the region your project is hosted on. Currently, the following regions are available:
West Europe (euwest01). For example, https://west-europe-project.euwest01.umbraco.io/
East US (useast01). For example, https://east-us-project.useast01.umbraco.io/
South UK (uksouth01). For example, https://south-uk-project.uksouth01.umbraco.io/
East Australia (aueast01). For example, https://east-australia-project.aueast01.umbraco.io/
Central Canada (cacent01). For example, https://central-canada-project.cacent01.umbraco.io/
By default, a 35-day point-in-time database restore is available for your projects. It is also possible to restore a .bacpac
file to your cloud environments.
You can read more about database backups and restores and how to perform these on Umbraco Cloud in the Databases Backups section.
Umbraco Cloud keeps 30 days of filesystem snapshots for disaster recovery purposes.
Umbraco Cloud keeps 35 days of Blob Storage container snapshots for disaster recovery purposes.