Complete other steps first!
This is _Step 3: Upgrade the Service Environment_ from the topic [Upgrade to CMS 12](🔗).
You can use the **Project Migration** tab to move to a new project that supports .NET 6 for CMS 12 and Customized Commerce 14. The migration can be done in a few steps, as explained below.
Click **Start Migration** in the **Project Migration** tab to provision new project resources.
This creates a new project that supports CMS 12 / Customized Commerce 14 and is immediately accessible.
Note
It might take some time before the new project is visible in the Azure portal. Log out and log back in, or wait for a few minutes and it should show up automatically.
The system creates a new find index for the target project. Find data stored directly in Find's DB does not migrate: _Connectors, Synonyms, Boosting (UnifiedWeights), Related Queries (DidYouMean), Autocomplete_
VPN & Certificates
If you are prompted with a warning regarding certificates and/or VPNs when you start a migration, please contact support to proceed.
If you no longer need the target project after it is provisioned, you can delete the target project using **Abort Migration**.
Start by setting up access for your deployment tooling by [generating API keys](🔗) so you can deploy [the code packages](🔗) and start testing it in the new environment.
Deploy the updated code to the environment and validate that it works. Make sure you \_add and configure \_the EPiServer.CloudPlatform.Cms package as described [here](🔗). Begin by setting up the Integration environment, then continue with Preproduction and Production to ensure it works there.
You can copy content from the source to the target project to ensure compatibility with the same data.
You can choose any environment as the source environment.
You can also copy content during the `
Go live
` step to ensure that you have the latest data when finalizing the migration to the new projectYou can access more tools/logs for [troubleshooting ](🔗) in [the Azure portal](🔗)
Prepare _Go live_ by copying the hostnames to the target project. In this step, the hostnames are prepared but not active.
Some older hostnames may require new DNS verification records to work in the new project, which can be done during the following step.
Click **Check DNS records** to verify the DNS record status after the records are added.

Next, you can either choose to migrate the whole project or migrate hostnames individually.
## Migrate the whole project
The final step is to `Go live
`. You can sync content from source to target project first. Pause the environments in the source project during this final phase. Each environment should be put into maintenance mode to prevent changes to data during the swap. _When you enter maintenance mode, you cannot abort the migration until it is canceled._

**Maintenance mode** – You can activate maintenance mode with `
Maintenance Page
` or by putting the source environment into `Read Only
` mode. `Read Only
` mode must be supported in the source project to use it. See [database-mode documentation](🔗) for information on implementation.Click **Abort Maintenance Mode** if you encounter a problem after entering the mode. After you activate maintenance mode, the environment is ready for `
Go live
`.Maintenance mode testing
You must test maintenance mode and `
Go live
` on Integration and Preproduction before proceeding to Production because it may cause some downtime.After entering maintenance mode, click **Go Live** to make the environment live in the new project. You can click **Cancel Go live** if needed.

## Migrate hostnames individually
If data consistency between the two projects isn't needed, then it is also possible to migrate one hostname at a time. With this approach, both projects are live but some hostnames will target the previous project while some hostnames are live in the new project.
Click a hostname to preview it.
If hostname renders as expected, click `
Ready for Go live
`

When all the hostnames that should go live are `
Ready for go live
`, click `Go live
`

All hostnames marked as `
Ready for go live
` will now be live in the new project.After the Integration, Preproduction, and Production environments are live, click **Complete Migration**. The resources in the source project are no longer needed and will be scheduled for decommissioning.
Complete migration automatically
If all environments went live, Project Migration is completed automatically after 14 days since the last go-live was completed and all hostname are moved to the target project