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