Partager via


Web Deploy Automatic Backups

par Elliott Hamai

Introduction

Dans V3, Web Deploy introduit une fonctionnalité de sauvegarde côté serveur automatique pour IIS 7 et versions ultérieures. Lorsque des sauvegardes automatiques sont configurées sur le serveur et qu’un utilisateur publie sur son site à l’aide de Web Deploy, il effectue d’abord une sauvegarde du site actif et le stocke sur le serveur avant de valider les modifications apportées au site. Si la publication a échoué pour une raison quelconque ou si l’utilisateur souhaite restaurer une version antérieure de son site web, il pourra effectuer une restauration à partir de ces sauvegardes sans impliquer d’administrateur de serveur. Cette fonctionnalité doit être activée et configurée par un administrateur de serveur avant qu’un utilisateur final puisse en tirer parti.

Lorsque des sauvegardes sont créées

Lorsque Web Deploy détecte qu’un utilisateur publie avec un fournisseur contentPath, iisApp ou appHostConfig, il démarre automatiquement une sauvegarde (si elle est activée sur le serveur). Dans de nombreux cas, ces fournisseurs sont également inclus dans les publication à l’aide de Web Matrix et de Visual Studio. Voici un exemple de ligne de commande d’une synchronisation qui lance une sauvegarde sur « remoteComputerName » à l’aide de l’agent de déploiement web.

msdeploy.exe -verb:sync -source:iisapp=<siteName> -dest:auto,computername=<remoteComputerName>

Si le fournisseur source est un manifeste, Web Deploy inspecte tous les fournisseurs du manifeste pour déterminer si l’un des fournisseurs du manifeste est un fournisseur contentPath, iisApp ou appHostConfig. Si c’est le cas, il lance une sauvegarde pour tous les fournisseurs (consultez la section « Problèmes connus et limitations » pour connaître les exceptions à ce problème) dans le manifeste. Toutefois, s’il existe des chemins de fournisseur en conflit (comme celui qui pointe vers le site « foo », tandis que l’autre pointe vers la « barre » du site, Web Deploy ne prend pas de sauvegarde.

Contenu d’une sauvegarde

Par défaut, Web Deploy utilise les fournisseurs que vous avez spécifiés pour votre publication (à l’exception de setAcl qui n’est jamais inclus) afin de créer la sauvegarde. Par conséquent, si je publie avec un fournisseur iisApp et dbFullSql, Web Deploy effectue une sauvegarde de vos fournisseurs iisApp et dbFullSql sur le serveur. Cela inclut tout le contenu et la configuration appartenant à l’application web, ainsi que le script de base de données qui peut être utilisé pour republier l’application web. Vous pouvez modifier ce comportement par défaut en modifiant le paramètre de sauvegarde ExcludedProviders, ou en spécifiant ignorer les règles avant d’effectuer une publication.

Ces sauvegardes sont des packages Web Deploy valides qui peuvent être copiés et utilisés avec Web Deploy sur n’importe quel serveur IIS compatible.

Configuration de la fonctionnalité de sauvegarde automatique sur le serveur (pour les administrateurs de serveur)

Pour fournir la fonctionnalité de sauvegarde automatique aux utilisateurs, un administrateur de serveur doit provisionner de l’espace sur le serveur où ces sauvegardes peuvent être stockées. Cet espace peut être physiquement situé sur le serveur ou sur un partage réseau accessible à partir du serveur.

La quantité d’espace nécessaire dépend de la taille des applications individuelles et du nombre de sauvegardes que vous envisagez de stocker sur le serveur. Si vous souhaitez contrôler l’espace pris par les sauvegardes, vous devez utiliser créer un dossier distinct pour chaque site et utiliser le Gestionnaire de ressources du serveur de fichiers Windows (FSRM) pour limiter les quotas de dossiers individuels. En guise de bonne pratique de sécurité, vous devez également répertorier ces dossiers afin que chaque utilisateur dispose d’un accès en lecture/écriture uniquement à son dossier.

Les sauvegardes peuvent être activées globalement sur le serveur afin que tous les sites puissent en tirer parti ou qu’ils puissent être configurés par site.

Configuration automatique des paramètres de sauvegarde sur le serveur pour une utilisation globale à l’aide de PowerShell

Le script PowerShell pour configurer la fonctionnalité de sauvegarde au niveau du serveur se trouve sous %programfiles%\IIS\Microsoft Web Deploy V3\scripts\BackupScripts.ps1. Pour le charger, accédez simplement à ce répertoire dans PowerShell et exécutez :

. .\BackupScripts.ps1

Cela charge les fonctions suivantes dans la session que vous pouvez utiliser pour configurer des sauvegardes.

  1. TurnOn-Backups: active/désactive les sauvegardes pour l’ensemble du serveur.
  2. Configurer les sauvegardes : définit les paramètres de sauvegarde par défaut du serveur ou du site.
  3. Configure-BackupSettingsProvider: contrôle les paramètres du serveur pour le contrôle qu’un administrateur de site aura sur son comportement de sauvegarde.
  4. Get-BackupSettings: Requêtes des paramètres de sauvegarde spécifiques au serveur ou au site
  5. Reset-BackupSettings: réinitialise les paramètres de sauvegarde propres au serveur ou au site

Fonction TurnOn-Backups :

Permet à un administrateur de serveur d’activer ou de désactiver les sauvegardes dans une étendue SERVEUR, sans remplacer les paramètres spécifiques au site. Par défaut, les sauvegardes sont désactivées. Même après avoir activé les sauvegardes, les sauvegardes doivent toujours être « activées » au niveau du serveur ou du site afin que les sauvegardes soient effectuées.

# Turns on all backup functionality
TurnOn-Backups -On $true

# Turns off all backup functionality
TurnOn-Backups -On $false

Configure-Backups :

Permet à un administrateur de serveur de configurer le comportement de sauvegarde par défaut sur le SERVEUR ou SITE étendue spécifique. Si un administrateur spécifie un paramètre au niveau de l’étendue du serveur et qu’un site a déjà spécifié un paramètre spécifique au site, Web Deploy préfère les paramètres spécifiques au site par rapport aux paramètres du serveur. Si un administrateur de serveur souhaite que les paramètres du serveur prennent la préférence, il doit réinitialiser les paramètres de sauvegarde du site, ce qui permettrait au site d’hériter automatiquement de ses paramètres du serveur.

# Changes default global backup behavior to enabled
Configure-Backups -Enabled $true

# Changes default backup behavior for site "foo" to enabled
Configure-Backups -SiteName "foo" -Enabled $true

# Changes the path of where backups are stored to a sibling directory named "siteName_snapshots".  
# For more information about path variables, see the "backupPath" attribute in the section 
# "Configuring  Backup Settings on the Server for Global usage manually in IIS Config"
Configure-Backups -BackupPath "{SitePathParent}\{siteName}_snapshots"

# Configures default backup limit to 5 backups
Configure-Backups -NumberOfBackups 5

# Configures sync behavior to fail if a sync fails for any reason
Configure-Backups -ContinueSyncOnBackupFailure $false

# Adds providers to skip when performing a backup
Configure-Backups -AddExcludedProviders @("dbmysql","dbfullsql")

Configure-BackupSettingsProvider :

Les administrateurs de site peuvent modifier leurs paramètres de sauvegarde spécifiques au site à l’aide de BackupSettingsProvider avec Web Deploy. Cette fonction permet à un administrateur de serveur de contrôler exactement quels paramètres un administrateur de site peut configurer.

# Allows a site administrator to enable backups and set the number of backups at the site level
Configure-BackupSettingsProvider -CanSetEnabled $true -CanSetNumBackups $true

# Allows a site administrator to control which providers they want to skip in a backup, as 
# well as whether they can continue a sync after a backup failure
Configure-BackupSettingsProvider -CanSetContinueSyncOnBackupFailure $true -CanAddExcludedProviders $true

Get-BackupSettings

Interroge le serveur ou un site en fonction des paramètres de sauvegarde spécifiques.

# Grabs the global default backup settings
Get-BackupSettings

# Grabs a sites-specific backup settings
Get-BackupSettings -SiteName "foo"

Reset-BackupSettings

Réinitialise les paramètres de sauvegarde du serveur ou des sites. Si vous réinitialisez des paramètres de sauvegarde de sites, il hérite automatiquement des paramètres de sauvegarde des serveurs.

# Resets the global default backup settings
Reset-BackupSettings

# Resets a sites backup settings
Reset-BackupSettings -SiteName "foo"

Configuration manuelle des paramètres de sauvegarde sur le serveur pour une utilisation globale dans la configuration IIS

Paramètres de sauvegarde globale

Les paramètres de sauvegarde globaux suivants peuvent être configurés directement dans le système de configuration IIS sous %windir%\system32\inetsrv\config\applicationhost.config.

  • activé : (Valeur par défaut = « false ») Contrôle si les sauvegardes sont activées ou non.

  • backupPath - (Par défaut = « {sitePathParent}{siteName}_snapshots ») Où se trouvent les sauvegardes sur le serveur. Il met également en place les variables de remplacement de chemin d’accès pour « {sitePathParent} » et « {siteName} » qui sont déterminées au moment de l’exécution.

    • sitePathParent : chemin d’accès au fichier physique du parent du contenu de vos sites. Par exemple, si l’application de votre site se trouve sous c:\inetpub\wwwroot\siteName, sitePathParent est c:\inetpub\wwwroot\.
    • siteName : nom de votre site.

Exemple : le schéma par défaut définit ce chemin d’accès à « {sitePathParent}{siteName}_snapshots » afin que chaque sauvegarde soit placée sous un dossier frère de votre contenu de site au lieu de celle-ci.

AVERTISSEMENT : assurez-vous que votre backupPath ne vit pas sous votre chemin de contenu de sites ou que vos sauvegardes seront supprimées sur chaque publication.

  • numberOfBackups - (Valeur par défaut = « 4 ») Nombre de sauvegardes par site qui seront stockées sur le serveur. Lorsque le nombre maximal de sauvegardes a été créé, la sauvegarde la plus ancienne est supprimée.
  • continueSyncOnBackupFailure - (Valeur par défaut = « true ») permet aux utilisateurs d’échouer une synchronisation ou de poursuivre une synchronisation si une sauvegarde ne parvient pas à se terminer pour une raison quelconque.
  • excludeProviders- (Valeur par défaut = Ensemble vide) Liste des fournisseurs Web Deploy à exclure toujours d’une sauvegarde. Par exemple, si les sauvegardes de base de données sont gérées séparément dans votre environnement, vous utilisez ce paramètre pour exclure les sauvegardes de base de données dans le cadre des sauvegardes web Deploy en excluant dbFullSQLProvider Pour plus d’informations, reportez-vous à la section « Contrôle de ce qu’une sauvegarde contient »

Remarque

Bien que Web Deploy vous permette techniquement de sauvegarder presque chaque fournisseur, certains fournisseurs ne peuvent pas être restaurés de manière significative en raison de la nature de ces fournisseurs. En fait, tous les fournisseurs qui sont des fournisseurs « définis uniquement » et non des fournisseurs de « synchronisation » appartiennent à cette catégorie. Voici une liste de fournisseurs intégrés qui sont recommandés pour être ajoutés au paramètre ExcludedProviders :

  • appHostAuthOverride
  • appPoolEnable32Bit
  • appPoolNetFx
  • appPoolPipeline
  • createApp
  • setAcl
  • DBSqlPackage (non installé par défaut avec Web Deploy, mais est répertorié ici, car il n’est actuellement pas pris en charge avec la fonctionnalité de sauvegarde)
  • backupSettingsProvider - (Par défaut : tous les paramètres d’attribut sont « false ») donne un contrôle administrateur système sur les paramètres de sauvegarde pouvant être définis par un administrateur de site web. Vous pouvez autoriser les administrateurs de site web à contrôler l’un des paramètres ci-dessus « activés », « numberOfBackups », « continueOnBackupFailure » et « excludedProviders » pour leur site. Pour ce faire, définissez les propriétés « canSetEnabled », « canSetNumberOfBackups », etc. sur true, comme spécifié dans l’exemple suivant.

Pour plus d’informations sur ces paramètres, vous trouverez des valeurs autorisées dans BackupManagerSchema %windir%\system32\inetsrv\config\schema\BackupManagerSchema.xml dans le système de configuration IIS.

Vous trouverez ci-dessous un exemple de configuration qui peut être ajouté sous <system.webServer> (consultez le schéma complet pour plus d’informations). Vous n’avez pas besoin de spécifier tous les paramètres ci-dessous, car ils ont tous les paramètres par défaut spécifiés dans le schéma, mais ils sont spécifiés ici pour s’afficher sous la forme d’un exemple.

<wdeploy>
    <backup enabled="true"
            numberOfBackups="2"
            backupPath="{sitePathParent}\{siteName}_siteBackups"
            continueSyncOnBackupFailure="false">
     <excludedProviders>
        <provider name="dbFullSql" />
     </excludedProviders>
     <backupSettingsProvider
            canSetEnabled="true"
            canSetNumberOfBackups="true"
            canSetContinueSyncOnBackupFailure="true"
            canSetExcludedProviders="true" />
    </backup>
</wdeploy>

Supposons que nous avons un site nommé « foo » qui vit sous c:\foo\wwwroot sur le serveur. La configuration ci-dessus indique à Web Deploy sur :

  1. Activer la fonction de sauvegardeMaintenir un maximum de 2 sauvegardes.
  2. Stockez chaque sauvegarde dans un dossier sous c:\foo\foo\_siteBackups.
  3. Échec d’une publication si une opération de sauvegarde échoue pour une raison quelconque.
  4. Excluez la sauvegarde de bases de données SQL avec le fournisseur dbFullSql.
  5. Autoriser les administrateurs de site web à utiliser backupSettingsProvider pour configurer les paramètres « activés », « numberOfBackups », « continueOnBackupFailure » et « excludedProviders » pour leur site.

Configuration des paramètres de sauvegarde sur le serveur pour des sites spécifiques

La fonctionnalité de sauvegarde automatique vous permet également de définir des paramètres spécifiques au site en spécifiant chaque paramètre de sauvegarde à l’aide d’une balise <location> dans le fichier applicationHost.config. Si un paramètre n’est pas spécifié dans la balise d’emplacement, il est hérité des paramètres du serveur. Voici un exemple de ce qu’un paramètre de sauvegarde de sites peut ressembler à ceci :

<location path="siteName">
    <system.webServer>
        <wdeploy>
            <backup enabled="true" numberOfBackups="4">
                <excludedProviders>
                    <clear />
                    <provider name="dbfullsql" />
                </excludedProviders>
            </backup>
        </wdeploy>
    </system.webServer>
</location>

Si vous souhaitez autoriser les administrateurs de site à définir leurs propres paramètres spécifiques au site, vous devez configurer les attributs « canSet* » de l’élément BackupSettingsProvider dans le serveur paramètres de sauvegarde (et non les paramètres de sauvegarde du site).

Considérations relatives à la sécurité pour les sauvegardes automatiques

Lors du stockage de ces sauvegardes sur le serveur, il doit être assuré que chaque utilisateur n’a accès qu’à son propre contenu. Web Deploy par défaut (pendant une installation complète) configure la règle de délégation BackupManager pour s’assurer qu’elle emprunte l’identité de l’utilisateur qui publie lors de la création de sauvegardes. Cela implique que le compte d’utilisateur de publication doit également disposer de privilèges de fichier « écriture » dans le répertoire de sauvegarde.

Si vous ne souhaitez pas utiliser l’identité des utilisateurs finaux pour créer leurs sauvegardes, vous pouvez simplement supprimer cette règle de délégation et Web Deploy utilisera l’identité du service WMSVC pour écrire dans le répertoire de sauvegarde.

Remarque

  • Les règles de délégation s’appliquent uniquement aux utilisateurs non administratifs qui se connectent via WMSvc. Pour les administrateurs (connexion via l’agent Web Deploy), leur propre identité est utilisée.
  • Si vous souhaitez configurer manuellement des règles de délégation, exécuter notre script AddDelegationRules.ps1.
  • La fonctionnalité De sauvegarde est fournie avec 2 nouvelles règles de délégation de fournisseur (BackupSettings et BackupManager), comme indiqué ci-dessous.

Screenshot of Management Service Delegation feature page with Backup Settings and Backup Manager.

Configuration des paramètres de sauvegarde au niveau du site sur le serveur (pour les administrateurs de site/serveur)

Les administrateurs de serveur peuvent choisir de déléguer une partie de l’administration de sauvegarde aux administrateurs de site. Si cela est autorisé, les administrateurs de site peuvent configurer le comportement de sauvegarde pour leurs propres sites.

Remarque

msdeploy.exe se trouve sous %programfiles%\IIS\Microsoft Web Deploy V3

Répertorier les paramètres de sauvegarde du site : effectuer une opération de « vidage » lors du passage du nom de votre site au fournisseur backupSettings. L’indicateur -xml répertorie également si le paramètre est accessible en écriture ou non.

msdeploy.exe -verb:dump -source:backupSettings=<siteName> -xml

Configurer les paramètres de sauvegarde : effectuer une opération de « synchronisation » tout en transmettant le nom de votre site, ainsi que les paramètres que vous souhaitez modifier.

msdeploy.exe -verb:sync -source:backupSettings -dest:backupSettings=<siteName>,enabled="True",numberOfBackups=3

Remarque

Votre administrateur de serveur doit autoriser la délégation de ces paramètres avant de pouvoir les modifier.

Contrôle du comportement d’échec : Vous pouvez contrôler le comportement de la publication pour continuer ou non en cas d’échec de sauvegarde en modifiant le paramètre de sauvegarde « continueSyncOnBackupFailure ». Si « continueSyncOnBackupFailure » a la valeur false et qu’une sauvegarde échoue, la publication échoue et aucun contenu ou base de données de site n’est modifié.

Ajout d’un fournisseur à la liste des fournisseurs à exclure d’une sauvegarde : Spécifier une liste délimitée par des points-virgules de fournisseurs. Vous pouvez utiliser l’option addExcludedProviders pour ajouter des fournisseurs à la liste globale.

msdeploy.exe -verb:sync -source:backupSettings -dest:backupSettings=<siteName>,addExcludedProviders="dbFullSql;dbMySql"

Réinitialiser les paramètres de sauvegarde de site sur les paramètres de serveur par défaut : effectuer une opération de « suppression ».

msdeploy.exe -verb:delete -dest:backupSettings=<siteName>

Publication sur un serveur avec sauvegarde (pour les développeurs web)

Créer automatiquement une sauvegarde

Lorsqu’un utilisateur publie sur un serveur prenant en charge la sauvegarde à l’aide de l’un des fournisseurs pris en charge (iisApp, appHostConfig, contentPath), une sauvegarde est automatiquement effectuée avant l’application de toutes les données, tant que la sauvegarde n’est pas ignorée. Aucune action spécifique n’est requise pour la partie de l’utilisateur final.

Créer manuellement une sauvegarde

Un utilisateur peut forcer manuellement la création d’une sauvegarde à l’aide du fournisseur BackupManager, tant que les sauvegardes sont configurées et activées pour que le site soit publié. Il existe deux méthodes de création d’une sauvegarde manuelle.

  1. Spécification d’un chemin d’accès de site de destination : cela prend une sauvegarde iisApp simple de votre site de destination.

    msdeploy.exe -verb:sync -source:backupManager -dest:backupManager=siteName
    
  2. Spécification d’un fichier manifeste source : cela vous permet de sauvegarder plusieurs fournisseurs (par exemple, iisApp, dbFullSql, etc.)

    msdeploy.exe -verb:sync -source:backupManager=manifest.xml -dest:backupManager=siteName
    

Un exemple de fichier manifeste simple pour la deuxième option peut ressembler à ceci :

<?xml version="1.0" encoding="utf-8"?>
<m>
  <iisApp path="siteName" />
  <dbFullSql path="connectionString" />
</m>

Ignorer la sauvegarde pendant la publication

Si un client souhaite empêcher la prise d’une sauvegarde, il peut désactiver les sauvegardes sur le serveur en tant que paramètre persistant à l’aide du fournisseur backupSettings ou désactiver l’exécution de la règle de sauvegarde sur le serveur pour chaque publication individuelle. Voici un exemple de désactivation de la règle de sauvegarde lors d’une publication :

msdeploy.exe -verb:sync -source:iisapp=<siteName> -dest:auto,computername=<remoteComputerName> -disablerule:BackupRule

Gestion des sauvegardes (pour les développeurs web/administrateurs de site)

Le fournisseur BackupManager offre aux clients la possibilité de répertorier, restaurer et supprimer des sauvegardes. Voici quelques exemples de la façon dont cela est effectué :

Liste des sauvegardes pour un site : Effectuer une opération de « vidage » pour afficher toutes les sauvegardes d’un site

msdeploy.exe -verb:dump -source:backupManager=<siteName>

Restauration d’une sauvegarde spécifique pour un site : on effectue une opération de « synchronisation » pour appliquer une sauvegarde

msdeploy.exe -verb:sync -source:backupManager -dest:backupManager=<siteName>/<backupFileName>

Restaurer la dernière sauvegarde d’un site :

msdeploy.exe -verb:sync -source:backupManager -dest:backupManager=<siteName>,useLatest=true

Restaurer la dernière sauvegarde d’un site qui contient également une base de données : on suppose que la dernière sauvegarde se produit également pour contenir une sauvegarde de base de données. Le paramètre du fournisseur connectionString est utilisé pour vous connecter à la base de données sur laquelle vous effectuez la restauration et est nécessaire pour restaurer une sauvegarde avec une base de données, sauf si vous appliquez une règle pour ignorer la restauration de la base de données.

msdeploy.exe -verb:sync -source:backupManager -dest:backupManager=<siteName>,useLatest=true,connectionString=<connectionString>

Restaurer la dernière sauvegarde d’un site sans remplacer App_Data à l’aide de l’option ignorer :

msdeploy.exe -verb:sync -source:backupmanager -dest:backupmanager=<siteName>,uselatst=true -skip:xpath=dirPath[@path='App_Data']

Supprimer une sauvegarde pour un site :

msdeploy.exe -verb:delete -dest:backupManager=<siteName>/<backupFileName>

Problèmes connus et limitations :

Il existe plusieurs scénarios dans lesquels Web Deploy ne prend pas automatiquement de sauvegarde pour vous même s’il est activé sur le serveur :

  1. Le client publie à l’aide d’une version antérieure de Web Deploy à V3 RC.
  2. Le serveur n'a pas au moins installé Web Deploy V3 RC.
  3. Plus de 1 base de données est spécifiée dans un manifeste - Web Deploy prend uniquement en charge la sauvegarde d’une base de données unique par publication.
  4. Le chemin du fournisseur que vous utilisez n’est pas un chemin d’accès de site relatif : le fournisseur contentPath accepte les chemins d’accès aux fichiers physiques ainsi que les chemins de site relatifs. Si un chemin d’accès physique est spécifié, Web Deploy ne compte pas ce fournisseur pour lancer la sauvegarde. Le fournisseur apphostConfig accepte un chemin vide. Si un chemin d’accès vide est spécifié, Web Deploy ne prend pas de sauvegarde du tout.
  5. Chemins relatifs en conflit dans un manifeste : s’il existe plusieurs fournisseurs dans un manifeste qui ont des chemins de site relatifs en conflit, le Web Deploy ne prend pas de sauvegarde. Par exemple, si vous publiez avec plusieurs fournisseurs iisApp sur différents sites , un pointant vers le site « foo », tandis que l’autre pointant vers la « barre » du site - Web Deploy ne prend pas de sauvegarde.

Autres problèmes connus :

  1. Installation de la règle de délégation BackupSettings Web Deploy V2 break BackupSettings : si vous installez V2 après V3, la règle de délégation BackupSettings ne fonctionnera plus si elle a été configurée pour s’exécuter avec l’utilisateur WDeployConfigWriter par défaut. Pour contourner ce problème, exécutez simplement le script V3 AddDelegationRule.ps1 (situé sous %programfiles%\IIS\Microsoft Web Deploy\Scripts) à partir de PowerShell.