Как включить hyper v на windows server 2019

Мы размещаем PHP-приложения в Windows (вместо Linux)

Мое эго .cz

Мы размещаем PHP-приложения в Windows (вместо Linux)

Хостинг для Windows и хостинг для Linux (для PHP)

Хотя лично я тоже предпочитаю рабочие столы Windows (и приложения для них), в течение многих лет я использовал только и только веб-хостинг Linux для размещения приложений PHP/MySQL. Ведь до сих пор не проблема услышать «аксиому» от многих людей сервер принадлежит Linux (без добавления почему), а веб-хостинг Windows они вообще не рассматривают.

Преимущества хостинга Windows 2008 Server

Вам может быть предложено переключиться на хостинг Windows:

  • необходимо использовать базы данных, отличные от MySQL, например Microsoft SQL Server 2008, которые имеют лучшие возможности программирования,
  • необходимо одновременно запускать приложения PHP и ASP.NET на одном сервере,
  • если вы хотите разместить большое количество доменов, и поэтому вам стоит иметь физический или виртуализированный собственный сервер, но вам (как и большинству людей, программирующих на Windows) проще администрировать Windows 2008 Server, чем например Gentoo Linux,
  • значительная неудовлетворенность (подтвержденная опытом) недорогими LAMP-хостингами с «неограниченным» количеством доменов, которые кажутся неограниченными во всем, но стоят вам много нервов и ненужных усилий, поскольку результат,
  • необходимо влиять на настройки сервера, которые не предлагает общая платформа LAMP,
  • простое управление сервером и приложениями с рабочего стола Windows и мобильного телефона,
  • использование приложений, знакомых вам по рабочему столу (файловый менеджер, редактор и т. д.), а также для работы на сервере,
  • стабильная система и «непрерывные» таблицы MySQL, какими мы их знаем, вероятно, из всех общих веб-хостингов LAMP.

Поэтому, если вы программируете в Windows (будь то XP, Vista или Windows 7), это, вероятно, будет для вас более приемлемым.собственное администрирование сервера, чем SSH Командная строка GNU Linux:

В случае хостинга Windows, благодаря технологии виртуализации Microsoft Hyper-V , вы можете выбрать не только относительно дорогие физические серверы, но и виртуальные серверы , аналогичные Linux. Он включает в себя выделение физической части ОЗУ, вычислительного времени процессора и дискового пространства для вашей виртуализированной «машины», которая затем выглядит как физическая машина, и поэтому вы можете влиять на ее настройки на 100%.

Текущая рыночная цена виртуализированного сервера Hyper-V ( VPS ) в Чехии с выделенным 1 ГБ ОЗУ, 50 ГБ дискового пространства, неограниченной точностью в рамках NIX и лицензией на Windows 2008. Стандартный сервер стоит около 1000 чешских крон плюс НДС в месяц. Такие программы веб-хостинга VPS предлагают ASPone, Active24, Чехия, Forpsi и другие. При такой цене это обычно не «управляемые» серверы, поэтому необходимо активно их администрировать — отслеживать проблемы безопасности, журналы, регулярно устанавливать обновления безопасности, настраивать правильный брандмауэр, обновлять PHP — это работа для вас.

Учитывая, что на VPS-сервере можно развернуть десятки собственных доменов или клиентских доменов, это разумная сумма, которая в итоге ниже, чем оплата, например, 20 х 150 крон за обычный чешский «LAMP». веб-хостинг», который взимает плату за каждый домен отдельно.

Легкое администрирование сервера из любого места с помощью Remote Desktop Mobile на телефонах Windows Mobile (его также можно использовать на скоростях GPRS) может быть значительным преимуществом:

Недостатки хостинга Windows 2008 Server

Основные недостатки хостинга Windows для запуска существующих PHP-приложений:

  • часть авторов PHP-скриптов, размещенных на Windows вообще не считается — например, почти ни одно приложение не может работать с$_SERVER[«UNENCODED_URL»] , которая представляет собой переменную, содержащую URL-адрес до его изменения с использованием версии Microsoft «mod rewrite» на IIS7, некоторые приложения работают без изменений только под Apache — в дистрибутиве большинства приложений PHP с открытым исходным кодом вы найдет только .htaccess (для Apache 2.x) вместо эквивалентного web.config для IIS 7.x,
  • некоторые приложения полагаются на старый FilesMatch (вместо mod_rewrite) в .htaccess, и вам нужно будет изменить их,
  • некоторые из расширений PHP сами по себе могут быть скомпилированы как библиотеки DLL для Windows, но ни один из их авторов не тестировал их должным образом таким образом, и они в основном нестабильны (пока они находятся в Linux).

В целом, если это ваши PHP-скрипты, новая разработка или несколько существующих скриптов с открытым исходным кодом, обычно несложно устранить эти возможные несовместимости, но если вы работаете с большим количеством различных скриптов, и вы не хотите тестировать каждый по отдельности, вам будет проще оставаться на платформе LAMP.

Конечно, установка Apache в Windows 2008 в качестве веб-сервера (вместо IIS) решает некоторые из этих проблем, но вы теряете возможность размещать приложения ASP.NET.

Второй (и лучший) вариант заключается в том, чтобы Apache, IIS7, MySQL и SQL Server 2008 Express работали в упомянутом 1 ГБ выделенной памяти сервера VPS (большинство веб-хостов предлагают 2 или более IP-адреса для одного VPS). Это может легко покрыть переходный период, а перенос сценария с Apache на IIS будет выполнен по более разумному графику.

Читайте также:  Как подключиться удаленно к centos с windows

Практический опыт миграции LAMP -> Windows

При перемещении веб-сайтов с платформы LAMP на Windows 2008 Server с IIS (и без Apache) я перенес приложения на основе 7 различных платформ — BLOG:CMS, F-ART:CMS, форум PunBB, IP.Board, Mantis BugTracker, Фотогалерея Сингапура и «Докувики». Тестирование совместимости и необходимые программные модификации в коде PHPв данном случае речь шла примерно о 10 часах работы.

Выбрать правильный дистрибутив PHP и особенно ускоритель было сложнее, но об этом ниже.

Приложение PHP в Windows 2008 Server / IIS7

Установка IIS

Первым шагом для переноса приложений с Linux/Apache на /img/hosting/IIS, конечно же, является установка собственного веб-сервера. IIS 7.0 присутствует в Windows Vista и Windows 2008 Server, IIS 7.5 — в Windows 7 и Windows 2008 Server R2. Установка означает запуск опции « Включить или отключить функции Windows » и здесь выбрать Информационная служба Интернета и связанные с ней функции, включая CGI (которая также установит необходимый FastCGI):

Переписать URL

Далее вам нужно загрузить и установить поддержку «перезаписи модов», как мы знаем из Apache. Здесь есть два модуля: один предлагается Microsoft бесплатно под названием Модуль перезаписи URL, другой доступен на коммерческой основе (99 долларов США за сервер) от Helicon Tech под названием ISAPI/REWRITE/3.

Оба модуля имеют свои преимущества и недостатки — модуль Microsoft всегда работает с конфигурационным файлом сервера IIS 7 для данного веб-сайта, т.е. web.config, но может импортировать большинство правил, содержащихся в существующем файле .htaccess. из конфигурации для Apache mod_rewrite сразу в этот файл модуля.

Вот как записывается файл .htaccess (из PHP-фреймворка Nette):

Преобразует фильтр импорта модуля перезаписи URL в эквивалентную запись в web.config:

ISAPI/REWRITE/3 ведет себя по-другому — он позволяет IIS обрабатывать обычные файлы .htaccess из Apache. Вам не нужно их как-либо модифицировать, достаточно скопировать приложение в каталог inetpub и просто запустить его, подавляющее большинство правил совместимы (см. эту таблицу) и обработаны.

Оба модуля перезаписи URL ведут себя немного по-разному при взаимодействии с PHP.Модуль перезаписи URL-адресов Microsoft помещает URL-адрес перед его перезаписью в $_SERVER[«UNENCODED_URL»] , а модуль Helicon Tech — в $_SERVER[«HTTP_X_REWRITE_URL»] . Также может быть хорошей идеей изменить на для Apache mod_rewrite.

Я лично рекомендую использовать только модуль Microsoft URL Rewrite и импортировать правила .htaccess.

Установка PHP

PHP в основном работает под интерфейсом FastCGI в IIS, а не в ISAPI. Это самый быстрый и поддерживаемый Microsoft. Этот интерфейс обеспечивает потокобезопасную среду, поэтому вы можете загрузить не ориентированную на потоки версию PHP с PHP.net (она работает быстрее, чем версия TS). Версия PHP 5.3 (и выше) идеальна, потому что она, наконец, изначально скомпилирована в Visual Studio 2008 (VC9), тогда как PHP 5.2 и старше официально поддерживались только Visual C++ 6.0 1998 года.

Однако для разработки не загружайте двоичные файлы PHP с PHP.net, для Windows существует значительно более производительное решение — коммерческий Zend Server или его бесплатная альтернатива Zend Server Community Edition (CE ).

Zend Server CE включает, помимо обычных расширений PHP, другие важные компоненты — Zend Debugger, Zend DataCache и Zend Optimizer+ . Zend Optimizer+ — это расширение, которое компилирует исходный PHP-код в байт-код, а также оптимизирует код, а затем сохраняет этот опкод в памяти, что на практике означает ускорение работы вашего приложения в несколько раз.

Кроме того, Microsoft тесно сотрудничает с Zend, поэтому ее решение не только быстрое, но и стабильное, проверенное и де-факто единственное, рекомендованное для производства в Windows.

Я также тестировал другие «ускорители PHP» (+бинарные файлы с PHP.net) на Windows, но будь то eAccelerator, XCache или APC, долгосрочный результат всегда был одинаковым — нестабильность . Эти расширениямогут быть скомпилированы для Windows, но, видимо, никто не тестировал их должным образом на Windows, и они не работают под нагрузкой.

Поэтому на практике вам потребуется Zend Server CE, доступный бесплатно, в версии с PHP 5.3. Сама установка Zend Server выполняется одним щелчком мыши, а также вносятся все необходимые корректировки в конфигурацию IIS для поддержки PHP. Единственное, что вам нужно будет добавить, это добавить новый тип для «Документа по умолчанию» — index.php и настроить php.ini .

Незначительная проблема с Zend Server, возможно, заключается в том, что он скомпилирован с помощью Visual Studio 2005 (VC8), в то время как большинство внешних расширений PHP (DLL) скомпилированы со старой VC6 или, наоборот, с новой VC9. Это, например, драйвер SQLSRV для PHP , т.е. родной драйвер от Microsoft для доступа к SQL Server 2008. Впрочем, скомпилировать это расширение под VC8 не проблема, в этой статье показано как.

Миграция базы данных: MySQL -> SQL Server 2008

База данных MySQL для Windows существует и хорошо работает. На практике за 6 месяцев эксплуатации 10 сайтов с IIS 7/MySQL 5.1 на хостинге Windows я не столкнулся ни с одной проблемой (используются как таблицы MyISAM, так и InnoDB), а на различных серверах виртуального хостинга с повреждением в частности MyISAM таблицы или индексы были еженедельным явлением.

Читайте также:  Как сгенерировать ssl сертификат для windows

Однако выбранный хостинг Windows дает прекрасную возможность начать использовать лучшие механизмы баз данных, чем MySQL, в частности SQL Server 2008. Он доступен бесплатно в версии SQL Server 2008 Express с расширенными службами даже для коммерческого использования (однако , он ограничен максимальным объемом ОЗУ 1 ГБ и размером базы данных 4 ГБ, см. сравнение выпусков). SQL Server 2008 — это база данных, которая хорошо масштабируется, стабильна и может быть запрограммирована намного лучше, чем MySQL. Инструменты настройки производительности — SQL Server Profiler и Database Engine Tuning Advisor — также превосходны. Это для управления базами данных и разработкибесплатное приложение SQL Server Management Studio .

Для связи SQL Server 2008 с PHP в стандартную версию PHP интегрирован ряд старых, медленных и устаревших расширений (а именно MSSQL, PDO_MSSQL и ODBC), а затем функциональные, быстрые и обновленные Драйвер SQL Server 1.1 для PHP, относительно новый от Microsoft, опубликованный на Codeplex под лицензией с открытым исходным кодом. Для использования с Zend Server CE вам необходимо скомпилировать его с VC8 или загрузить двоичный файл здесь (Microsoft предоставляет только двоичные файлы VC6 и VC9).

Этот драйвер представляет новые функции sqlsrv для PHP, документация по которым доступна на MSDN. Он взаимодействует с SQL Server, начиная с версии 1.1, напрямую через собственный клиент SQL Server 2008 , т. е. самым быстрым способом.

При переносе уровня базы данных вашего приложения и его адаптации с MySQL на SQL Server 2008 и функции sqlsrv вам необходимо знать как минимум следующие отличия:

Нет LIMIT start,offset

SQL Server 2008 не поддерживает пейджинг в запросах SQL SELECT, т. е. команду LIMIT start, offset (аналогично, ни Oracle, ни Sybase этого не предлагают), которая очень часто используется в Интернете. Он поддерживает только эквивалент LIMIT 0, смещение в форме SELECT TOP x. Однако не проблема написать свою собственную разбивку на страницы, используя функцию ROW_COUNT(), которая возвращает номер текущей строки в соответствии с указанным порядком в OVER (ORDER BY . ).

На практике самый простой способ перехода с MySQL на SQL Server 2008 — это написать функцию на уровне базы данных, которая преобразует исходный SQL-запрос во вложенный подчиненный SELECT в следующей форме:

С такой функцией вы можете использовать синтаксис запросов MySQL, и они будут правильно переведены для разбиения на страницы SQL Server.

По умолчанию буферизованный запрос не используется, поэтому мы даже не знаем количество записей

MySQLбаза данных неявно использует буферизованный запрос, который сначала передает все результаты запроса клиенту (PHP), а затем можно использовать функцию mysql_num_rows() для их суммирования.

Драйвер PHP для SQL Server 2008, с другой стороны, по умолчанию использует более быстрый небуферизованный запрос (точно так же, как интерфейс OCI8 для Oracle). Если вам нужно знать количество строк в коде заранее, то рекомендую переписать его, т.к. это обычно не является абсолютно необходимым, и часто бывает достаточно одного лишнего условия ЕСЛИ, либо можно посчитать количество строк при прохождении кода. WHILE цикл для FETCH, когда вы знаете число в конце цикла.

Подсчет количества элементов вперед на 99% является ошибкой программирования. В большинстве случаев вам даже не нужен счетчик, а что-то вроде «has_rows()», т. е. если количество строк >0.

Если вам по-прежнему нужно количество элементов запроса, в драйвере 1.1 представлены функции sqlsrv_num_rows и sqlsrv_has_rows. Однако, чтобы использовать первый, вы должны ввести данный SQL-запрос с параметром «Scrollable» => SQLSRV_CURSOR_KEYSET , т.е. использовать (по сравнению с небуферизованным запросом медленнее) курсор базы данных. Альтернативой, конечно, является использование SELECT COUNT(*) FROM .

Набор символов и подключение к базе данных

Типы данных nvarchar, ntext и другие используют кодировку UCS2LE внутри SQL Server. Драйвер PHP для SQL Server по умолчанию предоставляет такие данные в формате UTF16LE , но если вы используете параметр «CharacterSet» при подключении к базе данных => «UTF-8» , поэтому он будет преобразовывать их из/в UTF-8 как на входе, так и на выходе.

Подключение к SQL Server 2008 с автоматическим преобразованием данных в UTF-8 может выглядеть в PHP следующим образом:

Номер последней вставленной записи с автоинкрементом

Поле с автоматически увеличивающимся порядковым номером называется в SQL Server не AUTOINCREMENT, как в MySQL, а IDENTITY. Вы можете легко изменить его значение в SQL с помощью команды dbcc.чекидент .

Для последнего значения IDENTITY, сгенерированного INSERT INTO , нет специальной PHP-функции, как в MySQL – mysql_insert_id() , но вы можете получить ее с помощью этого SQL-запроса:

Отладка при разработке

При разработке рекомендуется включить максимальный уровень ведения журнала с помощью команды:

Скорость запроса

Планирование запросов в SQL Server 2008 работает иначе, чем в MySQL, поэтому особое внимание следует уделить структуре индексов и представлений. Замечательно, что в SQL Server 2008 есть качественные средства мониторинга и отладки.

Я рекомендую всегда включать SQL Server Profiler во время разработки и, возможно, через некоторое время также ознакомиться с рекомендациями приложения Database Engine Tuning Advisor . Эти инструменты в SQL Server 2008 Web/Standard/Enterprise легко обнаруживают критические проблемы проектирования БД уже во время разработки.

Однако не очень хорошо применять рекомендации Database Engine Tuning Advisor в массовом порядке (их могут быть сотни). Часто лучше переписать запрос и, возможно, вручную создать индексы для таблиц и просмотреть их план выполнения в Microsoft SQL Server Management Studio.

Читайте также:  Windows 10 как удалить viber с компьютера

Триггеры используют временные таблицы «insert» и «delete»

В SQL Server 2008 нет триггеров BEFORE INSERT , таких как MySQL или Oracle. Решается другой логикой — триггером AFTER INSERT , работающим со вспомогательными таблицами вставленными (или удаленными ), имеющими ту же структуру, что и таблица над которыми активировался триггер, и содержат вставленные (или удаленные) записи.

В триггере вы также можете обновить саму таблицу, вызвавшую триггер, что не является правилом для других подходов. Курсоры в T-SQL здесь работают аналогично Oracle в PL-SQL.

Небольшой пример триггера AFTER INSERT с ( несколько ненужным, но это прежде всего пример ) использованиякурсор — после вставки комментария таблица статей обновляется со статистикой количества комментариев и датой последнего обсуждения, комментарию присваивается его порядковый номер в рамках обсуждения:

КЛАСТЕРНЫЕ индексы для первичного ключа не всегда подходят

Хорошо подумайте, хотите ли вы сделать ПЕРВИЧНЫЕ индексы КЛАСТЕРНЫМИ, а это значит, что на сортировку в индексе потом будет влиять физический порядок записей на диске, если в таблице миллионы записей и вы немного модифицируете одно значение, SQL Server выполнит множество ненужных операций ввода-вывода.

Это значение по умолчанию для первичного ключа, если вы создаете его с помощью SQL Server Management Studio.

Тип Datetime возвращает не varchar, а объект DateTime

Если у вас есть элемент datetime в базе данных, в MySQL он возвращает тип данных string во время SELECT (и SQLite ведет себя аналогично), однако в SQL Server он возвращает тип данных объект типа DateTime , с которым также можно работать в PHP, например, с помощью метода —>format(), см. документацию.

Для работы с датами в SQL Server есть очень удобная функция DATEADD, с первым параметром час, день, месяц и т.д., так что можно легко заменить функции DAY(), MONTH() и другие из MySQL .

Вывод

В этой статье представлены основные моменты переноса приложений из среды LAMP в комбинацию Windows 2008 Server + IIS 7.0/7.5 + Zend Server CE (PHP 5.3) + SQL Server 2008 + драйвер SQLSRV.

Я лично доволен этой комбинацией, потому что после многих лет работы с Linux/Apache она обеспечила мне абсолютно беспроблемную работу, действительно простое администрирование сервера с рабочего стола Windows и телефона и, наконец, значительную экономию средств. Перенос части логики из PHP в обработку транзакций на уровне базы данных (Transact-SQL), в свою очередь, означал 100% целостность данных и более высокую производительность приложения (да, я убежден, что критическаяобработка данных должна происходить как можно ближе к месту их хранения, т.е. в базе данных, и обязательно транзакционно).

Хотя большинство людей размещают PHP-приложения на Linux/Apache, Windows 2008 Server/IIS7 также зарекомендовала себя как отличная платформа для PHP-приложений.

Комментарии

  1. 1 Шимон Штефан 05.12.09, 13:57:27

Установщик веб-платформы можно использовать для установки PHP в Windows. Помимо самой установки IIS с поддержкой PHP, WPI включает в себя набор приложений PHP (например, Drupal) и поддержку баз данных. Дополнительная информация здесь: http://www.microsoft.com/web/Downloads/platform.aspx.

Я также использую установщик веб-платформы, но в настоящее время существует досадная ошибка, которая не позволяет установить SQL Server Query Manager в VS2010.
Что касается режима перезаписи, я также хотел бы упомянуть, что Asp.net 4.0 уже позволяет маршрутизацию URL-адресов, аналогичную ASP MVC.

У Zend Server нет 64-битной версии для Windows? Жаль.

Здравствуйте. Я решил мигрировать с Linux/Apache на Win2008/IIS весной, как только Ignum начал предлагать эту возможность. До сих пор считаю это едва ли не лучшим решением в своей работе в ИТ за последние лет 5 или около того. Стабильность и производительность выше ожиданий. Раньше я тратил время на управление сервером (VPS на SuSe), а теперь могу посвятить программированию и созданию контента. По сравнению с Радеком я консервативно остановился на MySQL из соображений обратной совместимости и лени. Однако я использую 64-битную версию базы данных. PHP пока в версии 5.2.9-2, собираюсь на 5.3 и сразу с каким-нибудь ускорителем, наверное WinCache. Только встроенный FTP-сервер, в плане администрирования и учетных записей, на мой взгляд, не очень удался для Microsoft.

А у меня вопрос, с другой точки зрения, но не по теме. Пользуюсь HTC Touch HD около года. Как и все остальные, я упускаю из виду потенциального преемника, которым в настоящее время является HD2. Мое прикосновение HDявляется, как известно любому, у кого он есть, очень удобным бездельником, когда дело доходит до отклика системы. HD2 уже должен был быть достаточно мощным и быстрым. Но емкостной дисплей меня отпугивает, мне иногда нужно получить доступ к своему серверу через удаленный рабочий стол и через VNC к двум другим, которые предоставляют услуги для веб-камер и термометров. Когда я увидел ролики, показывающие работу с удаленным рабочим столом на HD2, я боюсь, что если сказать в двух словах, то вместо Log Off не нажму Shut Down 🙂 Вот и интересно, какой опыт у автора .

[4] Удаленный рабочий стол можно использовать на HD2 в экстренных случаях, но на самом деле в экстренных случаях. Здесь Touch HD с резистивным дисплеем и стилусом удобнее и быстрее в использовании. Я бы не рекомендовал обновляться для RD, но почти для всего остального я бы рекомендовал.

Поделиться с друзьями
ОС советы