다음을 통해 공유


웹 배포 자동 백업

작성자: 엘리엇 하마이

소개

V3에서 웹 배포는 IIS 7 이상에 대한 자동 서버 쪽 백업 기능을 도입합니다. 서버에 자동 백업이 구성되고 사용자가 웹 배포를 사용하여 사이트에 게시하는 경우 먼저 라이브 사이트의 백업을 수행하고 사이트에 대한 변경 내용을 커밋하기 전에 서버에 저장합니다. 게시가 어떤 이유로 실패했거나 사용자가 이전 버전의 웹 사이트를 복원하려는 경우 서버 관리자와 연결하지 않고 이러한 백업에서 복원할 수 있습니다. 최종 사용자가 이 기능을 활용하려면 서버 관리자가 이 기능을 사용하도록 설정하고 구성해야 합니다.

백업을 만드는 경우

웹 배포에서 사용자가 contentPath, iisApp 또는 appHostConfig 공급자를 사용하여 게시하는 것을 감지하면 자동으로 백업을 시작합니다(서버에서 사용하도록 설정된 경우). 대부분의 경우 이러한 공급자는 웹 매트릭스 및 Visual Studio를 사용하는 게시에도 포함됩니다. 다음은 웹 Deployment Agent 사용하여 "remoteComputerName"에서 백업을 시작하는 동기화의 명령줄 예제입니다.

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

원본 공급자가 매니페스트인 경우 웹 배포는 매니페스트의 모든 공급자를 검사하여 매니페스트의 공급자가 contentPath, iisApp 또는 appHostConfig 공급자인지 확인합니다. 이 경우 매니페스트에서 모든 공급자에 대한 백업을 시작합니다(이에 대한 예외는 "알려진 문제 및 제한 사항" 섹션 참조). 그러나 충돌하는 공급자 경로가 있는 경우(예: 하나는 사이트 "foo"를 가리키고 다른 하나는 사이트 "bar"를 가리키는 경우 웹 배포는 백업을 수행하지 않습니다.

백업에 포함된 내용

기본적으로 웹 배포는 백업을 만들기 위해 게시에 대해 지정한 공급자(포함되지 않은 setAcl 제외)를 사용합니다. 따라서 iisApp 및 dbFullSql 공급자를 사용하여 게시하는 경우 웹 배포는 서버에서 iisApp 및 dbFullSql 공급자의 백업을 수행합니다. 여기에는 웹 애플리케이션을 다시 게시하는 데 사용할 수 있는 데이터베이스 스크립트와 함께 웹 애플리케이션에 속하는 모든 콘텐츠 및 구성이 포함됩니다. ExcludedProviders 백업 설정을 수정하거나 게시하기 전에 건너뛰기 규칙을 지정하여 이 기본 동작을 변경할 수 있습니다.

이러한 백업은 호환되는 모든 IIS 서버에 대해 웹 배포와 함께 복사 및 사용할 수 있는 유효한 웹 배포 패키지입니다.

서버에서 자동 백업 기능 구성(서버 관리자용)

사용자에게 자동 백업 기능을 제공하려면 서버 관리자가 이러한 백업을 저장할 수 있는 서버에 공간을 프로비전해야 합니다. 이 공간은 서버에 물리적으로 배치되거나 서버에서 액세스할 수 있는 네트워크 공유에 있을 수 있습니다.

필요한 공간의 양은 개별 애플리케이션의 크기 및 서버에 저장할 백업 수에 따라 달라집니다. 백업에서 사용하는 공간을 제어하려면 각 사이트에 대해 별도의 폴더를 만들고 개별 폴더의 할당량을 제한하는 데 FSRM(Windows 파일 서버 Resource Manager)을 사용해야 합니다. 보안 모범 사례로 각 사용자가 자신의 폴더에 대한 읽기/쓰기 액세스 권한이 있도록 이러한 폴더를 ACL해야 합니다.

모든 사이트에서 백업을 활용할 수 있도록 서버에서 전역적으로 백업을 사용하도록 설정하거나 사이트별로 구성할 수 있습니다.

PowerShell을 사용하여 전역 사용을 위해 서버에서 백업 설정 구성

서버 수준에서 백업 기능을 구성하는 PowerShell 스크립트는 에서 %programfiles%\IIS\Microsoft Web Deploy V3\scripts\BackupScripts.ps1찾을 수 있습니다. 로드하려면 PowerShell에서 해당 디렉터리로 이동하여 다음을 실행하기만 하면 됩니다.

. .\BackupScripts.ps1

그러면 백업을 구성하는 데 사용할 수 있는 세션에 다음 함수가 로드됩니다.

  1. TurnOn-Backups: 전체 서버에 대한 백업을 켜거나 끕니다.
  2. 구성-백업: 기본 서버 또는 사이트별 백업 설정을 설정합니다.
  3. Configure-BackupSettingsProvider: 사이트 관리자가 백업 동작에 대해 가질 컨트롤의 양에 대한 서버 설정을 제어합니다.
  4. Get-BackupSettings: 쿼리 서버 또는 사이트별 백업 설정
  5. Reset-BackupSettings: 서버 또는 사이트별 백업 설정을 다시 설정합니다.

TurnOn-Backups 함수:

서버 관리자가 사이트별 설정을 덮어쓰지 않고 서버 scope 백업을 켜거나 끌 수 있습니다. 기본적으로 백업은 꺼져 있습니다. 백업을 설정한 후에도 백업을 수행하려면 서버 또는 사이트 수준에서 백업을 "사용"해야 합니다.

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

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

구성-백업:

서버 관리자가 서버 또는 사이트별 scope 기본 백업 동작을 구성할 수 있습니다. 관리자가 서버 scope 설정을 지정하고 사이트에서 사이트별 설정을 이미 지정한 경우 웹 배포는 서버 설정보다 사이트별 설정을 선호합니다. 서버 관리자가 서버 설정을 기본 설정으로 설정하려면 사이트에서 해당 설정을 서버에서 자동으로 상속하는 사이트 백업 설정을 다시 설정해야 합니다.

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

사이트 관리자는 웹 배포에서 BackupSettingsProvider를 사용하여 사이트별 백업 설정을 수정할 수 있습니다. 이 함수를 사용하면 서버 관리자가 사이트 관리자가 구성할 수 있는 설정을 정확하게 제어할 수 있습니다.

# 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

서버 또는 사이트별 백업 설정을 쿼리합니다.

# Grabs the global default backup settings
Get-BackupSettings

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

Reset-BackupSettings

서버 또는 사이트 백업 설정을 다시 설정합니다. 사이트 백업 설정을 다시 설정하면 서버 백업 설정에서 자동으로 상속됩니다.

# Resets the global default backup settings
Reset-BackupSettings

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

IIS 구성에서 전역 사용을 위해 서버에서 백업 설정 수동으로 구성

전역 백업 설정

다음 전역 백업 설정은 아래의 IIS 구성 시스템에서 %windir%\system32\inetsrv\config\applicationhost.config직접 구성할 수 있습니다.

  • enabled - (Default = "false") 백업이 켜져 있는지 여부를 제어합니다.

  • backupPath - (기본값 = "{sitePathParent}{siteName}_snapshots") 서버에서 백업이 저장되는 위치입니다. 또한 런타임에 결정되는 "{sitePathParent}" 및 "{siteName}"에 대한 경로 대체 변수를 업포트합니다.

    • sitePathParent - 사이트 콘텐츠의 부모에 대한 실제 파일 경로입니다. 예를 들어 사이트의 애플리케이션이 에 c:\inetpub\wwwroot\siteName있는 경우 sitePathParent는 입니다 c:\inetpub\wwwroot\.
    • siteName - 사이트의 이름입니다.

: 기본 스키마는 각 백업이 사이트 콘텐츠의 형제 폴더 아래에 배치되도록 이 경로를 "{sitePathParent}{siteName}_snapshots"로 설정합니다.

경고: backupPath가 사이트 콘텐츠 경로 아래에 있지 않거나 각 게시에서 백업이 삭제되는지 확인합니다.

  • numberOfBackups - (기본값 = "4") 서버에 저장될 사이트당 백업 수입니다. 최대 백업 수를 만들면 가장 오래된 백업이 삭제됩니다.
  • continueSyncOnBackupFailure - (기본값 = "true") 어떤 이유로든 백업이 완료되지 않을 경우 사용자가 동기화에 실패하거나 동기화를 계속할 수 있습니다.
  • excludedProviders- (기본값 = 빈 집합) 항상 백업에서 제외할 웹 배포 공급자 목록입니다. 예를 들어 데이터베이스 백업이 사용자 환경에서 별도로 관리되는 경우 dbFullSQLProvider를 제외하여 웹 배포 백업의 일부로 데이터베이스 백업을 제외하는 경우 자세한 내용은 "백업에 포함된 항목 제어" 섹션을 참조하세요.

참고

웹 배포를 통해 기술적으로 거의 모든 공급자를 백업할 수 있지만 이러한 공급자의 특성 때문에 의미 있는 방식으로 복원할 수 없는 공급자가 있습니다. 기본적으로 "동기화" 공급자가 아닌 "설정 전용" 공급자는 이 범주에 속합니다. 다음은 ExcludedProviders 설정에 추가하는 것이 권장되는 기본 제공 공급자 목록입니다.

  • appHostAuthOverride
  • appPoolEnable32Bit
  • appPoolNetFx
  • appPoolPipeline
  • createApp
  • setAcl
  • DBSqlPackage(웹 배포와 함께 기본적으로 설치되지 않지만 현재 백업 기능에서 지원되지 않으므로 여기에 나열됨)
  • backupSettingsProvider - (기본값: 모든 특성 설정은 "false") 웹 사이트 관리자가 설정할 수 있는 백업 설정을 시스템 관리자에게 제어합니다. 웹 사이트 관리자가 해당 사이트에 대해 위의 설정 "enabled", "numberOfBackups", "continueOnBackupFailure" 및 "excludedProviders"를 제어하도록 허용할 수 있습니다. 이 작업은 다음 예제에 지정된 대로 속성 "canSetEnabled", "canSetNumberOfBackups" 등을 true로 설정하여 수행할 수 있습니다.

이러한 설정 및 허용되는 값에 대한 자세한 내용은 IIS 구성 시스템의 BackupManagerSchema %windir%\system32\inetsrv\config\schema\BackupManagerSchema.xml 에서 찾을 수 있습니다.

아래에서 추가할 <system.webServer> 수 있는 샘플 구성은 다음과 같습니다(자세한 내용은 전체 스키마 참조). 모든 설정이 스키마에 지정되어 있으므로 아래 설정을 모두 지정할 필요는 없지만 예제로 표시하기 위해 여기에 지정됩니다.

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

서버에 있는 "foo"라는 사이트가 있다고 c:\foo\wwwroot 가정해 보겠습니다. 위의 구성은 웹 배포에 다음을 지시합니다.

  1. 백업 기능을 켜고 최대 2개의 백업을 유지합니다.
  2. 각 백업을 의 폴더에 저장합니다 c:\foo\foo\_siteBackups.
  3. 어떤 이유로든 백업 작업이 실패하면 게시에 실패합니다.
  4. dbFullSql 공급자를 사용하여 SQL 데이터베이스 백업을 제외합니다.
  5. 웹 사이트 관리자가 backupSettingsProvider를 사용하여 사이트에 대해 "enabled", "numberOfBackups", "continueOnBackupFailure" 및 "excludedProviders" 설정을 구성할 수 있도록 허용합니다.

특정 사이트에 대해 서버에서 백업 설정 구성

자동 백업 기능을 사용하면 applicationHost.config 파일의 태그를 사용하여 <location> 각 백업 설정을 지정하여 사이트별 설정을 설정할 수도 있습니다. 위치 태그에 설정을 지정하지 않으면 서버 설정에서 상속됩니다. 사이트 백업 설정의 예는 다음과 같습니다.

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

사이트 관리자가 자체 사이트별 설정을 설정할 수 있도록 하려면 사이트 백업 설정이 아닌 서버 백업 설정에서 BackupSettingsProvider 요소의 "canSet*" 특성을 구성해야 합니다.

자동 백업에 대한 보안 고려 사항

이러한 백업을 서버에 저장하는 동안 각 사용자가 자신의 콘텐츠에만 액세스할 수 있는지 확인해야 합니다. 웹 배포는 기본적으로(전체 설치 중) BackupManager 위임 규칙을 구성하여 백업을 만드는 동안 게시하는 사용자로 가장되도록 합니다. 즉, 게시 사용자 계정에 백업 디렉터리에 대한 "쓰기" 파일 권한도 있어야 합니다.

최종 사용자 ID를 사용하여 백업을 만들지 않으려면 이 위임 규칙을 삭제하면 웹 배포에서 WMSVC 서비스의 ID를 사용하여 백업 디렉터리에 씁니다.

참고

  • 위임 규칙은 WMSvc를 통해 연결하는 비관리 사용자에게만 적용됩니다. 관리자(웹 배포 에이전트를 통해 연결)의 경우 자체 ID가 사용됩니다.
  • 위임 규칙을 수동으로 구성하려면 AddDelegationRules.ps1 스크립트를 실행합니다.
  • Backup 기능에는 아래와 같이 2개의 새로운 공급자 위임 규칙(BackupSettings 및 BackupManager)이 함께 제공됩니다.

백업 설정 및 백업 관리자가 있는 관리 서비스 위임 기능 페이지의 스크린샷

서버에서 Site-Level 백업 설정 구성(사이트/서버 관리자용)

서버 관리자는 일부 백업 관리를 사이트 관리자에게 위임하도록 선택할 수 있습니다. 허용되는 경우 사이트 관리자는 자신의 사이트에 대한 백업 동작을 구성할 수 있습니다.

참고

msdeploy.exe 아래에 있습니다. %programfiles%\IIS\Microsoft Web Deploy V3

사이트 백업 설정 나열: 사이트 이름을 backupSettings 공급자에 전달하는 동안 "덤프" 작업을 수행합니다. -xml 플래그는 설정을 쓸 수 있는지 여부도 나열합니다.

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

백업 설정 구성: 사이트 이름과 변경하려는 설정을 전달하는 동안 "동기화" 작업을 수행합니다.

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

참고

서버 관리자는 이러한 설정을 변경하려면 먼저 이러한 설정 위임을 허용해야 합니다.

오류 동작 제어: "continueSyncOnBackupFailure" 백업 설정을 수정하여 백업 실패 시 게시를 계속할지 여부를 제어할 수 있습니다. "continueSyncOnBackupFailure"가 false로 설정되고 백업이 실패하면 게시가 실패하고 사이트 콘텐츠 또는 데이터베이스가 수정되지 않습니다.

백업에서 제외할 공급자 목록에 공급자 추가: 세미콜론으로 구분된 공급자 목록을 지정합니다. addExcludedProviders 옵션을 사용하여 공급자를 전역 목록에 추가할 수 있습니다.

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

사이트 백업 설정을 서버 기본값으로 다시 설정합니다. "삭제" 작업을 수행합니다.

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

Backup-Enabled 서버에 게시(웹 개발자용)

자동으로 백업 만들기

사용자가 지원되는 공급자(iisApp, appHostConfig, contentPath) 중 하나를 사용하여 백업 사용 서버에 게시하면 백업을 건너뛰지 않는 한 데이터가 적용되기 전에 백업이 자동으로 수행됩니다. 최종 사용자 부분에는 특정 작업이 필요하지 않습니다.

수동으로 백업 만들기

사용자가 게시할 사이트에 대해 백업을 구성하고 사용하도록 설정하는 한 BackupManager 공급자를 사용하여 수동으로 백업을 만들도록 강제할 수 있습니다. 수동 백업을 만드는 방법에는 두 가지가 있습니다.

  1. 대상 사이트 경로 지정 - 대상 사이트의 간단한 iisApp 백업이 수행됩니다.

    msdeploy.exe -verb:sync -source:backupManager -dest:backupManager=siteName
    
  2. 원본 매니페스트 파일 지정 - 여러 공급자(예: iisApp, dbFullSql 등)의 백업을 수행할 수 있습니다.

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

두 번째 옵션에 대한 간단한 매니페스트 파일의 예는 다음과 같습니다.

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

게시하는 동안 백업 건너뛰기

클라이언트가 백업을 수행하지 못하도록 하려는 경우 backupSettings 공급자를 사용하여 서버의 백업을 지속형 설정으로 사용하지 않도록 설정하거나 각 개별 게시에 대해 서버에서 백업 규칙을 실행하지 않도록 설정할 수 있습니다. 게시하는 동안 Backup 규칙이 실행되지 않도록 설정하는 방법의 예는 다음과 같습니다.

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

백업 관리(웹 개발자/사이트 관리자용)

BackupManager 공급자는 클라이언트에게 백업을 나열, 복원 및 삭제할 수 있는 기능을 제공합니다. 이 작업을 수행하는 방법에 대한 몇 가지 예는 다음과 같습니다.

사이트에 대한 백업 나열: 사이트에 대한 모든 백업을 보려면 "덤프" 작업을 수행합니다.

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

사이트에 대한 특정 백업 복원: 백업을 적용하는 "동기화" 작업을 수행합니다.

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

사이트에 대한 최신 백업 복원:

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

데이터베이스가 포함된 사이트에 대한 최신 백업을 복원합니다. 최신 백업에도 데이터베이스 백업이 포함된다고 가정합니다. connectionString 공급자 설정은 복원 중인 데이터베이스에 연결하는 데 사용되며 데이터베이스 복원을 건너뛰는 건너뛰기 규칙을 적용하지 않는 한 데이터베이스를 사용하여 백업을 복원하는 데 필요합니다.

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

Skips를 사용하여 App_Data 덮어쓰지 않고 사이트에 대한 최신 백업을 복원합니다.

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

사이트에 대한 백업을 삭제합니다.

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

알려진 문제 & 제한 사항-

웹 배포가 서버에서 사용하도록 설정된 경우에도 자동으로 백업을 수행하지 않는 몇 가지 시나리오가 있습니다.

  1. 클라이언트가 V3 RC보다 이전 버전의 웹 배포를 사용하여 게시하고 있습니다.
  2. 서버에 적어도 웹 배포 V3 RC가 설치되어 있지 않습니다.
  3. 매니페스트에 1개 이상의 데이터베이스가 지정됨 - 웹 배포는 게시당 단일 데이터베이스의 백업만 지원합니다.
  4. 사용 중인 공급자의 경로가 상대 사이트 경로가 아닙니다 . contentPath 공급자는 상대 사이트 경로뿐만 아니라 실제 파일 경로를 허용합니다. 실제 경로가 지정된 경우 웹 배포는 백업을 시작하는 데 해당 공급자를 계산하지 않습니다. apphostConfig 공급자는 빈 경로를 허용합니다. 빈 경로가 지정된 경우 웹 배포는 백업을 전혀 수행하지 않습니다.
  5. 매니페스트의 상대 경로 충돌 - 매니페스트에 상대 사이트 경로가 충돌하는 여러 공급자가 있는 경우 웹 배포는 백업을 수행하지 않습니다. instance 경우 여러 iisApp 공급자를 사용하여 다른 사이트에 게시하는 경우 사이트 "foo"를 가리키는 반면 다른 하나는 사이트 "바"를 가리키는 경우 웹 배포는 백업을 수행하지 않습니다.

기타 알려진 문제:

  1. 웹 배포 V2 중단 Backup설치 위임 규칙 - V3 이후에 V2를 설치하면 기본 WDeployConfigWriter 사용자와 함께 실행되도록 구성된 경우 BackupSettings 위임 규칙이 더 이상 작동하지 않습니다. 이 문제를 해결하려면 PowerShell에서 V3 AddDelegationRule.ps1(아래에 %programfiles%\IIS\Microsoft Web Deploy\Scripts있음) 스크립트를 실행하면 됩니다.