Последнее время многие из наших клиентов сталкиваются с различного рода проблемами при развертывании своего сайта на виртуальном сервере с ОС 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) и запускаем. Нам понадобится установить сервер и редактор.








Приступаем к настройке. Разработчики MySQL рекомендуют использовать тип конфигурации «Server Machine» при установке MySQL на сервере, на котором также будет запущен и веб-сервер. Данная опция в первую очередь влияет на объем потребляемой памяти. Снимаем флаг с «Open Firewall port for network access», так как веб-сервер будет также находится на данном сервере, а работать с бд мы будем с помощью локального визуального редактора бд MySQL Worbench, который мы также установили на данный сервер. На следующем окне создаём пользователя wp. Под этой учетной записью наш сайт будет работать с базой данных.




На всех следующих окнах просто жмем «Next». На данный момент предлагаемые там настройки по умолчанию нам подойдут.





В файле конфигурации 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:






Готово!

Установка IIS+ PHP + FastCGI



Устанавливаем IIS
Сейчас нам требуется установить IIS с модулем FastCGI. Открываем панель управления сервером и кликаем «Add new roles and features»:




Теперь нам необходимо активировать службу CGI (вместе с ней активируется и модуль FastCGI)








Устанавливаем 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



Сначала настроим обработчик для запросов к вашему сайту.




Теперь необходимо произвести некоторые настройки модуля FastCGI.





Настроим документ по умолчанию:





Теперь создадим сайт в IIS. Сначала удалим сайт по умолчанию (Default Web Site).






Наш сайт готов. Но прежде, чем пытаться получить к нему доступ по http, нам необходимо открыть 80 порт TCP.
Открываем оснастку firewall.cpl и добавляем соответствующее правило для входящих подключений:









Правило добавлено!

Далее создадим файл test.php со следующим содержимым:

<?php
phpinfo();


Поместим этот файл в корневую директорию вашего сайта (c:\inetpub\wwwroot\wordpress) и откроем в браузере ваш «сайт»: ip_вашего_сервера
Должны получить примерно следующее:



Удаляем файл test.php. Теперь можно наконец-то устанавливать Wordpress.

Установка Wordpress



Скачиваем Wordpress (wordpress-4.5.2-ru_RU.zip).
Распаковываем архив и копируем содержимое папки wordpress в нашу корневую директорию (c:\inetpub\wwwroot\wordpress).
Теперь предоставим права на запись в директорию c:\inetpub\wwwroot\wordpress и её поддиректории группе IIS_USRS



Открываем в браузере наш сайт по адресу ip_вашего_сервера и идём по шагам установки:







Авторизуемся и попадаем в личный кабинет CMS Wordpress!



Теперь откроем главную страницу по адресу ip_вашего_сервера.



Задача решена!
Поделиться с друзьями
-->

Комментарии (27)


  1. kireevco
    07.06.2016 21:03
    +9

    Ума не приложу, какие могут быть причины для развертывания приложения прекрасно работающего под *nix на таком монстре как Windows Server? Как минимум это переплата за лицензию Windows, а то и более — извращение.


    Из конкретного: расскажите, как при данной настройке себя ведет регистро-зависимый код и база данных MySQL?


    1. ruvds01
      07.06.2016 22:52
      +1

      Уважаемый kireevco. Вопрос про то, как ведёт себя база данных с такими настройками сформулирован не слишком конкретно.
      Уточните, пожалуйста, что вы имеете ввиду?


      1. kireevco
        07.06.2016 23:28

        Простая ситуация. Дамп MySQL взят с shared хостинга. Префикс таблиц FooBARwp_. Как оно заработает на MySQL под Win?


        1. ruvds01
          09.06.2016 15:44

          Заработает хорошо. Все имена таблиц будут приведены к «lowercase» виду, так как lower_case_table_names=1 (при попытке запуска с lower_case_table_names=0 mysql — сервер на Windows выдаст ошибку )


    1. Alexufo
      08.06.2016 00:40
      +1

      многие виндовые vps дешевле (как минимум так же + 100mb к каналу, на линуксе я не нашел с каналом 200).


      1. kireevco
        08.06.2016 00:46

        Ну как же, винда стоит денег, *nix нет, отсюда и математика.
        Почему VPC дешевле — даже интересно, взглянуть бы на расчеты и производительность :)


        1. Alexufo
          08.06.2016 00:51

          Да эта математика штука странная. https://ultravds.com/ премиум вкладка. Из за проца пришлось выбирать этот хостигнг.


    1. selivanov_pavel
      09.06.2016 13:54
      +1

      — отсутствие в данной конторе спецов по *nix
      — сохранение единообразия стека технологий. Допустим, все остальные сервера работают под виндой. Linux-машину потребуется интегрировать с системами мониторинга, бекапа, с AD для единого входа, с SIEM(если используется).


  1. rockin
    07.06.2016 21:27
    +10

    o_0
    Как мне эту презентацию из окошек развидеть?

    Я админю и винду, и линукс… и мне совершенно не понятно, зачем на монстра в виде виндузсервера ставить веб-компоненты для несчастного вордпресса, который на любой самой дешевенькой линуксовой виртуалке будет просто летать…
    Если только в качестве эксперимента…


    1. kireevco
      07.06.2016 23:29

      Вспоминаются старые добрые времена, когда я пытался понять мир Microsoft… Скриншоты по названиям:


      • Нажмите далее
      • Нажмите далее
      • Нажмите готово


  1. oxidmod
    07.06.2016 22:08
    +1

    ну например когда основное приложение крутится на вин сервере и нужно дополнительно бложик развернуть. зачем покупать даже копеешную виртуалку, когда сервер уже есть


    1. rockin
      07.06.2016 22:51
      -2

      когда основное приложение крутится на винде, берём hyper-v, втыкаем туда дебиан/убунту/центос и ставим туда свой любимый бложик
      это тру-вей

      а городить невесть что…
      не, я такое пробовал. и понял, что веб-сервер — это линукс, а винда как веб-сервер подходит для интранета, внутренних порталов, завязанных на шарепойнте (и т.д.). и апач там совершенно не нужен, ведь есть iis

      страшна ситуация, когда косяки в стороннем, дополнительном, ПО кладут сервер вместе с «основным приложением»


      1. Permyakov
        08.06.2016 10:27

        Гиперви не встанет на VPS. Автор писал об этом выше.


        1. rockin
          09.06.2016 00:01

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


  1. Shaz
    07.06.2016 22:45
    +7

    Потому что у этой компании нету VPS на Linux на данный момент, а писать в блог о чем-то нужно.


    1. kireevco
      07.06.2016 23:26
      +1

      Вот оно в чем дело...


    1. ru_vds1
      07.06.2016 23:48
      -4

      Уважаемый Shaz, в ближайший месяц у нас появится услуга аренды VPS на Linux.


    1. rockin
      09.06.2016 00:16

      ну и написали бы, как 1с предприятие в терминальном режиме закрутить, да ещё желательно предложить для сего безобразия нероссийский айпи.

      это же последнее время у мелких организаций ппц как актуально, все хотят спрятаться от лап куда подальше


      1. ruvds01
        09.06.2016 14:06

        Уважаемый rockin, спасибо за ваш комментарий! Мы обязательно учтём ваши пожелания при написании следующих статей.


  1. web2033
    07.06.2016 23:08
    +1

    как вариант, будет актуально
    linux + nginx + php7 + mariaDB + HTTPS


  1. Alexufo
    08.06.2016 00:42

    Закройте порт 3306 во внешку :-) если не хотите ботов из китая) Тут недавно всплыло у меня)

    и кстати через Microsoft's Web Platform Installer все это ставить куда быстрее


    1. kireevco
      08.06.2016 03:25
      -1

      Хотел написать

      Fail2ban не помогает?


      Но забыл — Windows.

      ИМХО Windows вообще годна только для работы .net кода в частной сети. Все остальные функции лучше отдать файрволлам и балансировщикам нагрузки.


  1. samodum
    08.06.2016 02:16

    Вопрос №1:
    Сколько всё это будет стоить, скажем, в месяц?
    После этого можно вести речь о целесообразности использования Windows Server


    1. Alexufo
      08.06.2016 09:30
      +1

      У линукса vps не сильно дешевле.
      https://habrahabr.ru/company/ruvds/blog/302846/#comment_9647516


    1. ru_vds1
      08.06.2016 11:01

      Уважаемый samodum,
      в начале статьи указана конфигурация: 2CPU, 2GB RAM, 20GB SSD.
      У нас эта конфигурация стоит 800 рублей в месяц или 560 рублей в месяц при оплате за год сразу (скидка сейчас 30%).
      Данные цены на сервера на Windows являются самыми низкими на рынке, а в большинстве случаев, эта цена ниже даже цены сервера на Linux.


  1. ExplosiveZ
    08.06.2016 10:18
    +2

    Habrahabr 2016.


  1. elliadan
    08.06.2016 11:36

    А я внезапно нашел для себя возможное объяснение тех, кто любит хвалить «простоту» Linux и сетовать на якобы «сложность» Windows (в кавычках специально, т.к. такие категоричные оценки я не разделяю). Человек, мало знакомый с мат.частью, прочитав вот такое поделие статьи, с большой вероятностью скажет «да в Linux это делается тремя командами ха ха ха» и ведь будет прав. Огорчает то, что подобные статьи неким образом как бы «очерняют» репутацию программных продуктов от MS. Я не адепт ни той, ни другой стороны, т.к. для каждой задачи есть свой инструмент, но статья больше похожа на «Как забивать гвозди микроскопом, который вы можете купить у нас за 800 рублей в месяц».

    Статье для спасения (или шанса на спасение) очень не хватает описания преимуществ решения в сравнении с аналогами.