Розгортаємо девелоперський веб-сервер під Windows (WAMP+)

Розгортаємо девелоперський веб-сервер під Windows (WAMP+)

На певному етапі професійного розвитку мені почало не вистачати функціонала, який пропонували стандартні пакети по типу Denwer. Виникла необхідність розгортання власного девелоперського веб-сервера. В той же час, стандартне рішення LAMP (Linux-Apache-MySQL-PHP) було не зовсім зручним: основний софт (наприклад, Adobe Photoshop), необхідний для повноцінної роботи над сайтом, написаний для Windows, а перемикатися між віртуальною машиною та основною системою було б вкрай незручно.

Нещодавно трапилась гарна публікація на Хабрахабрі, у якій подані детальні і покрокові інструкції на тему, як встановити і налаштувати під Windows усі необхідні для розробки компоненти. На жаль, автор прибрав статтю в чорнетки, і доступ до неї зараз неможливий. В той самий час необхідність в матеріалі (хоча б для мене) не щезла, тому я постараюся записати увесь процес установки і налаштування необхідного софту, щоб надалі використовувати цей матеріал як керівництво.

Увесь процес установки і налаштування займає до 20 хвилин.

Система тестувалась на Windows 7 x64, а раніше — на Windows 7 x32. Для більш ранніх версій можна використовувати минулі версії Apache (наприклад, версія 2.2) і MySQL (версія 5.1 повинна працювати вже на Windows XP). Тут і далі я буду мати на увазі установку сервера на Windows 7 x64.

Після цього створюємо структуру тек під встановлені компоненти. У мене основна тека має шлях C:/WebServer/. У ній створені наступні підтеки:

  • C:/WebServer/Apache
  • C:/WebServer/MySQL
  • C:/WebServer/PHP
  • C:/WebServer/SMTP
  • C:/WebServer/Temp
    • C:/WebServer/Temp/Session
    • C:/WebServer/Temp/UploadTemp

Після цього починаємо установку компонентів веб-сервера.

Установка і налаштування Apache

Розархівуємо збережений дистрибутив серверу Apache, і копіюємо його вміст у створену нами теку Apache (у мене це C:/WebServer/Apache/). Після цього нам необхідно установити Apache як сервіс Windows, як це описано в документації. Для цього відкриваємо командний рядок від імені адміністратора, в командному рядку переходимо в теку /bin (у мене це шлях C:/WebServer/Apache/bin) і виконуємо файл httpd.exe з ключем: httpd.exe -k install. В документації є також опис інших ключів для більш тонкого налаштування сервісу.

У Windows 7 x64 командний рядок знаходиться в теці C:/Windows/System32/cmd.exe.

Командний рядок Windows

Відкриваємо файл /conf/httpd.conf і в 38-й рядку змінюємо Define SRVROOT "/Apache24" на Define SRVROOT "C:/WebServer/Apache". Додаємо в автозавантаження утиліту ApacheMonitor.exe (розташований в /bin/ApacheMonitor.exe). Перезавантажуємо Windows.

Якщо Apache не стартує, то скоріше за все зайнятий 80 порт (наприклад, скайпом). Його потрібно звільнити (наприклад, в налаштуваннях скайпу вказати робочий порт 433), або встановити інший порт для Apache.

{%%IMG_ALT2%%}

В треє повинна з'явитися іконка Apache Monitor, він використовується для керування станом сервера Apache. Тестуємо роботу: http://localhost/ повинен відкрити сторінку ApacheHaus.

Установка PHP

Архів з PHP просто розпаковуємо в папку C:/WebServer/PHP.

Установка й налаштування MySQL

Запускаємо збережений раніше дистрибутив, на етапі вибору типу установки обираємо останній варіант Custom: подивимось, що саме хоче нам запропонувати установник MySQL.

Далі обираємо із списку тільки те, що нам потрібно: у мене це сам сервер і конектор ODBC.

Обираємо в списку MySQL Server і знизу в правому куті з'являється посилання Advanced Options. Натискаємо на неї, і у вікні, яке випало, вказуємо у якості Install Directory створену нами теку для MySQL. Data Directory — це тека, в якій будуть зберігатися бази даних. Я закинув її в Dropbox, щоб синхронізувати дані між ноутбуком і комп'ютерами на роботі і вдома.

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

Після установки нам покажуть екран налаштування конфігурації сервера:

Ставимо галочку напротив Show Advanced Options и продовжуємо. Далі нас просять вказати пароль для користувача root. Можна не морочитися =)

На інших екранах я нічого не змінював, з усім погодився і завершив конфігурацію.

Якщо ви, як і я, розміщуєте дані в Dropbox, то при використанні декількох комп'ютерів можливий конфлікт лог-файлів. Щоб цього не було, в теці C:/WebServer/MySQL/ створюємо теку logs. Далі відкриваємо файл my.ini, який лежить в теці D:/Dropbox/MySQL/ і змінюємо наступні параметри:

  • параметр general_log_file встановлюємо в значенні general_log_file="C:/WebServer/MySQL/logs/general.log"
  • параметр slow_query_log_file встановлюємо в значенні slow_query_log_file="C:/WebServer/MySQL/logs/general-slow.log" (тут можна буде потім дивитися повільні запити)
  • і для логу помилок робимо аналогічно log-error="C:/WebServer/MySQL/logs/general.err"
  • нижче long_query_time=10 додаємо з новим рядком ще один параметр: innodb_log_group_home_dir = "C:/WebServer/MySQL/logs/" — це лог InnoDB

Не забудьте перезавантажити MySQL-сервер.

Встановлюємо заглушку на SMTP

Запускаєте завантажений раніше файл TestMailServerToolSetup.exe, у якості шляху установки обирайте C:/WebServer/SMTP.

Створюємо структуру директорій для сайтів

Так трапилося, що у своїй роботі я регулярно користуюся двома-трьома комп'ютерами, і важливо мати робочу станцію з актуальними файлами на кожному з них. Щоб не морочитися із системами контролю версії, я встановив Dropbox, і робочі файли зберігаю в ньому. Це працює для мене, і зовсім не обов'язково буде зручно Вам. Вибір робочої теки в процесі налаштування абсолютно не принциповий.

Отже, для початку створимо теку, в якій будуть зберігатися усі сайти. Я обрав теку D:/Dropbox/www/. Далі створимо теки для localhost і тестового сайту domain.test. У них розмістимо підтеки htdocs і два файли: error.log и access.log (в них будуть зберігатися логи сервера до цих сайтів). У папці htdocs створюємо HTML-файл index.html з довільним вмістом, наприклад «Hello, localhost!» й «Hello, testdomain!».

Налаштовуємо Apache на нову структуру тек

У теці C:/WebServer/Apache/conf розміщені конфігураціонні файли. Якщо раптом ви щось зіпсуєте, то завжди можна буде повернутися до вихідного стану чи просто порівняти файли, зазирнувши в директорію C:/WebServer/Apache/conf/original. Тут зберігаються оригінальні налаштування, так що можна експериментувати не остерігаючись.

Основний файл конфігурації — httpd.conf. Змінюючи конфігурацію Apache, необхідно завжди перестартувати його, щоб зміни підхопилися.

Отже, змінюємо налаштування Apache на нову структуру директорій.

У httpd.conf:

  • змінюємо DocumentRoot "${SRVROOT}/htdocs" на DocumentRoot "D:/Dropbox/www/"
  • чуть нижче знайдемо директиву <Directory "${SRVROOT}/htdocs"> й замінимо шлях і тут: <Directory "D:/Dropbox/www/">, далі замінимо у ній AllowOverride None на AllowOverride All

У файлі httpd.conf знайдете #Include conf/extra/httpd-vhosts.conf і розкоментуйте (видаліть #). Далі, знайдіть #LoadModule rewrite_module modules/mod_rewrite.so і також розкоментуйте.

Далі заходимо в /extra і відкриваємо httpd-vhosts.conf.

Ви побачите дві секції <VirtualHost *:80>. Видаліть обидві секції і замініть на наступне:

<VirtualHost *:80>
    ServerAdmin admin@localhost
    DocumentRoot "D:/Dropbox/www/localhost/htdocs/"
    ServerName localhost
    ErrorLog "D:/Dropbox/www/localhost/error.log"
    CustomLog "D:/Dropbox/www/localhost/access.log" common
</VirtualHost>
<VirtualHost *:80>
    ServerAdmin admin@domain.test
    DocumentRoot "D:/Dropbox/www/domain.test/htdocs/"
    ServerName domain.test
    ErrorLog "D:/Dropbox/www/domain.test/error.log"
    CustomLog "D:/Dropbox/www/domain.test/access.log" common
</VirtualHost>

Тепер додамо наш тестовий домен до файлу %WinDir%/System32/drivers/etc/hosts, щоб Windows звертався до локального сервера, коли ми будемо звертатися до domain.test. Для цього додамо до файлу ще один рядок: «127.0.0.1 domain.test».

Перестартуємо Apache.

  • localhost — повинні побачити «Hello, localhost!»
  • domain.test — повинні побачити «Hello, testdomain!»

Отже, так можна робити заглушки для тих сайтів, які ви розробляєте.

Тепер можна видалити C:/WebServer/Apache/htdocs, усі сайти у нас будуть зберігатися окремо.

І перш, ніж ми продовжимо, декілька слів: у файлі httpd.conf директиви в <Directory «D:/Dropbox/www/»> будуть застосовані до усіх сайтів, крім тих випадків, коли вони не перевизнані. Якщо ви звернете увагу, то за замовченням увімкнено Indexes, а це дозволить продивлятися директорію сайту в тому випадку, якщо там немає індексного файлу. Якщо вам не хочеться перевизначати це значення для кожного сайту окремо — видаліть це тут і вмикайте у тих місцях, де це знадобиться. Теж саме стосується будь-яких інших директив.

Директиви для сайтів краще додавати у httpd-vhosts.conf або в .htaccess.

Підключаємо PHP

Відкриваємо httpd.conf і знаходимо директиву <IfModule mime_module>. Всередині директиви додаємо:

PHPIniDir "C:/WebServer/PHP/"
LoadModule php5_module "C:/WebServer/PHP/php5apache2_4.dll"
AddType application/x-httpd-php .php

Якщо ви хочете опрацьовувати інші файли, як php, то додайте їх. Наприклад: AddType application/x-httpd-php .php .html .htm.

Директива <IfModule dir_module>: DirectoryIndex index.html змінюємо на DirectoryIndex index.php index.html. Ця директива говорить про те, що індексним файлом може бути index.php та index.html. Ви можете додати що завгодно ще.

Створюємо файл phptest.php в D:/Dropbox/www/localhost/htdocs із вмістом:

<?php
    phpinfo();
?>

Перезавантажуємо Apache і заходимо на localhost/phptest.php. Ви повинні побачити інформацію про PHP.

Налаштовуємо PHP

Якщо ви звернете увагу на localhost/phptest.php, то побачите, що "Loaded Configuration File" встановлено в (none). Заходимо в C:/WebServer/PHP і перейменовуємо php.ini-development в php.ini. Перезавантажуємо Apache, оновлюємо сторінку, ми повинні побачити новий конфігураційний шлях: C:/WebServer/PHP/php.ini. Тепер усі налаштування будемо робити у цьому файлі.

Деякі базові налаштування:

  • директорія, у якій будуть зберігатися тимчасові файли, які заливаються на сервер (директорію ми створили вище): upload_tmp_dir = "C:/WebServer/Temp/UploadTemp"
  • директорія, в якій будуть зберігатися сесії (директорію ми створили вище): session.save_path = "C:/WebServer/Temp/Session"
  • якщо хочете писати <? замість <?php, то поставте в On наступне: short_open_tag = Off
  • error_reporting — рівень виводу помилок
  • log_errors — можна вимкнути, якщо помилки виводяться на екран
  • post_max_size, upload_max_filesize — дуже часто ці параметри треба збільшувати для завантаження великих файлів

Інші налаштування можна знайти в документації до PHP. Якщо ви змінюєте налаштування PHP — потрібно перезавантажити Apache.

Підключаємо модулі PHP

Відкрийте localhost/phptest.php та пошукайте по тексту curl. Ви не повинні нічого знайти. Підключимо модуль curl.

У php.ini знайдіть закоментований фрагмент extension_dir. Розкоментуйте і зробіть його таким: extension_dir = "C:/WebServer/PHP/ext".

Знайдіть extension=php_curl.dll і розкоментуйте. Також розкоментуйте extension=php_gd2.dll, extension=php_mbstring.dll, extension=php_exif.dll.

Встановіть тимчасову зону в директиві date.timezone. Правильне значення можна обрати в документації по PHP, наприклад, date.timezone = "Europe/Kiev".

У роботі часто вимагається збільшити час виконання скрипта і параметри вхідних даних. Налаштуйте параметри max_input_time, max_execution_time, post_max_size,upload_max_filesize. Директива max_file_uploads відповідає за кількість одночасно завантажених файлів (за замовчуванням 20 штук).

Перезавантажте Apache і повторіть пошук на сторінці localhost/phptest.php. Якщо модуль успішно підключився — можна рухатися далі.

MySQL

У php.ini розкоментуйте extension=php_mysql.dll, extension=php_pdo_mysql.dll, extension=php_pdo_odbc.dll и extension=php_mysqli.dll. Перезавантажте Apache і перевірте, що модулі підключилися.

Установлюємо і налаштовуємо phpMyAdmin

Розпаковуємо phpmyadmin у D:/Dropbox/www/localhost/htdocs. Далі необхідно скористатися штатним установником, який проведе вас через увесь процес налаштування.

Налаштовуємо пошту

Трохи раніше ви встановили поштову заглушку Test Mail Server Tool. Запускайте її. Саму програму можна додати до Автозавантажень. Значок буде висіти в треї. Перевірте в налаштуваннях (клік правою кнопкою по іконці в треї), щоб директорія для пошти була C:/WebServer/SMTP/mail.

У файлі php.ini повинні бути розкоментовані наступні рядки:

SMTP = localhost
smtp_port = 25
sendmail_from = me@example.com

Перезавантажте Apache, якщо зробили зміни (у мене був закоментований email).

Висновок

Як результат, ми повинні отримати робочий сервер, який цілком можна використовувати для розробки на тому ж Yii Framework. Якщо потрібне більш тонке налаштування окремих компонентів, ви завжди можете звернутися до офіційного керівництва. Для більшості виниклих помилок є стандартні рішення, які можна доволі швидко вирішити через правильно сформульований пошуковий запит. Якщо ж це не допомогло, я по можливості намагатимусь відповісти на виниклі у вас питання.

Бажаєте обговорити матеріал публікації?

Наш Facebook створений спеціально для того, щоб експерти з різних галузей могли обмінюватись думками і відслідковувати оновлення у наших публікаціях.