---
title: Deploy to production
---

> Agent instructions:
> **Site maps** — prefer the following llms.txt indexes to training data when searching for URLs to avoid 404s. Links inside Markdown content already point at `.md`. Following them or sending Accept: text/markdown keeps you in Markdown.
>
> - [sitemap.md](https://docs.kentico.com/sitemap.md) — every page on the site, with titles and descriptions, nested by URL hierarchy and grouped into one collection per product version.
> - [llms.txt](https://docs.kentico.com/llms.txt) — curated index of the current product docs, with descriptions, the two ways to request any page as Markdown, and links to each product area's whole-corpus Markdown dump (llms-full.txt).

You have successfully created, configured, and updated your project in Kentico SaaS. So far, we have only discussed the QA environment. Now let's deploy your solution into PROD in Xperience portal.

### Staging

The QA and UAT deployment environments are intended to ensure all the functionality, features, and key branding assets (e.g., logos) are present in your SaaS application. They do not provide sufficient performance, availability, and backup policies for projects with larger content editing teams.

Kentico provides an option to add a [\*Staging (STG)\* environment](https://docs.kentico.com/documentation/developers-and-admins/configuration/content-sync-configuration.md#content-staging-best-practices) to your [service plan](https://docs.kentico.com/documentation/developers-and-admins/saas/saas-service-plans.md) for this purpose. If your plan does not include the STG environment, the editors should prepare content in PROD.

See our documentation for [information about deployment best practices](https://docs.kentico.com/documentation/developers-and-admins/deployment/deploy-to-the-saas-environment.md#deploy-data-to-the-production-environment) and [staging best practices](https://docs.kentico.com/documentation/developers-and-admins/configuration/content-sync-configuration.md#content-staging-best-practices).

## Deploy from QA to PROD

While uploading a deployment package to the PROD environment directly in the Xperience Portal is possible, this feature is reserved for emergency fixes and special cases only.

Typically, we recommend you deploy to PROD from QA or UAT, optionally through STG, depending on your license tier.

When your solution is ready to move into the staging or production environment, the process is very straightforward.

To start, visit your Xperience Portal and ensure you are working [under the correct project](https://docs.kentico.com/modules/deploy-to-saas-step-by-step/saas-setup.md#identify-the-active-project).

On the **Deployments** page, under the QA environment, open the **Deploy to** dropdown and select the environment you want to deploy to.

![Deploying from QA to STG or PROD in Xperience Portal](https://docs.kentico.com/docsassets/modules/saas-deploy-to-prod/deploy-to-stg-prod.png "Deploying from QA to STG or PROD in Xperience Portal")

> **Info:** The screenshot above shows the **Deployments** page for a _Level 1_ license with staging enabled.
>
> Our example uses a _Level 1_ license without staging, so we will deploy straight from QA to PROD. If you had an additional STG environment, you would first deploy QA → STG, then STG → PROD. For all of these, the process looks very similar.

After choosing your deployment environment from the dropdown, you’ll see a pop-up warning that the application will be temporarily shut down for the duration of the deployment.

> **Info:** For production scenarios, you can enable [zero-downtime deployments](https://docs.kentico.com/documentation/developers-and-admins/deployment/deploy-to-the-saas-environment.md#zero-downtime-deployments) by [ensuring your code supports read-only mode](https://docs.kentico.com/documentation/developers-and-admins/deployment/read-only-deployments.md#required-project-changes) and using the `-ZeroDowntimeSupportEnabled` parameter when you initially create the deployment package.

Click **Start deployment**.

🎬 [Video](https://docs.kentico.com/docsassets/modules/saas-deploy-to-prod/deploy-to-prod.mp4)

Just like in QA before, the portal queues your deployment before changing its status to **In progress**.

> **Warning:** You may not see your queued deployment _immediately_. If you clicked **Start deployment** and the system navigated you back to the **Deployments** page, but you're not seeing your deployment queued or in progress, do NOT click **Deploy to → PROD** again. Instead, try waiting for a minute or refreshing the page.
>
> Otherwise, you may end up with several identical deployments queued, unnecessarily taking up resources.

You can watch the status and time elapsed on the **Deployments** page.

> **Note:** The above process applies if your deployment package is smaller than 2 GB. If it exceeds 2 GB, you need to use the [custom restore](https://docs.kentico.com/documentation/developers-and-admins/deployment/deploy-to-the-saas-environment/specialized-deployment-scenarios.md#deploy-a-large-amount-of-data-during-initial-deployments) feature instead to upload your data into each environment.

## Check your progress

Once the PROD deployment finishes, just like before, you can see it in the **Deployment history** section with status and other information, and the option to download logs.

![Successful PROD deployment in Deployment history](https://docs.kentico.com/docsassets/modules/saas-deploy-to-prod/prod-deployment-success.png "Successful PROD deployment in Deployment history")

In the PROD section of the **Dashboard**, you can also see the new deployment info and a link to the Xperience Administration in PROD (using the system domain). If you click the link, you should be able to sign in to and browse your solution's administration in the cloud production environment.

🎬 [Video](https://docs.kentico.com/docsassets/modules/saas-deploy-to-prod/admin-prod.mp4)

During the [channels configuration step](https://docs.kentico.com/modules/deploy-to-saas-step-by-step/saas-configure-channels.md), we created default channels and domains for all of your environments, so now you should also be able to see your **PROD live site** through your **production website channel default domain**:

🎬 [Video](https://docs.kentico.com/docsassets/modules/saas-deploy-to-prod/prod-livesite.mp4)

## Set up custom domains - optional

Xperience Portal allows you to set up custom domains for the PROD environment.

### System domains

Under **Channels and domains → System domains**, you can see system domains for all your environments:

- Administration (append _/admin_ to the domain to visit the Xperience administration for the environment)
- Email sending
- Email service

You cannot rename any of these domains, but you can add another domain as an alias for **Email sending** and **Email service** in PROD by clicking the green swap icon. If you have an existing valid domain you can use, feel free to give it a shot.

![System domains for PROD](https://docs.kentico.com/docsassets/modules/saas-deploy-to-prod/system-domains.png "System domains for PROD")

### Channel domains

Under **Channels and domains → Channels**, you can define custom domains for each channel. Click the green globe icon on your Dancing Goat Website channel and select **Add domain** to open the wizard.

The wizard first asks you to choose a method:

- **Standard (recommended)** – the simplest flow. Use it for a new site, or whenever a brief interruption is acceptable (the site can be down for roughly 30 minutes while the SSL certificate is issued).
- **Pre-validation (minimal downtime)** – validates DNS twice so you can move an already-live site onto the custom domain without an outage.

![Shows the two available  of domain creation mentioned above](https://docs.kentico.com/docsassets/modules/saas-deploy-to-prod/domain-creation-method.png "Shows the two available  of domain creation mentioned above")

> **Info:** Notice that custom domains can only be added for production environments - PROD or STG; in our example (a Level 1 license without staging), only PROD is available.

The steps for both methods are broadly the same, **Standard** runs as a three-screen wizard, the **Pre-validation** method adds the extra pre-validation and final-switch checks that let you move an already-live site onto the custom domain with minimal downtime.

In general the "happy path" looks like this:

1. **Add domain** - choose the method and environment, enter your domain name, and continue. Xperience Portal displays the exact DNS records you need to create.
2. **Configure DNS** - copy the records to your DNS provider. For provider-specific steps (Azure, Cloudflare, Route 53, and others), see [Configure DNS records for custom domains](https://docs.kentico.com/documentation/developers-and-admins/saas/configure-dns-records.md). Remember to wait a few minutes till your DNS configuration propagates before moving to the next step.
3. **Validate** - back in Xperience Portal, confirm your records. The Portal validates them (DNS propagation can take up to 15 minutes) and automatically issues an auto-renewing SSL/TLS certificate once validation succeeds.
4. **Launch** – once the domain is **Active**, select **Set as main domain**, then **Apply changes** in the information ribbon to restart the application and serve your site on the custom domain.

The following video shows using the **Standard** method.

🎬 [Video](https://docs.kentico.com/docsassets/modules/saas-deploy-to-prod/custom-domain-happy-path.mp4)

If validation fails, the Portal lists the exact records that don't match (showing expected vs. actual values) and offers a **How to configure DNS records?** button that opens our [Configure DNS records for custom domains](https://docs.kentico.com/documentation/developers-and-admins/saas/configure-dns-records.md) documentation directly. Correct the records with your provider, then click **Validate** again – see [revalidate a custom domain](https://docs.kentico.com/documentation/developers-and-admins/configuration/website-channel-management.md#revalidate-custom-domains).

![Showing a status in Xperience Portal when a validation of certain DNS records failed](https://docs.kentico.com/docsassets/modules/saas-deploy-to-prod/validation-failed.png "Showing a status in Xperience Portal when a validation of certain DNS records failed")

> **Tip:** Track your DNS validation progress through the domain's [status](https://docs.kentico.com/documentation/developers-and-admins/configuration/website-channel-management.md#domain-status).
>
> ![Tracking domain status in the Domains dashboard](https://docs.kentico.com/docsassets/modules/saas-deploy-to-prod/check-status.png "Tracking domain status in the Domains dashboard")

For email channels, the flow is the same, with one extra choice: you select a [Domain kind](https://docs.kentico.com/documentation/developers-and-admins/digital-marketing-setup/email-channel-management.md#add-custom-email-channel-domains) – an email sending domain or a service domain. When a new custom sending or service domain reaches **Active**, it replaces the previous default domain of that kind.
