![](https://habrastorage.org/files/95f/6d8/537/95f6d85371674603b5f0668a4e2bb70f.png)
Последнее время многие из наших клиентов сталкиваются с различного рода проблемами при развертывании своего сайта на виртуальном сервере с ОС Windows Server 2012 R2. В связи с этим мы приняли решение написать максимально подробное руководство, в котором пользователи смогут найти ответы на свои вопросы.
В данном руководстве мы развернём WordPress на связке IIS + PHP + MySQL, а также приведём некоторые рекомендации по настройке каждого из этих компонентов. Делать это мы будем на VPS от RUVDS с конфигурацией 2CPU, 2GB RAM, 20GB SSD. Итак, приступим…
Установка и настройка MySQL
Сначала устанавливаем распространяемые пакеты для Visual Studio 2013 (https://www.microsoft.com/ru-ru/download/details.aspx?id=40784)
Далее скачиваем установщик MySQL отсюда (mysql-installer-community-5.6.28.0.msi) и запускаем. Нам понадобится установить сервер и редактор.
![](https://habrastorage.org/files/9dc/2b3/ced/9dc2b3cedc614eeda76151ed5a8823c9.jpg)
![](https://habrastorage.org/files/7b3/19b/330/7b319b330b2445f182290bc23a702e6b.jpg)
![](https://habrastorage.org/files/460/897/b79/460897b798f944e0909579a10788b0a6.jpg)
![](https://habrastorage.org/files/893/9a9/cb6/8939a9cb6cef426ba69e49f250899680.jpg)
![](https://habrastorage.org/files/f01/5fd/1a9/f015fd1a91a34091bafe18821786b83c.jpg)
![](https://habrastorage.org/files/08b/c89/21c/08bc8921c3d14f3c90c78459a2acea77.jpg)
Приступаем к настройке. Разработчики MySQL рекомендуют использовать тип конфигурации «Server Machine» при установке MySQL на сервере, на котором также будет запущен и веб-сервер. Данная опция в первую очередь влияет на объем потребляемой памяти. Снимаем флаг с «Open Firewall port for network access», так как веб-сервер будет также находится на данном сервере, а работать с бд мы будем с помощью локального визуального редактора бд MySQL Worbench, который мы также установили на данный сервер. На следующем окне создаём пользователя wp. Под этой учетной записью наш сайт будет работать с базой данных.
![](https://habrastorage.org/files/53a/dea/6ed/53adea6ed3d84ce9b1813876621c07ba.jpg)
![](https://habrastorage.org/files/93f/eea/4c1/93feea4c1b65407a87d90a3b282f1a4a.jpg)
На всех следующих окнах просто жмем «Next». На данный момент предлагаемые там настройки по умолчанию нам подойдут.
![](https://habrastorage.org/files/b7c/fcc/e7f/b7cfcce7fc0d46848c1c62998760ed49.jpg)
![](https://habrastorage.org/files/514/9ad/042/5149ad042cd24ac599dcb6da5fd37d25.jpg)
![](https://habrastorage.org/files/c5c/a69/4b2/c5ca694b2c7940f7bb103455005392a6.jpg)
В файле конфигурации C:\ProgramData\MySQL\MySQL Server 5.7\my.ini добавляем поле bind-address=localhost в разделе [mysqld] для того, чтобы mysql принимал TCP-подключения только на порт кольцевого интерфейса.
Перезапускаем службу MySQL57 в оснастке управления службами services.msc
Запускаем интерпретатор командной строки (cmd.exe) и выполняем:
C:\Users\Administrator>sc queryEx MySQL57 && netstat -nao | findstr 3306
SERVICE_NAME: MySQL57
TYPE : 10 WIN32_OWN_PROCESS
STATE : 4 RUNNING
(STOPPABLE, PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
PID : 1196
FLAGS :
TCP 127.0.0.1:3306 0.0.0.0:0 LISTENING 1196
Итак, сервер запущен и слушает нужный нам порт.
Создадим бд db1, используя установленный нами MySQL Workbench:
![](https://habrastorage.org/files/050/133/ebc/050133ebce6f41e49b5286f03726ea0d.jpg)
![](https://habrastorage.org/files/e7b/d76/0b5/e7bd760b550b4fb5b0e6fe7cf7380cf9.jpg)
![](https://habrastorage.org/files/6be/bfe/242/6bebfe242d024fa8abdc1c22a3ff6e70.jpg)
![](https://habrastorage.org/files/eb6/495/233/eb64952338ca48329e3ac5dded625fdb.jpg)
Готово!
Установка IIS+ PHP + FastCGI
Устанавливаем IIS
Сейчас нам требуется установить IIS с модулем FastCGI. Открываем панель управления сервером и кликаем «Add new roles and features»:
![](https://habrastorage.org/files/647/94f/27b/64794f27b5df46a1b279f02a6b6efea4.jpg)
![](https://habrastorage.org/files/421/c11/3fb/421c113fb13448af9d4b5dbdf3eb374a.jpg)
Теперь нам необходимо активировать службу CGI (вместе с ней активируется и модуль FastCGI)
![](https://habrastorage.org/files/b56/1ee/e65/b561eee65e344140915343b293723ced.jpg)
![](https://habrastorage.org/files/de6/af2/278/de6af2278d9d41708335fa92a9e73e15.jpg)
![](https://habrastorage.org/files/ab3/34b/c38/ab334bc38d984be7b13c2417bc523329.jpg)
![](https://habrastorage.org/files/d7c/7ac/ea0/d7c7acea0c40403f9372ad592522cdcd.jpg)
![](https://habrastorage.org/files/11b/c02/14f/11bc0214f0664318a7310b3de522598c.jpg)
![](https://habrastorage.org/files/ee5/aae/acd/ee5aaeacd8e64a3ba2f3dfa783e9eabf.jpg)
Устанавливаем PHP5.6
Скачиваем php 5.6 (php-5.6.22-nts-Win32-VC11-x86.zip). Будем использовать Non-thread safe версию, так как FastCGI сам обеспечивает однопоточное выполнение.
Также для корректной работы php нам понадобиться пакет C++ Redistributable 2012 (https://www.microsoft.com/en-us/download/details.aspx?id=30679).
Распаковываем php в папку c:\PHP. Далее переименовываем файл php.ini-production в php.ini, открываем и устанавливаем следующие параметры:
cgi.force_redirect = 0 - рекомендуется отключить, так как не поддерживается IIS (http://php.net/manual/ru/security.cgi-bin.force-redirect.php)
open_basedir="c:\inetpub\wwwroot\wordpress"; - директория с вашим сайтом на wordpress
error_log = c:\PHP\php_errors.log - Лог файл, в котором будет отражена информация об ошибках
date.timezone = UTC
php_mysqli.dll - это расширение необходимо wordpress для работы с бд
Проверяем конфигурацию, выполнив в командной строке:
php -i
Создаём сайт в IIS
Сначала настроим обработчик для запросов к вашему сайту.
![](https://habrastorage.org/files/890/159/f76/890159f762ec440e817db9f058065fd1.jpg)
![](https://habrastorage.org/files/85a/486/c74/85a486c74e8d44f58fac070d75b968af.jpg)
Теперь необходимо произвести некоторые настройки модуля FastCGI.
![](https://habrastorage.org/files/f50/815/ea8/f50815ea89944725a8f17434e9d36e4d.jpg)
![](https://habrastorage.org/files/70d/cf9/433/70dcf9433db54a70b75ba6af82d955c9.jpg)
![](https://habrastorage.org/files/8e6/ba3/3ed/8e6ba33ed5454a2a98713ad128356f71.jpg)
Настроим документ по умолчанию:
![](https://habrastorage.org/files/ec2/571/402/ec25714028f34b71886c22e150dde332.jpg)
![](https://habrastorage.org/files/5fc/dc4/188/5fcdc418848b43b3ad4422e43f43d57f.jpg)
![](https://habrastorage.org/files/2c8/743/ba8/2c8743ba8f994212a7493cf1516e5c18.jpg)
Теперь создадим сайт в IIS. Сначала удалим сайт по умолчанию (Default Web Site).
![](https://habrastorage.org/files/5a0/d95/463/5a0d954631364336b958db61c4a21c64.jpg)
![](https://habrastorage.org/files/7c4/8bb/769/7c48bb7690f14a4ab088a46166dc3e1d.jpg)
![](https://habrastorage.org/files/6eb/590/6ab/6eb5906abb4f4bf5a2b8b5f48eefa230.jpg)
![](https://habrastorage.org/files/902/811/1d8/9028111d833c473195d2cae67b80e57f.jpg)
Наш сайт готов. Но прежде, чем пытаться получить к нему доступ по http, нам необходимо открыть 80 порт TCP.
Открываем оснастку firewall.cpl и добавляем соответствующее правило для входящих подключений:
![](https://habrastorage.org/files/31f/47f/a75/31f47fa75c1b44a5854003b55820d008.jpg)
![](https://habrastorage.org/files/736/c83/cc2/736c83cc2e944c859928b0d9787e2201.jpg)
![](https://habrastorage.org/files/bea/112/f44/bea112f44a1c4c44bb6f550b1b94b50f.jpg)
![](https://habrastorage.org/files/553/2fc/881/5532fc8818574a5387e6eaa461168ffb.jpg)
![](https://habrastorage.org/files/c5d/f72/351/c5df723511a54b3d81fcd2640630628f.jpg)
![](https://habrastorage.org/files/353/fe3/a2a/353fe3a2ad6d47d3b9c02455242baab2.jpg)
![](https://habrastorage.org/files/80f/215/2c6/80f2152c63864abbafa8c44fb1e1b2a1.jpg)
Правило добавлено!
Далее создадим файл test.php со следующим содержимым:
<?php
phpinfo();
Поместим этот файл в корневую директорию вашего сайта (c:\inetpub\wwwroot\wordpress) и откроем в браузере ваш «сайт»: ip_вашего_сервера
Должны получить примерно следующее:
![](https://habrastorage.org/files/f38/601/d94/f38601d94e684778bffa1fc951ddb7fc.jpg)
Удаляем файл test.php. Теперь можно наконец-то устанавливать Wordpress.
Установка Wordpress
Скачиваем Wordpress (wordpress-4.5.2-ru_RU.zip).
Распаковываем архив и копируем содержимое папки wordpress в нашу корневую директорию (c:\inetpub\wwwroot\wordpress).
Теперь предоставим права на запись в директорию c:\inetpub\wwwroot\wordpress и её поддиректории группе IIS_USRS
![](https://habrastorage.org/files/a62/8d4/b86/a628d4b86b7f4ecbb2adef4f54d63203.jpg)
Открываем в браузере наш сайт по адресу ip_вашего_сервера и идём по шагам установки:
![](https://habrastorage.org/files/219/3aa/c10/2193aac10f91420caca7b610744760f4.jpg)
![](https://habrastorage.org/files/c30/bf5/057/c30bf5057b7f45669748ebdece173ea3.jpg)
![](https://habrastorage.org/files/740/afa/613/740afa6131ca4a77bfb4190d37483f16.jpg)
![](https://habrastorage.org/files/ac1/c2d/6f8/ac1c2d6f8eee4eb9b1d326ce56304008.jpg)
![](https://habrastorage.org/files/588/59b/6d6/58859b6d692b4700abea2ef647922d35.jpg)
Авторизуемся и попадаем в личный кабинет CMS Wordpress!
![](https://habrastorage.org/files/5dc/363/d5c/5dc363d5c1a34459ad68a39dfce08fbf.jpg)
Теперь откроем главную страницу по адресу ip_вашего_сервера.
![](https://habrastorage.org/files/172/7ef/164/1727ef164a97487f9532955b5266f319.jpg)
Задача решена!
Комментарии (27)
rockin
07.06.2016 21:27+10o_0
Как мне эту презентацию из окошек развидеть?
Я админю и винду, и линукс… и мне совершенно не понятно, зачем на монстра в виде виндузсервера ставить веб-компоненты для несчастного вордпресса, который на любой самой дешевенькой линуксовой виртуалке будет просто летать…
Если только в качестве эксперимента…kireevco
07.06.2016 23:29Вспоминаются старые добрые времена, когда я пытался понять мир Microsoft… Скриншоты по названиям:
- Нажмите далее
- Нажмите далее
- Нажмите готово
oxidmod
07.06.2016 22:08+1ну например когда основное приложение крутится на вин сервере и нужно дополнительно бложик развернуть. зачем покупать даже копеешную виртуалку, когда сервер уже есть
rockin
07.06.2016 22:51-2когда основное приложение крутится на винде, берём hyper-v, втыкаем туда дебиан/убунту/центос и ставим туда свой любимый бложик
это тру-вей
а городить невесть что…
не, я такое пробовал. и понял, что веб-сервер — это линукс, а винда как веб-сервер подходит для интранета, внутренних порталов, завязанных на шарепойнте (и т.д.). и апач там совершенно не нужен, ведь есть iis
страшна ситуация, когда косяки в стороннем, дополнительном, ПО кладут сервер вместе с «основным приложением»
Shaz
07.06.2016 22:45+7Потому что у этой компании нету VPS на Linux на данный момент, а писать в блог о чем-то нужно.
ru_vds1
07.06.2016 23:48-4Уважаемый Shaz, в ближайший месяц у нас появится услуга аренды VPS на Linux.
rockin
09.06.2016 00:16ну и написали бы, как 1с предприятие в терминальном режиме закрутить, да ещё желательно предложить для сего безобразия нероссийский айпи.
это же последнее время у мелких организаций ппц как актуально, все хотят спрятаться от лап куда подальшеruvds01
09.06.2016 14:06Уважаемый rockin, спасибо за ваш комментарий! Мы обязательно учтём ваши пожелания при написании следующих статей.
Alexufo
08.06.2016 00:42Закройте порт 3306 во внешку :-) если не хотите ботов из китая) Тут недавно всплыло у меня)
и кстати через Microsoft's Web Platform Installer все это ставить куда быстрееkireevco
08.06.2016 03:25-1Хотел написать
Fail2ban не помогает?
Но забыл — Windows.
ИМХО Windows вообще годна только для работы .net кода в частной сети. Все остальные функции лучше отдать файрволлам и балансировщикам нагрузки.
samodum
08.06.2016 02:16Вопрос №1:
Сколько всё это будет стоить, скажем, в месяц?
После этого можно вести речь о целесообразности использования Windows ServerAlexufo
08.06.2016 09:30+1У линукса vps не сильно дешевле.
https://habrahabr.ru/company/ruvds/blog/302846/#comment_9647516
ru_vds1
08.06.2016 11:01Уважаемый samodum,
в начале статьи указана конфигурация: 2CPU, 2GB RAM, 20GB SSD.
У нас эта конфигурация стоит 800 рублей в месяц или 560 рублей в месяц при оплате за год сразу (скидка сейчас 30%).
Данные цены на сервера на Windows являются самыми низкими на рынке, а в большинстве случаев, эта цена ниже даже цены сервера на Linux.
elliadan
08.06.2016 11:36А я внезапно нашел для себя возможное объяснение тех, кто любит хвалить «простоту» Linux и сетовать на якобы «сложность» Windows (в кавычках специально, т.к. такие категоричные оценки я не разделяю). Человек, мало знакомый с мат.частью, прочитав вот такое поделие статьи, с большой вероятностью скажет «да в Linux это делается тремя командами ха ха ха» и ведь будет прав. Огорчает то, что подобные статьи неким образом как бы «очерняют» репутацию программных продуктов от MS. Я не адепт ни той, ни другой стороны, т.к. для каждой задачи есть свой инструмент, но статья больше похожа на «Как забивать гвозди микроскопом, который вы можете купить у нас за 800 рублей в месяц».
Статье для спасения (или шанса на спасение) очень не хватает описания преимуществ решения в сравнении с аналогами.
kireevco
Ума не приложу, какие могут быть причины для развертывания приложения прекрасно работающего под *nix на таком монстре как Windows Server? Как минимум это переплата за лицензию Windows, а то и более — извращение.
Из конкретного: расскажите, как при данной настройке себя ведет регистро-зависимый код и база данных MySQL?
ruvds01
Уважаемый kireevco. Вопрос про то, как ведёт себя база данных с такими настройками сформулирован не слишком конкретно.
Уточните, пожалуйста, что вы имеете ввиду?
kireevco
Простая ситуация. Дамп MySQL взят с shared хостинга. Префикс таблиц
FooBARwp_
. Как оно заработает на MySQL под Win?ruvds01
Заработает хорошо. Все имена таблиц будут приведены к «lowercase» виду, так как lower_case_table_names=1 (при попытке запуска с lower_case_table_names=0 mysql — сервер на Windows выдаст ошибку )
Alexufo
многие виндовые vps дешевле (как минимум так же + 100mb к каналу, на линуксе я не нашел с каналом 200).
kireevco
Ну как же, винда стоит денег, *nix нет, отсюда и математика.
Почему VPC дешевле — даже интересно, взглянуть бы на расчеты и производительность :)
Alexufo
Да эта математика штука странная. https://ultravds.com/ премиум вкладка. Из за проца пришлось выбирать этот хостигнг.
selivanov_pavel
— отсутствие в данной конторе спецов по *nix
— сохранение единообразия стека технологий. Допустим, все остальные сервера работают под виндой. Linux-машину потребуется интегрировать с системами мониторинга, бекапа, с AD для единого входа, с SIEM(если используется).