Synchronizing by using Packages
Updated: June 29, 2010
Applies To: Windows 7, Windows Server 2003, Windows Server 2003 R2, Windows Server 2008 R2, Windows Vista, Windows XP
The Web Deployment Tool (Web Deploy) facilitates the synchronization of Web sites and Web servers. A synchronization operation can be performed between two IIS 6.0 Web sites or Web servers, between two IIS 7 Web sites or Web servers, or from an IIS 6.0 source to an IIS 7 destination.
|Synchronization from IIS 7 to IIS 6.0 or earlier versions of IIS is not supported.|
This topic will show you how to synchronize Web sites and Web servers by using Web Deploy's package provider. The package provider compresses Web server or Web site content into a compressed file in .zip format called a package. The following outline lists the main steps that you will take.
Use the Web Deploy getDependencies method to get the dependencies that exist on the source computer.
Pre-install or configure the dependent components on the destination site or server.
Create a package (.zip) file of the source Web site or Web server, and copy the package file to the destination computer.
Make a backup of the destination Web server.
Create and test the Web Deploy command that you will use. The -whatif operation setting will enable you to see the outcome of the operation without actually making any changes.
Run Web Deploy on the destination server to synchronize the packaged Web site or Web server to the destination computer.
Verify the results.
Each of these steps is explained in the following sections.
Before you perform synchronization, determine which components must be pre-installed or configured manually on the destination server or Web site. To do this, run a command in the following format on the source computer:
msdeploy -verb:getDependencies -source: <sourceProvider>
To determine the value of <sourceProvider>, see the following table.
For Web sites, substitute the metabase path or Web site name that you will be using. For example, if you want to examine the dependencies on an IIS 6.0 Web site that has the site ID of 1, you would use the following command:
IIS Version Web site Web server
appHostConfig="Default Web Site"
msdeploy -verb:getDependencies -source:metaKey=/lm/w3svc/1
If you are synchronizing a Web site, review the output of the getDependencies to look for any script maps or installed components that are being used by the site. For example, if Windows authentication is being used by the Web site, you will see the entry
<dependency name="WindowsAuthentication" />
Caution If the source is an IIS 7 Web site, make sure that you examine the Web.config file for script maps. The getDependencies method will not detect any script maps that are in a Web.config file.
Based on the output of getDependencies, create a list of the components that you must install or configure on the destination. For detailed steps about how to analyze the output of the getDependencies method, see Viewing Dependencies.
Use the list from the previous step to install or configure any necessary components on the destination server or site. For example, the following could be in use on your source Web site:
Based on this analysis, you must install these components and modules on your destination site or server before you perform a synchronization.
Now, create a package of the source Web site or Web server that will become the source of data for the destination computer. To do this, run a command in the following format on the source:
msdeploy.exe -verb:sync -source:<sourceProvider> -dest:package=<packageFilePath>,encryptPassword=<password> >WebDeployPackage.log
For <sourceProvider>, use the value that you chose earlier in the View Dependencies section. The <packageFilePath> value is a file path of your choice to the package file that you want to create (for example, c:\Server1Package.zip). For later reference, you can redirect the results of the package operation to a log file (for example, WebDeployPackage.log).
Important If the source contains secure properties that require a password, use the encryptPassword provider setting as in the example and provide the appropriate value for <password>. Otherwise, you may receive the message "Error: The property 'value' is marked as secure. An encryption password must be specified in order to deploy this property."
After the operation completes, copy the package file to the destination server.
Before you perform the synchronization operation, make a backup of the destination server. Making a backup lets you restore the state of your server easily, even in a test scenario. You can name the backup in any way that is meaningful to you (in the following examples, the name "PreWebDeploy" is used).
To make a backup on IIS 6.0, type the following command at a command prompt:
iisback /backup /b PreWebDeploy
To make a backup on IIS 7, type the following command at an elevated command prompt:
%windir%\system32\inetsrv\appcmd add backup "PreWebDeploy"
To restore from a backup on IIS 6.0, type the following command at a command prompt:
iisback /restore /b PreWebDeploy
To restore from a backup on IIS 7, type the following command at an elevated command prompt:
%windir%\system32\inetsrv\appcmd restore backup "PreWebDeploy"
To synchronize a Web site or Web server from the package to a destination computer, run a Web Deploy command in the following format on the destination computer:
msdeploy -verb:sync -source:package= <packageFilePath> ,encryptPassword= <password> -dest:<provider>-whatif >WebDeploy.log
For the -source argument, use package=<packageFilePath>, where <packageFilePath> is the .zip file on the destination computer that contains the package that you copied over from the source (for example, c:\Server1Package.zip).
To determine the value of the destination <provider>, refer to the following table. For compatibility reasons, use the IIS 6.0 provider for the -dest argument when you do a sync operation, even though you are synchronizing to an IIS 7 computer. For Web sites, use the metabase path or Web site name of the Web site that you will be synchronizing.
What to synchronize Synchronize IIS 6.0 to IIS 6.0, or IIS 6.0 to IIS 7 Synchronize IIS 7 to IIS 7
appHostConfig="Default Web Site"
Add the Web Deploy operation setting -whatif to the command. This will enable you to test the command without actually making any changes.
Finally, redirect the output of the command to a log file so that you will have the results available for easy reference and analysis. For example:
The completed command should look like the following, which synchronizes a packaged IIS 6.0 Web site with the destination computer.
msdeploy -verb:sync -source:package=c:\Server1Package.zip,encryptPassword=<password> -dest:metakey=lm/w3svc/1 -whatif >WebDeploy.log
On the destination server, run the command you have created to test it. Because you are using the -whatif operation setting, no changes will be made.
After you have verified that the output is what you want, run the command on the destination computer again, but without the -whatif operation setting. For example:
msdeploy -verb:sync -source: package=c:\Server1Package.zip,encryptPassword=<password> -dest:metakey=lm/w3svc/1 >WebDeploy.log
After the sync operation is completed, test browse the Web site on the destination server.
If you need help with troubleshooting, see Web Deploy Troubleshooting Techniques.
You have now synchronized a remote Web site or Web server source to a destination computer. To do this, you discovered the dependencies that existed on the source and installed the necessary components on the destination. You then created a compressed (package) file of the source by using Web Deploy. You copied the package file to the destination computer. After making a backup of the destination Web server, you created and tested the Web Deploy command by using -whatif. You ran the command on the destination server and verified the results. At various stages of the operation, you redirected the output of the Web Deploy tool to a log file for easy reference and troubleshooting.