url image

Перенос сайтов Windows

Статья давно не обновлялась, поэтому информация могла устареть.

Содержание

Установка IIS

Для начала нашему серверу необходимо добавить роль Web-сервера. Для добавления открываем Server Manager, и в меню Manage жмем Add Roles and features:

 

Installroles.png

 

Откроется мастер добавления ролей и компонентов. Жмем Next Installation Type, выбираем Role-based or feature-based installation. Next:

 

Installroles2.png

 

Server Selection - выбираем наш сервер. Жмем Next Server Roles, выбираем Web-Server IIS, мастер предложит добавить необходимые компоненты. Жмем Add features:

 

Iisinstall.png

 

Features - помимо уже отмеченных служб, отмечаем ASP.NET жмем Next

 

Iisinstall3.png

 

Попадаем на страницу выбора служб ролей - Role Services. Выбираем необходимые службы (список служб, которые по умолчанию необходимы большинству пользователей для решения их задач, так называемый “универсальный” набор компонентов, если вам необходимы дополнительные сервисы, то описание всех сервисов роли IIS вы можете найти здесь Роли_сервера_в_ОС_Windows:

  • Общие функции HTTP (Common HTTP Features)
    • Статическое содержимое (Static Content)
    • Документ по умолчанию (Default Document)
    • Обзор каталогов (Directory Browsing)
    • Ошибки HTTP (HTTP Errors)
  • Разработка приложений (Application Development)
    • ASP
    • ASP.NET 3.5
    • ASP.NET 4.5
    • Расширяемость .NET 3.5 (.NET Extensibility 3.5)
    • Расширяемость .NET 4.5 (.NET Extensibility 4.5)
    • Расширения ISAPI (ISAPI Extensions)
    • Фильтры ISAPI (ISAPI Filters)
    • CGI
  • Исправление и диагностика (Health and Diagnostics)
    • Ведение журнала HTTP (HTTP Logging)
    • Монитор запросов (Request Monitor)
  • Средства управления (Management Tools)
    • Консоль управления IIS (IIS Management Console)

Для установки FTP-сервера требуются компоненты:

  • FTP-Сервер (FTP Server)
  • Служба FTP (FTP Service)
  • Расширяемость FTP (FTP Extensibility)
  • Security компоненты безопасности
    • Basic Authentication
    • IP and Domain Restrictions

 

Iisinstall1.png

 

Проверить, что IIS установился можно, открыв в браузере на сервере http://localhost/ Так же можно установить IIS с компонентами с помощью Powershell, для этого достаточно ввести команду:

 Dism.exe /Online /Enable-Feature /FeatureName:IIS-ApplicationDevelopment /FeatureName:IIS-ASP /FeatureName:IIS-ASPNET /FeatureName:IIS-BasicAuthentication /FeatureName:IIS-CGI /FeatureName:IIS-ClientCertificateMappingAuthentication /FeatureName:IIS-CommonHttpFeatures /FeatureName:IIS-CustomLogging /FeatureName:IIS-DefaultDocument /FeatureName:IIS-DigestAuthentication /FeatureName:IIS-DirectoryBrowsing /FeatureName:IIS-FTPExtensibility /FeatureName:IIS-FTPServer /FeatureName:IIS-FTPSvc /FeatureName:IIS-HealthAndDiagnostics /FeatureName:IIS-HostableWebCore /FeatureName:IIS-HttpCompressionDynamic /FeatureName:IIS-HttpCompressionStatic /FeatureName:IIS-HttpErrors /FeatureName:IIS-HttpLogging /FeatureName:IIS-HttpRedirect /FeatureName:IIS-HttpTracing /FeatureName:IIS-IIS6ManagementCompatibility /FeatureName:IIS-IISCertificateMappingAuthentication /FeatureName:IIS-IPSecurity /FeatureName:IIS-ISAPIExtensions /FeatureName:IIS-ISAPIFilter /FeatureName:IIS-LegacyScripts /FeatureName:IIS-LegacySnapIn /FeatureName:IIS-LoggingLibraries /FeatureName:IIS-ManagementConsole /FeatureName:IIS-ManagementScriptingTools /FeatureName:IIS-ManagementService /FeatureName:IIS-Metabase /FeatureName:IIS-NetFxExtensibility /FeatureName:IIS-ODBCLogging /FeatureName:IIS-Performance /FeatureName:IIS-RequestFiltering /FeatureName:IIS-RequestMonitor /FeatureName:IIS-Security /FeatureName:IIS-ServerSideIncludes /FeatureName:IIS-StaticContent /FeatureName:IIS-URLAuthorization /FeatureName:IIS-WebDAV /FeatureName:IIS-WebServer /FeatureName:IIS-WebServerManagementTools /FeatureName:IIS-WebServerRole /FeatureName:IIS-WindowsAuthentication /FeatureName:IIS-WMICompatibility /FeatureName:WAS-ConfigurationAPI /FeatureName:WAS-NetFxEnvironment /FeatureName:WAS-ProcessModel /FeatureName:WAS-WindowsActivationService

Рекомендую установить Web Platform Installer, который представляет собой простой, бесплатный инструмент, позволяющий автоматизировать установку компонентов веб-платформы Microsoft Web Platform Installer Для переноса средствами IIS нам понадобится установить Web deploy, самый простой и быстрый способ, это установка средствами Web Platform Installer Запускаем Web Platform Installer, в поле поиска справа сверху вводим Web Deploy, выделяем одноименный компонент и нажимаем кнопку Add (на скриншоте Web Deploy уже установлен) После того как все компоненты выбраны нажимаем кнопку Install В этот же раз в Web Platform Installer установим сразу URL Rewrite, очень многие сайты и CMS требуют его наличие. Установка производится аналогично Web Deploy.

Установка MSSQL

Мы рассматриваем установку MSSQL Express (бесплатная версия), поэтому дистрибутив скачиваем непосредственно с сайта Microsoft MSSQL Express Выбираем пакет SQLEXPRADV_x64_ENU.exe для скачивания. Запускаем программу-установщик. В разделе Planning выбираем System configuration checker, смотрим, что все проверки пройдены успешно

 

Mssql.png

 

В разделе Installation выбираем New SQL Server stand-alone installation or add features to an existing installation

 

Mssql1.png

 

Попадаем в раздел Product Updates, программа-установщик обнаружит доступные обновления и предложит установить их, жмем кнопку Next

 

Mssql2.png

 

Читаем лицензию, принимаем условия лицензионного соглашения, нажимаем кнопку Next Выбираем компоненты для установки, можно выбрать все, кнопкой Select all

 

Mssql3.png

 

На вкладке Instance configuration выбираем опцию Default instance

 

Mssql4.png

 

Выбрать опции, как показано на рисунке

 

Mssql5.png

 

На следующей вкладке выбираем параметр Mixed mode и задаем пароль для встроенной учетной записи администратора «sa» (эта учетная запись обладает максимальными правами доступа ко всем функциям и объектам на SQL-сервере). Дополнительно можно указать учетные записи пользователей Windows или целые группы пользователей Windows, которые должны обладать максимальными правами доступа к SQL Server

 

Mssql6.png

 

После во всех вкладках оставляем все по-умолчанию, и осуществляем установку.

Установка PHP

Для работы PHP с IIS нам потребуется установленный модуль CGI (см. подробнее раздел установка IIS), он находится в разделе Server Roles-Web Server (IIS) -Web Server-Application Development-CGI

Запускаем Web Platform Installer, в поле поиска справа сверху вводим PHP, выбираем необходимую версию, нажимаем кнопку add и затем кнопку Install.

Заходим в IIS: Server manager-Tools -Internet Information Services (IIS) Manager

В IIS выбираем сервер, на котором необходимо настроить поддержку PHP, и заходим в Handler Mappings

Handiis.png

 

В столбце Path ищем *.php, если находим, то нажимаем Edit, если нет, то Add Module Maping и создаем новый модуль обработки, настройки должны быть как на скриншоте ниже:

Php.png

 

Проверяем работу php, в директорию C:\inetpub\wwwroot\ помещаем файл phpinfo.php с содержимым <?php phpinfo(); ?> Открываем в браузере http://localhost/phpinfo.php

Очень часто при проверке возникает 500 ошибка HTTP Error 500.0 - Internal Server Error C:\PHP\php-cgi.exe - The FastCGI process exited unexpectedly, это связано с тем, что для корректной работы php на windows требуется VC++ определенной версии, для php 5.4x - это VC++ 9, для php 5.5x и 5.6x VC++ 10, скачиваем VC++ необходимой версии, устанавливаем и скачиваем x86 версию. Serverfault про php и vc

 

Использование нескольких версий PHP

Версии, отличные от ранее установленной, устанавливаются аналогично. Настройки Handler Mappings делаются для конкретного сайта, и там уже выбирается обработчик php. Те обработчики, которые не нужны вы удаляете для конкретного сайта, при этом в Web Config сайта добавляются строки типа:

<remove name="PHP_via_FastCGI"/>

Использование разных наборов настроек PHP

Если возникнет необходимость в различных настройках для разных сайтов, то необходимо внести изменения в файл C:Windows\system32\inetsrv\config\applicationHost.config.

Это конфигурационный файл IIS, поэтому обязательно сохраните копию. В блок application добавляем аргумент, в примере это arguments="-d my.website=wordpress", аргумент, который обозначает, что мы для сайта my.website создаем собственную конфигурацию с идентификатором wordpress, далее в блоке environmentVariable указываем из какой директории использовать php.ini, в примере это C:\inetpub\wordpress

<fastCgi>
<application fullPath="C:\Program Files (x86)\PHP\v5.4\php-cgi.exe" monitorChangesTo="php.ini" activityTimeout="600" requestTimeout="600"  instanceMaxRequests="10000" arguments="-d my.website=wordpress">
<environmentVariables>
<environmentVariable name="PHP_FCGI_MAX_REQUESTS" value="10000"/>
<environmentVariable name="PHPRC" value="C:\inetpub\wordpress"/>
</environmentVariables>

В примере ниже используется аргумент -d my.website=phpsite, можно добавлять сколько угодно таких аргументов, каждый в своем блоке application fullPath

<application fullPath="C:\Program Files (x86)\PHP\v5.4\php-cgi.exe" monitorChangesTo="php.ini" activityTimeout="600" requestTimeout="600" instanceMaxRequests="10000" arguments="-d my.website=phpsite">
<environmentVariables>
<environmentVariable name="PHP_FCGI_MAX_REQUESTS" value="10000"/>
<environmentVariable name="PHPRC" value="C:\inetpub\phpsite"/>
</environmentVariables>


Заходим в IIS, через Handler Mappings для сайта удаляем все обработчики php. После этого в Web config сайта добавляем строку:

<add name="PHP54_via_FastCGI" path="*.php" verb="GET,HEAD,POST" modules="FastCgiModule" scriptProcessor="C:\Program Files (x86)\PHP\v5.4\php-cgi.exe|-d my.website=wordpress" resourceType="Either" requireAccess="Script"/>

Ключевой здесь является опция после пути скрипта “-d my.website=wordpress”. Теперь в директории C:\inetpub\wordpress можно разместить php.ini и наш сайт будет брать настройки оттуда.

Перенос сайта

Для переноса сайта нам потребуется сделать его резервную копию средствами IIS. Ранее мы с вами установили Web deploy, его так же необходимо установить на сервере-источнике.

В примере переносим сайты на чистый сервер, все команды выполняются не в powershell, а в командной строке CMD. На исходном сервере создаем директорию с:\backup\IISAppPool

Экспортируем пулы командой

"C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy" -verb:sync -source:metakey=lm/w3svc/AppPools -dest:archivedir=c:\backup\IISAppPool

Делаем список идентификаторов сайтов по одному на строку в файл 1.txt в директории, в которой работаем (команда для Powershell):

Select-String -Path "C:\Windows\System32\inetsrv\config\applicationHost.config" -Pattern "site name" | Select-Object -ExpandProperty line | %{ $_.Split("`"")[3]; } > 1.txt

Экспортируем сайты командой

for /f %i in (1.txt) do "C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy" -verb:sync -source:metakey=lm/w3svc/%i -dest:archivedir=c:\backup\site_%i

Папку C:\backup и файл 1.txt копируем на сервер-приемник

В IIS-Application pools-DefaultAppPool выставляем Managed pipeline mode такой же как на сервере источнике:

 

Apppool.png

 

Восстанавливаем пулы следующей командой

"C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy" -verb:sync -source:archivedir=c:\backup\IISAppPool -dest:metakey=lm/w3svc/AppPools

Восстанавливаем сайты командой

for /f %i in (1.txt) do "C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy" -verb:sync -source:archivedir=c:\backup\site_%i -dest:metakey=lm/w3svc/%i

Перенос MSSQL Баз данных

Внимание, если есть возможность, всегда перед переносом делайте бэкапы БД.

Отсоединение базы данных

Подключаемся к MSSQL-серверу на сервере-источнике. Раскрываем список Базы данных и выбираем базы данных, которые необходимо переносить. Щелкаем правой кнопкой мыши на имя базы данных (со всеми бд это придется проделать по очереди) -Tasks-Detach

 

Detms.png

 

Появляется диалоговое окно, в котором следует отсоединить БД, если к БД в момент проведения процедуры есть подключения, их следует удалить, поставив галочку в столбце Drop Connection. После отсоединения переносим файлы БД на целевой сервер (как правило, файлы БД лежат по пути C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA.

Присоединение базы данныx

Подключаемся к MSSQL-серверу на сервере-приемнике. Правой кнопкой нажимаем на Databases и выбираем пункт Attach... В появившемся диалоговом окне указываем файлы БД, которые перенесли.

 

Atms.png

 

Особенность переноса БД в MSSQL такова, что пользователи и пароли не переносятся вместе с базой данных, поэтому переходим к завершающему пункту.

Перенос имен пользователей и паролей БД MSSQL

Запускаем приведенный ниже сценарий на исходном сервере SQL Server.

USE master
GO
IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL
  DROP PROCEDURE sp_hexadecimal
GO
CREATE PROCEDURE sp_hexadecimal
    @binvalue varbinary(256),
    @hexvalue varchar (514) OUTPUT
AS
DECLARE @charvalue varchar (514)
DECLARE @i int
DECLARE @length int
DECLARE @hexstring char(16)
SELECT @charvalue = '0x'
SELECT @i = 1
SELECT @length = DATALENGTH (@binvalue)
SELECT @hexstring = '0123456789ABCDEF'
WHILE (@i <= @length)
BEGIN
  DECLARE @tempint int
  DECLARE @firstint int
  DECLARE @secondint int
  SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))
  SELECT @firstint = FLOOR(@tempint/16)
  SELECT @secondint = @tempint - (@firstint*16)
  SELECT @charvalue = @charvalue +
    SUBSTRING(@hexstring, @firstint+1, 1) +
    SUBSTRING(@hexstring, @secondint+1, 1)
  SELECT @i = @i + 1
END

SELECT @hexvalue = @charvalue
GO
 
IF OBJECT_ID ('sp_help_revlogin') IS NOT NULL
  DROP PROCEDURE sp_help_revlogin
GO
CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS
DECLARE @name sysname
DECLARE @type varchar (1)
DECLARE @hasaccess int
DECLARE @denylogin int
DECLARE @is_disabled int
DECLARE @PWD_varbinary  varbinary (256)
DECLARE @PWD_string  varchar (514)
DECLARE @SID_varbinary varbinary (85)
DECLARE @SID_string varchar (514)
DECLARE @tmpstr  varchar (1024)
DECLARE @is_policy_checked varchar (3)
DECLARE @is_expiration_checked varchar (3) 

DECLARE @defaultdb sysname
 
IF (@login_name IS NULL)
  DECLARE login_curs CURSOR FOR

      SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM 
sys.server_principals p LEFT JOIN sys.syslogins l
      ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name <> 'sa'
ELSE
  DECLARE login_curs CURSOR FOR


      SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM 
sys.server_principals p LEFT JOIN sys.syslogins l
      ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name = @login_name
OPEN login_curs

FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
IF (@@fetch_status = -1)
BEGIN
  PRINT 'Имена не найдены.'
  CLOSE login_curs
  DEALLOCATE login_curs
  RETURN -1
END
SET @tmpstr = '/* sp_help_revlogin script '
PRINT @tmpstr
SET @tmpstr = '** Generated ' + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */'
PRINT @tmpstr
PRINT 
WHILE (@@fetch_status <> -1)
BEGIN
  IF (@@fetch_status <> -2)
  BEGIN
    PRINT 
    SET @tmpstr = '-- Login: ' + @name
    PRINT @tmpstr
    IF (@type IN ( 'G', 'U'))
    BEGIN -- NT authenticated account/group

      SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' FROM WINDOWS WITH DEFAULT_DATABASE = [' + @defaultdb + ']'
    END
    ELSE BEGIN -- SQL Server authentication
        -- obtain password and sid
            SET @PWD_varbinary = CAST( LOGINPROPERTY( @name, 'PasswordHash' ) AS varbinary (256) )
        EXEC sp_hexadecimal @PWD_varbinary, @PWD_string OUT
        EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
 
        -- obtain password policy state
        SELECT @is_policy_checked = CASE is_policy_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name
        SELECT @is_expiration_checked = CASE is_expiration_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name =  @name 
 
            SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' WITH PASSWORD = ' + @PWD_string + ' HASHED, SID = ' + @SID_string + ',  DEFAULT_DATABASE = [' + @defaultdb + ']'

        IF ( @is_policy_checked IS NOT NULL )
        BEGIN
          SET @tmpstr = @tmpstr + ', CHECK_POLICY = ' + @is_policy_checked
        END
        IF ( @is_expiration_checked IS NOT NULL )
        BEGIN
          SET @tmpstr = @tmpstr + ', CHECK_EXPIRATION = ' + @is_expiration_checked
        END
    END 
    IF (@denylogin = 1)
    BEGIN -- login is denied access
      SET @tmpstr = @tmpstr + '; DENY CONNECT SQL TO ' + QUOTENAME( @name )
    END
    ELSE IF (@hasaccess = 0)
    BEGIN -- login exists but does not have access
      SET @tmpstr = @tmpstr + '; REVOKE CONNECT SQL TO ' + QUOTENAME( @name )
    END
    IF (@is_disabled = 1)
    BEGIN -- login is disabled
      SET @tmpstr = @tmpstr + '; ALTER LOGIN ' + QUOTENAME( @name ) + ' DISABLE'
    END
    PRINT @tmpstr
  END

  FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
   END
CLOSE login_curs
DEALLOCATE login_curs
RETURN 0
GO

Этот сценарий создает в базе данных master две хранимых процедуры — sp_hexadecimal и sp_help_revlogin. Выполните следующий оператор:

EXEC sp_help_revlogin

На сервере приемнике в MSSQL-сервере запустите то, что получилось в результате выполнения предыдущего пункта. (В результате выполнения предыдущего пункта мы получаем список пользователей с паролями в зашифрованном виде). Обратите внимание, что при переносе, например 1-й БД, вы можете выбрать необходимого вам пользователя, и скопировать на сервер-приемник процедуру создания только его. Например:

-- Login: ru
CREATE LOGIN [ru] WITH PASSWORD =  0x02007F515360C4E5AB450E0A4068D60F70C4A0432A5475E5759FEF6065A1B47864A97371D20E8D303ED276F99729DBFABCE794577538011781A339CB7DD872C6DF6E1FAA8C1180D  HASHED, SID = 0x97B8B460BB33F84F8F1252B970CAE64F, DEFAULT_DATABASE = [master], CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF

Этот материал был полезен?