Copias de seguridad automáticas de Web Deploy

de Elliott Hamai

Introducción

En la versión 3, Web Deploy presenta una característica de copia de seguridad automática del lado servidor para IIS 7 y versiones posteriores. Cuando las copias de seguridad automáticas están configuradas en el servidor y un usuario publica en su sitio mediante Web Deploy, primero realizará una copia de seguridad del sitio activo y la almacenará en el servidor antes de confirmar los cambios en el sitio. Si se produjo un error en la publicación por algún motivo o el usuario quiere restaurar una versión anterior de su sitio web, podrá restaurar desde estas copias de seguridad sin implicar a un administrador del servidor. Un administrador del servidor debe habilitar y configurar esta característica antes de que un usuario final pueda aprovecharla.

Cuando se crean copias de seguridad

Cuando Web Deploy detecta que un usuario está publicando con un proveedor contentPath, iisApp o appHostConfig, iniciará automáticamente una copia de seguridad (si está habilitada en el servidor). En muchos casos, estos proveedores también se incluyen en las publicaciones con Web Matrix y Visual Studio. Este es un ejemplo de línea de comandos de una sincronización que iniciará una copia de seguridad en "remoteComputerName" mediante el Agente de implementación web.

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

Si el proveedor de origen es un manifiesto, Web Deploy inspeccionará todos los proveedores del manifiesto para determinar si alguno de los proveedores del manifiesto es un proveedor contentPath, iisApp o appHostConfig. Si es así, iniciará una copia de seguridad para todos los proveedores (consulte la sección sobre "Problemas conocidos y limitaciones" para las excepciones a esto) en el manifiesto. Sin embargo, si hay rutas de acceso del proveedor en conflicto (como si una apunta al sitio "foo" mientras que la otra apunta al sitio "bar"), Web Deploy no realizará una copia de seguridad.

Qué contiene una copia de seguridad

De forma predeterminada, Web Deploy usará los proveedores especificados para la publicación (excepto setAcl que nunca se incluye) para crear la copia de seguridad. Por lo tanto, si publíco con un proveedor iisApp y dbFullSql, Web Deploy realizará una copia de seguridad de los proveedores iisApp y dbFullSql en el servidor. Esto incluirá todo el contenido y la configuración que pertenecen a la aplicación web junto con el script de base de datos que se puede usar para volver a publicar la aplicación web. Puede cambiar este comportamiento predeterminado modificando la configuración de copia de seguridad ExcludedProviders o especificando reglas de omisión antes de realizar una publicación.

Estas copias de seguridad son paquetes de Web Deploy válidos que se pueden copiar y usar con Web Deploy en cualquier servidor IIS compatible.

Configuración de la característica de copia de seguridad automática en el servidor (para administradores de servidores)

Para proporcionar la característica de copia de seguridad automática a los usuarios, un administrador del servidor debe aprovisionar espacio en el servidor donde se pueden almacenar estas copias de seguridad. Este espacio se puede ubicar físicamente en el servidor o puede estar en un recurso compartido de red accesible desde el servidor.

La cantidad de espacio necesario dependerá del tamaño de las aplicaciones individuales y del número de copias de seguridad que planea almacenar en el servidor. Si desea controlar el espacio consumido por las copias de seguridad, debe crear una carpeta independiente para cada sitio y usar Windows File Server Resource Manager (FSRM) para limitar las cuotas de carpetas individuales. Como práctica recomendada de seguridad, también debe configurar una lista de control de acceso (ACL) para estas carpetas para que cada usuario tenga acceso de lectura y escritura solo a su propia carpeta.

Las copias de seguridad se pueden habilitar globalmente en el servidor para que todos los sitios puedan aprovecharlo o se pueden configurar de forma individual.

Configuración de las opciones de copia de seguridad en el servidor para el uso global automáticamente mediante PowerShell

El script de PowerShell para configurar la característica Copia de seguridad en el nivel de servidor se puede encontrar en %programfiles%\IIS\Microsoft Web Deploy V3\scripts\BackupScripts.ps1. Para cargarlo, simplemente vaya a ese directorio en PowerShell y ejecute lo siguiente:

. .\BackupScripts.ps1

Esto cargará las siguientes funciones en la sesión que puede usar para configurar las copias de seguridad.

  1. TurnOn-Backups: activa o desactiva las copias de seguridad para todo el servidor.
  2. Configurar-Copias de seguridad: establece la configuración predeterminada de copia de seguridad específica del servidor o del sitio.
  3. Configure-BackupSettingsProvider: controla la configuración del servidor para el control que tendrá un administrador de sitio sobre su comportamiento de copia de seguridad.
  4. Get-BackupSettings: consultas de configuración de copia de seguridad específica del sitio o del servidor
  5. Reset-BackupSettings: restablece la configuración de copia de seguridad específica del servidor o del sitio.

Función TurnOn-Backups:

Permite que un administrador del servidor active o desactive las copias de seguridad en un ámbito SERVER , sin sobrescribir la configuración específica del sitio. De forma predeterminada, las copias de seguridad están desactivadas. Incluso después de activar las copias de seguridad, las copias de seguridad deben estar "habilitadas" en el nivel de servidor o sitio para que se realicen copias de seguridad.

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

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

Configurar copias de seguridad:

Permite a un administrador del servidor configurar el comportamiento de copia de seguridad predeterminado en el ámbito específico de SERVIDOR o SITIO . Si un administrador especifica una configuración en el ámbito del servidor y un sitio ya ha especificado una configuración específica del sitio, Web Deploy preferirá la configuración específica del sitio en la configuración del servidor. Si un administrador del servidor desea que la configuración del servidor tenga preferencia, debe restablecer la configuración de copia de seguridad del sitio, lo que haría que el sitio herede automáticamente su configuración del servidor.

# 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:

Los administradores del sitio pueden modificar la configuración de copia de seguridad específica del sitio mediante BackupSettingsProvider con Web Deploy. Esta función permite a un administrador del servidor controlar exactamente qué configuración puede configurar un administrador de sitio.

# 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

Consulta la configuración específica del servidor o de la copia de seguridad de un sitio.

# Grabs the global default backup settings
Get-BackupSettings

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

Reset-BackupSettings

Restablece la configuración del servidor o de una copia de seguridad de sitios. Si restablece una configuración de copia de seguridad de sitios, heredará automáticamente de la configuración de copia de seguridad de los servidores.

# Resets the global default backup settings
Reset-BackupSettings

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

Configuración de las opciones de copia de seguridad en el servidor para el uso global manualmente en la configuración de IIS

Configuración de copia de seguridad global

Las siguientes opciones de copia de seguridad globales se pueden configurar directamente en el sistema de configuración de IIS en %windir%\system32\inetsrv\config\applicationhost.config.

  • enabled : (Valor predeterminado = "false") Controla si las copias de seguridad están activadas o no.

  • backupPath : (Valor predeterminado = "{sitePathParent}{siteName}_snapshots") Donde en el servidor se almacenarán las copias de seguridad. También admite las variables de reemplazo de ruta de acceso para "{sitePathParent}" y "{siteName}", que se determinan en tiempo de ejecución.

    • sitePathParent: la ruta de acceso física del archivo padre del contenido de sus sitios. Por ejemplo, si la aplicación del sitio reside en c:\inetpub\wwwroot\siteName, sitePathParent sería c:\inetpub\wwwroot\.
    • siteName: el nombre del sitio.

Ejemplo: El esquema predeterminado establece esta ruta de acceso a "{sitePathParent}{siteName}_snapshots" para que cada copia de seguridad se coloque en una carpeta hermana del contenido del sitio en lugar de dentro de él.

ADVERTENCIA: Asegúrese de que backupPath no reside en la ruta de acceso de contenido de los sitios o que las copias de seguridad se eliminarán en cada publicación.

  • numberOfBackups : (Valor predeterminado = "4") Número de copias de seguridad por sitio que se almacenarán en el servidor. Cuando se haya creado el número máximo de copias de seguridad, se eliminará la copia de seguridad más antigua.
  • continueSyncOnBackupFailure : (Valor predeterminado = "true") Permite a los usuarios producir un error en una sincronización o continuar una sincronización si una copia de seguridad no se puede completar por cualquier motivo.
  • excludeProviders: (valor predeterminado = conjunto vacío) Lista de proveedores de Web Deploy que siempre se excluirán de una copia de seguridad. Por ejemplo, si las copias de seguridad de bases de datos se administran por separado en su entorno, use esta opción para excluir las copias de seguridad de base de datos como parte de las copias de seguridad de web Deploy excluyendo dbFullSQLProvider Para obtener más detalles, consulte la sección "Controlar qué contiene una copia de seguridad".

Nota:

Aunque Web Deploy le permitirá técnicamente realizar copias de seguridad de casi todos los proveedores, hay algunos proveedores que no se pueden restaurar de forma significativa debido a la naturaleza de esos proveedores. Básicamente, todos los proveedores que son proveedores de "solo configuración" y no proveedores de "sincronización" se clasifican en esta categoría. Esta es una lista de proveedores integrados que se recomiendan agregar a la configuración ExcludedProviders:

  • appHostAuthOverride
  • appPoolEnable32Bit
  • appPoolNetFx
  • appPoolPipeline
  • crearAplicación
  • setAcl
  • DBSqlPackage (no instalado de forma predeterminada con Web Deploy, pero aparece aquí porque no se admite actualmente con la característica de copia de seguridad).
  • backupSettingsProvider : (Valor predeterminado: todos los valores de atributo son "false") Proporciona un control de administrador del sistema sobre qué configuración de copia de seguridad puede establecer un administrador de sitio web. Puede permitir que los administradores del sitio web controlen cualquiera de los valores anteriores ["habilitado", "númeroDeCopiasDeSeguridad", "continuarSiFalloEnCopiaDeSeguridad" y "proveedoresExcluidos"] para su sitio. Esto se puede hacer estableciendo las propiedades "canSetEnabled", "canSetNumberOfBackups", etc. en true, tal como se especifica en el ejemplo siguiente.

Puede encontrar detalles completos sobre esta configuración y los valores permitidos en BackupManagerSchema %windir%\system32\inetsrv\config\schema\BackupManagerSchema.xml en el sistema de configuración de IIS.

A continuación se muestra una configuración de ejemplo en la que se puede agregar <system.webServer> (consulte el esquema completo para obtener más detalles). No es necesario especificar todas las opciones siguientes, ya que todas tienen la configuración predeterminada especificada en el esquema, pero se especifican aquí para mostrarse como ejemplo.

<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>

Supongamos que tenemos un sitio denominado "foo" que se encuentra bajo c:\foo\wwwroot en el servidor. La configuración anterior indica que Web Deploy:

  1. Active la característica BackupKeep un máximo de 2 copias de seguridad.
  2. Almacene cada copia de seguridad en una carpeta en c:\foo\foo\_siteBackups.
  3. Error en una publicación si se produce un error en una operación de copia de seguridad por cualquier motivo.
  4. Excluya la copia de seguridad de bases de datos SQL con el proveedor dbFullSql.
  5. Permitir que los administradores del sitio web usen backupSettingsProvider para configurar las configuraciones "enabled", "numberOfBackups", "continueOnBackupFailure" y "excludedProviders" para su sitio.

Configuración de las opciones de copia de seguridad en el servidor para sitios específicos

La característica de copia de seguridad automática también le permite establecer la configuración específica del sitio especificando cada configuración de copia de seguridad mediante una <location> etiqueta en el archivo applicationHost.config. Si no se especifica una configuración en la etiqueta de ubicación, se heredará de la configuración del servidor. Este es un ejemplo del aspecto que puede tener una configuración de copia de seguridad de sitios:

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

Si desea permitir que los administradores del sitio puedan establecer su propia configuración específica del sitio, debe configurar los atributos "canSet*" del elemento BackupSettingsProvider en la configuración de copia de seguridad del servidor (no la configuración de copia de seguridad del sitio).

Consideraciones de seguridad para las copias de seguridad automáticas

Al almacenar estas copias de seguridad en el servidor, debe asegurarse de que cada usuario solo tiene acceso a su propio contenido. Web Deploy de forma predeterminada (durante una instalación completa) configura la regla de delegación backupManager para asegurarse de que se suplanta como el usuario que publica al crear copias de seguridad. Esto implica que la cuenta de usuario de publicación también tendrá que tener permisos de escritura para el directorio de respaldo.

Si no desea usar la identidad de los usuarios finales para crear sus copias de seguridad, simplemente puede eliminar esta regla de delegación y Web Deploy usará la identidad del servicio WMSVC para escribir en el directorio de copia de seguridad.

Nota:

  • Las reglas de delegación solo se aplican a los usuarios no administrativos que se conectan a través de WMSvc. Para los administradores (que se conectan a través del agente de Web Deploy), se usa su propia identidad.
  • Si desea configurar las reglas de delegación manualmente, ejecute nuestro script de AddDelegationRules.ps1.
  • La característica Copia de seguridad incluye 2 nuevas reglas de delegación de proveedor (BackupSettings y BackupManager), como se muestra a continuación.

Captura de pantalla de la página de la característica de Delegación de Servicios de Administración con configuraciones de copia de seguridad y Administrador de copias de seguridad.

Configuración de los ajustes de copia de seguridad a nivel de sitio en el servidor (para administradores de sitio o servidor)

Los administradores del servidor pueden elegir delegar parte de la administración de copias de seguridad a los administradores del sitio. Si se permite, los administradores del sitio pueden configurar el comportamiento de copia de seguridad para sus propios sitios.

Nota:

msdeploy.exe se encuentra en %programfiles%\IIS\Microsoft Web Deploy V3

Enumerar la configuración de copia de seguridad del sitio: Realice una operación de "volcado" al pasar el nombre del sitio al proveedor backupSettings. La marca -xml también mostrará si la configuración es grabable o no.

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

Configure las opciones de copia de seguridad: Realice una operación de "sincronización" al pasar el nombre del sitio, además de cualquier configuración que desee cambiar.

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

Nota:

El administrador del servidor debe permitir la delegación de esta configuración para poder cambiarla.

Control del comportamiento de errores: Puede controlar el comportamiento de si desea que la publicación continúe o no en caso de error de copia de seguridad modificando la configuración de copia de seguridad "continueSyncOnBackupFailure". Si "continueSyncOnBackupFailure" se configura como false y se produce un error en una copia de seguridad, la publicación fallará y no se modificará ningún contenido ni base de datos del sitio.

Agregar un proveedor a la lista de proveedores para excluir de una copia de seguridad: Especifique una lista delimitada por punto y coma de proveedores. Puede usar la opción addExcludedProviders para anexar proveedores a la lista global.

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

Restablezca la configuración de copia de seguridad del sitio a los valores predeterminados del servidor: Realice una operación de "eliminación".

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

Publicación en un servidor de Backup-Enabled (para desarrolladores web)

Creación automática de copias de seguridad

Cuando un usuario publica en un servidor habilitado para copia de seguridad mediante uno de los proveedores admitidos (iisApp, appHostConfig, contentPath), se realizará automáticamente una copia de seguridad antes de que se apliquen los datos, siempre y cuando no se omita la copia de seguridad. No se requiere ninguna acción específica en la parte del usuario final.

Crear manualmente una copia de seguridad

Un usuario puede forzar manualmente la creación de una copia de seguridad mediante el proveedor BackupManager, siempre que las copias de seguridad estén configuradas y habilitadas para el sitio al que se está publicando. Hay dos métodos para crear una copia de seguridad manual.

  1. Especificar una ruta de acceso del sitio de destino: se realizará una sencilla copia de seguridad de iisApp del sitio de destino.

    msdeploy.exe -verb:sync -source:backupManager -dest:backupManager=siteName
    
  2. Especificar un archivo de manifiesto de origen: esto le permitirá realizar una copia de seguridad de varios proveedores (es decir, iisApp, dbFullSql, etc.)

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

Un ejemplo de un archivo de manifiesto simple para la segunda opción podría tener un aspecto similar al siguiente:

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

Omitir la copia de seguridad durante la publicación

Si un cliente quiere impedir que se realice una copia de seguridad, puede deshabilitar las copias de seguridad en el servidor como una configuración persistente mediante el proveedor backupSettings o deshabilitar la ejecución de la regla de copia de seguridad en el servidor para cada publicación individual. Este es un ejemplo de cómo deshabilitar la regla de copia de seguridad de la ejecución durante una publicación:

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

Administración de copias de seguridad (para desarrolladores web o administradores de sitios)

El proveedor BackupManager ofrece a los clientes la capacidad de enumerar, restaurar y eliminar copias de seguridad. Estos son algunos ejemplos de cómo se hace esto:

Listar copias de seguridad de un sitio: Realizar una operación de "dump" para ver todas las copias de seguridad de un sitio

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

Restaurar una copia de seguridad específica para un sitio: Realiza una operación de "sincronización" para aplicar una copia de seguridad

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

Restaure la copia de seguridad más reciente de un sitio:

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

Restaure la copia de seguridad más reciente de un sitio que también contiene una base de datos: Supone que la copia de seguridad más reciente también puede contener una copia de seguridad de base de datos. La configuración del proveedor connectionString se usa para conectarse a la base de datos a la que está restaurando y es necesario para restaurar cualquier copia de seguridad con una base de datos a menos que aplique una regla de omisión para omitir la restauración de la base de datos.

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

Restaure la copia de seguridad más reciente de un sitio sin sobrescribir App_Data mediante Skips:

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

Eliminar una copia de seguridad de un sitio:

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

Problemas conocidos y limitaciones:

Hay varios escenarios en los que Web Deploy no realizará automáticamente una copia de seguridad incluso si está habilitado en el servidor:

  1. El cliente está publicando con una versión anterior de Web Deploy que V3 RC.
  2. El servidor no tiene instalado al menos Web Deploy V3 RC.
  3. Se especifica más de 1 base de datos en un manifiesto : Web Deploy solo admite la realización de una copia de seguridad de una base de datos única por publicación.
  4. La ruta de acceso del proveedor que está usando no es una ruta de acceso de sitio relativa: El proveedor contentPath acepta rutas de acceso de archivo físicas, así como rutas de acceso de sitio relativas. Si se especifica una ruta de acceso física, Web Deploy excluirá ese proveedor al iniciar la copia de seguridad. El proveedor apphostConfig acepta una ruta de acceso vacía. Si se especifica una ruta de acceso vacía, Web Deploy no realizará ninguna copia de seguridad.
  5. Rutas de acceso relativas en conflicto en un manifiesto : si hay varios proveedores en un manifiesto que tienen rutas de acceso de sitio relativas en conflicto, Web Deploy no realizará una copia de seguridad. Por ejemplo, si va a publicar con varios proveedores de IISApp a sitios diferentes, uno que apunta al sitio "foo" mientras que el otro apunta al sitio "bar", Web Deploy no realizará una copia de seguridad.

Otros problemas conocidos:

  1. Instalar Web Deploy V2 interrumpe la regla de delegación BackupSettings : si instala V2 después de V3, la regla de delegación BackupSettings ya no funcionará si se configuró para ejecutarse con el usuario WDeployConfigWriter predeterminado. Para solucionar este problema, simplemente ejecute el script V3 AddDelegationRule.ps1 (ubicado en %programfiles%\IIS\Microsoft Web Deploy\Scripts) desde PowerShell.