Статья давно не обновлялась, поэтому информация могла устареть.
Содержание |
Установка IIS
Для начала нашему серверу необходимо добавить роль Web-сервера. Для добавления открываем Server Manager, и в меню Manage жмем Add Roles and features:
Откроется мастер добавления ролей и компонентов. Жмем Next Installation Type, выбираем Role-based or feature-based installation. Next:
Server Selection - выбираем наш сервер. Жмем Next Server Roles, выбираем Web-Server IIS, мастер предложит добавить необходимые компоненты. Жмем Add features:
Features - помимо уже отмеченных служб, отмечаем ASP.NET жмем Next
Попадаем на страницу выбора служб ролей - 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
Проверить, что 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, смотрим, что все проверки пройдены успешно
В разделе Installation выбираем New SQL Server stand-alone installation or add features to an existing installation
Попадаем в раздел Product Updates, программа-установщик обнаружит доступные обновления и предложит установить их, жмем кнопку Next
Читаем лицензию, принимаем условия лицензионного соглашения, нажимаем кнопку Next Выбираем компоненты для установки, можно выбрать все, кнопкой Select all
На вкладке Instance configuration выбираем опцию Default instance
Выбрать опции, как показано на рисунке
На следующей вкладке выбираем параметр Mixed mode и задаем пароль для встроенной учетной записи администратора «sa» (эта учетная запись обладает максимальными правами доступа ко всем функциям и объектам на SQL-сервере). Дополнительно можно указать учетные записи пользователей Windows или целые группы пользователей Windows, которые должны обладать максимальными правами доступа к SQL Server
После во всех вкладках оставляем все по-умолчанию, и осуществляем установку.
Установка 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
В столбце Path ищем *.php, если находим, то нажимаем Edit, если нет, то Add Module Maping и создаем новый модуль обработки, настройки должны быть как на скриншоте ниже:
Проверяем работу 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 такой же как на сервере источнике:
Восстанавливаем пулы следующей командой
"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
Появляется диалоговое окно, в котором следует отсоединить БД, если к БД в момент проведения процедуры есть подключения, их следует удалить, поставив галочку в столбце Drop Connection. После отсоединения переносим файлы БД на целевой сервер (как правило, файлы БД лежат по пути C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA.
Присоединение базы данныx
Подключаемся к MSSQL-серверу на сервере-приемнике. Правой кнопкой нажимаем на Databases и выбираем пункт Attach... В появившемся диалоговом окне указываем файлы БД, которые перенесли.
Особенность переноса БД в 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