У ті далекі щасливі часи, коли повсюдно використовувалася операційна система Windows XP, процес установки серверного програмного забезпечення відбувався візуально, користувачам необхідно було запустити файл і слідувати інструкціям. Але з часом розробки інсталяційних пакетів програмного забезпечення припинилися, і зараз необхідно самостійно їх компілювати. Розробники залишили тільки вихідний код, який потрібно відредагувати і встановити.

Опишемо процес встановлення вебсервера Apache 2.4 з модулем PHP 8, бази даних MySQL та налаштуємо декілька віртуальних хостів на операційній системі Windows 10.

Встановлення вебсервера Apache 2.4


На момент написання статті останньою актуальною версією Apache є Apache 2.4 binaries VS16 (httpd-2.4.46-win64-VS16.zip). Завантажуємо файл архіву на офіційному вебсайті https://www.apachelounge.com/download/. Символи VS16 означають версію компілятора Visual Studio, в якій проводилася компіляція та збирання програми - Visual Studio C++ 2019, тому, для роботи вебсерверу необхідно завантажити відповідний пакет Visual С++, який містить необхідні динамічні бібліотеки. Для цього необхідно відвідати сторінку "Останні підтримувані пакети Visual C++, доступні для завантаження" офіційного сайту Підтримки від Microsoft, завантажити та інсталювати файл x64: vc_redist.x64.exe.

Для встановлення вебсервера будемо дотримуватися наступної структури файлів: в корені диска "C:/" міститься директорія "web_server", всередині якої знаходяться піддиректорії: Apache, php і MariaDB.

Після завантаження архіву необхідно розпакувати вміст теки Apache24 скачаного файлу в директорію "C:\web_server\apache". Інсталювати нічого не потрібно. Далі необхідно в файлі "C:\web_server\apache\conf\httpd.conf" змінити наступні значення:
ServerRoot "C:/web_server/apache"
DocumentRoot "C:/web_server/apache/htdocs"
ServerName localhost:80
Параметр ServerName слід розкоментувати, а саме прибрати символ решітки "#" перед параметром.

Далі знайдіть секцію, яка починається "<Directory диск: />" і закінчується "</ Directory>". За замовчуванням вона виглядає так:
<Directory />
AllowOverride none
Require all denied
</Directory>
Її потрібно замінити на наступну секцію:
<Directory C:/>
Options Indexes Includes
AllowOverride All
Allow from all
</Directory>
Цим ви забезпечите, що в даному блоці будуть зберігатися налаштування для всіх каталогів за замовчуванням (так як "с:/" - кореневий каталог). А саме, для всіх каталогів за умовчанням є можливість автоматично генерувати індекс-список вмісту каталогів при перегляді його в браузері, а також підтримка SSI і дозвіл на виконання файлів ".htaccess" для індивідуальних налаштувань каталогів.

Знайдіть аналогічний блок, який починається "<Directory "${SRVROOT}/htdocs">" і закінчується "</Directory>". Там буде багато коментарів, не звертайте уваги. Цю секцію слід видалити, тобто всі налаштування для каталогу зі сторінками повинні залежати від налаштувань за замовчуванням, які ми вже налаштували.

Далі включаємо модуль "Rewrite". Для цього досить прибрати "#" перед наступним рядком:
LoadModule rewrite_module modules/mod_rewrite.so
у версії Apache 2.2, управління доступом на основі клієнта, ім’я хоста, IP - адреса та інші характеристики клієнтських запитів виконувалися за допомогою директив Order, Allow, Deny і Satisfy.

У версії Apache 2.4 такий контроль доступу здійснюється так само, як і інші перевірки авторизації, з використанням нового модуля mod_authz_host. Старі ідіоми управління доступом слід замінити новими механізмами аутентифікації, хоча для сумісності зі старими конфігураціями надається новий модуль mod_access_compat, тому його необхідно підключити:
LoadModule access_compat_module modules/mod_access_compat.so
Останнє, що потрібно зробити - встановити сервіс "Apache". У командному рядку від імені Адміністратора набираємо рядок:
C:\web_server\apache\bin\httpd.exe -k install

Під час встановлення, зупинки або запуску вебсервера, можливо відображення вікна оповіщення системи безпеки Windows про заблокування функцій програми. Нам необхідно дозволити доступ:

Для більш зручного управління вебсервером можна створити на робочому столі ярлик для:
C:\web_server\apache\bin\ApacheMonitor.exe
Для тестування роботи вебсервера, запустіть браузер і наберіть в адресному рядку "http://localhost/". Якщо бачите сторінку з повідомленням "It works!" - значить вам успішно вдалося встановити вебсервер.

Установка PHP 8


На офіційному сайті PHP For Windows: Binaries and sources Releases викачуємо останню версію VS16 x64 Thread Safe.
Варіант Thread Safe призначений для безпечного виконання РНР в паралельних потоках в рамках одного системного процесу, наприклад, якщо РНР встановлюється в якості модуля вебсервера Apache.

На момент написання статті актуальна версія PHP 8.0 (8.0.3) з назвою файлу: php-8.0.3-Win32-vs16-x64. x64 Thread Safe - 64-бітний варіант для установки в якості модуля вебсервера. Розпаковуємо вміст архіву в директорію "C:\web_server\php". Як у випадку з Apache, інсталювати нічого не потрібно. У кінець файлу "C:\web_server\apache\conf\httpd.conf" додаємо рядки:
LoadModule php_module "C:/web_server/php/php8apache2_4.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "C:/web_server/php/"
Обов’язково необхідно додати в конфігураційний файл Apache директиву "PHPIniDir", яка дозволяє точно вказати місце розташування файлу "php.ini". Після додавання директиви перезавантажте Apache і упевніться, що запуск пройшов успішно.
Зверніть увагу, що під час запису шляху обов’язково використовуйте прямі слеші "/". Apache і PHP спочатку були створені для роботи на Unix-системах, де використовуються саме прямі слеші. Щоб уникнути помилок, які дуже важко знайти, рекомендується використовувати в конфігураційних файлах Apache і PHP прямі слеші в Unix-форматі.

РНР має величезну кількість різноманітних налаштувань, які розміщенні у файлі php.ini. Відразу після установки інтерпретатора PHP замість файлу php.ini можна виявити лише два файли:

- php.ini-production - рекомендований набір параметрів для робочого сервера;

- php.ini-development - рекомендований набір параметрів для робочої станції розробника.

Для локальної розробки файл php.ini-development необхідно перейменувати в php.ini.

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

Інтерпретатор РНР будується за модульним принципом. Мова складається з ядра, до якого при необхідності можуть підключатися розширення - бібліотеки, що доповнюють мову новими можливостями. Наприклад, для обробки зображень можна підключити розширення GDLib, для зв’язку з базами даних - розширення PDO, для підтримки мультибайтних рядків (UTF-8) - mbstring. Для того щоб зменшити обсяг споживаної оперативної пам’яті, більшість розширень не включаються до складу ядра РНР. Замість цього вони компілюються у вигляді зовнішніх динамічних бібліотек (*.dll для Windows).
У дистрибутивах для операційної системи Windows розширення, оформлені у вигляді динамічних бібліотек, скомпільовані, але не підключені. Знайти їх можна в підкаталозі "ext" основного каталогу РНР-дистрибутиву. Для того щоб підключити одне з таких зовнішніх розширень, необхідно відредагувати конфігураційний файл php.ini. У файлі конфігурації слід знайти директиву extension_dir і вказати в ній шлях до директорії з розширеннями, після чого можна його активувати його, скориставшись директивою extension. У файлі конфігурації php.ini, як правило, вже додані закоментовані директиви для всіх розширень з директорії ext. Потрібне розширення необхідно активувати, прибравши крапку з комою з початку рядка. Особливу увагу приділіть бібліотеці "php_mbstring.dll", яка містить функції для роботи з багатобайтними кодуваннями, до яких відносяться кодування східних мов (японська, китайська, корейська), Юнікод (UTF-8) та інші. Бібліотека "php_mbstring.dll" має бути присутня в директорії "C:\web_server\php\ext\".

У кінці файлу конфігурації "php.ini" необхідно встановити такі значення:
upload_tmp_dir = "C:/Windows/Temp"
session.save_path = "C:/Windows/Temp"
error_log = "C:/Windows/temp/php-errors.log"
extension_dir = "C:/web_server/php/ext"
memory_limit = 512M
post_max_size = 50M
upload_max_filesize = 50M
sys_temp_dir = "C:/Windows/Temp"

У файлі конфігурації php.ini діють пріоритети правил. Правило, написане нижче буде перекривати правило, набране вище. Тому немає необхідності всі вище описані значення змінювати порядково, досить їх написати останніми рядками в файлі конфігурації, і дані правила будуть мати більш високий пріоритет.

Далі необхідно розкоментувати (прибрати крапку з комою попереду) розширення, які повинні бути підключені.
extension=bz2
extension=curl
extension=gd
extension=gettext
extension=gmp
extension=imap
extension=mbstring
extension=exif
extension=mysqli
extension=openssl
extension=pdo_mysql
extension=pdo_odbc
extension=pdo_pgsql
extension=pdo_sqlite
extension=soap
extension=sqlite3
extension=tidy
Перезапускаємо Apache використовуючи ApacheMonitor.

Для того, щоб протестувати, як працює вебсервер в зв’язці з інтерпретатором PHP, перейменуйте файл "index.html" на "index.php" у директорії "C:\web_server\apache\htdocs" і заповніть його таким змістом:
<?php
phpinfo();
?>
Запустіть браузер. Наберіть в адресному рядку "http://localhost/". Якщо ви побачили кілька файлів у вікні браузера, то натисніть на "index.php". В результаті повинні побачити сторінку зі службовою інформацією про вебсервер та інтерпретатор PHP.

Також слід зауважити, що деякі модулі можуть не завантажитися, про що можна переконатися у файлі "C:/Windows/Temp/php-errors.log":
PHP Warning:  PHP Startup: Unable to load dynamic library 'curl' (tried: C:/web_server/php/ext\curl (The specified module could not be found), C:/web_server/php/ext\php_curl.dll (The specified module could not be found)) in Unknown on line 0
Для того, щоб завантаження модулів пройшло успішно, а команда РНР була доступна в будь-якій точці файлової системи, шлях до РНР-інтерпретатора слід прописати в змінній оточення РАТН.

Змінна PATH являє собою системну змінну, за допомогою якої операційна система знаходить потрібні виконувані об’єкти в командному рядку або вікні терміналу. У параметрі змінної міститься список (через крапку з комою;) директорій, в яких відбуватиметься пошук виконуваного файлу при виклику команди з консолі.

В операційній системі Windows 10 системну змінну PATH можна задати за допомогою системної утиліти у панелі керування Windows. Для цього послідовно у меню "Пуск" виконуємо команду "Система" ⇨ "Додаткові параметри системи" ⇨ "Змінні оточення". У розділі "Системні змінні" вибираємо змінну середовища PATH та натискаємо Редагувати. Якщо змінної PATH не існує, натискаємо Створити. У вікні "Редагувати змінну оточення" необхідно додати значення змінної середовища PATH "c:\web_server\php".

Вбудований вебсервер PHP


Інтерпретатор PHP також містить у собі вбудований сервер. Якщо вам необхідно використовувати PHP без необхідності використання спеціалізованого вебсерверу, можна використовувати вбудований Non Thread Safe СGI-варіант дистрибутиву. Вам лише необхідно розпакувати архів у будь-яку директорію, наприклад C:/php і виконати наступну команду (з правами адміністратора):
php -S localhost:80
Для запуску вашого скрипта необхідно звернувшись у вебпереглядачі за адресою http://localhost. Порт 80 можна не вказувати, оскільки вебпереглядач автоматично звертатиметься до 80 порта, закріпленому за протоколом http.

По замовчуванню кореневим каталогом є поточна директорія, саме в ній буде проведений пошук індексного файлу index.php. Однак за допомогою параметра -t можна вказати довільну директорію:
php -S localhost:80 -t site
Журнальні записи або логи сервера виводяться безпосередньо в консоль, в якій він був запущений. Зупинити сервер можна, натиснувши комбінацію клавіш <Ctrl> + <C>.

Втім, вбудований сервер призначений лише для розробки, для забезпечення роботи повноцінного вебсайту краще скористатися промисловими серверами, такими як Apache або nginx.

Створення віртуальних хостів Apache


Проблема віртуальних хостів (окремих вебсайтів) стає досить гострою, коли ви працюєте одночасно над двома і більше проєктами. Для їх адміністрування звичайним "localhost" не обійтися. За допомогою віртуальних хостів і сервера Apache цю проблему цілком можна вирішити.

Створимо віртуальні хости з використанням однієї загальної IP-адреси. Наприклад, створимо віртуальний хост "mysite". Для установки необхідно зробити деякі зміни у файлі конфігурації Apache "C:\web_server\apache\conf\httpd.conf", а також в деяких файлах Windows.

Створюємо директорію "localhost" в кореневому каталозі диска (C:\localhost\). Далі створюємо в ній каталог віртуального хоста - "mysite" (C:\localhost\mysite\). Саме в цій директорії і будуть міститися файли віртуального хоста. Далі необхідно включити підтримку віртуальних хостів. Відкрийте файл "C:\web_server\apache\conf\httpd.conf" і додайте наступні рядки в самому кінці файлу після всіх коментарів:
<VirtualHost *:80>
ServerName localhost:80
DocumentRoot "C:/web_server/apache/htdocs"
ErrorLog "c:/web_server/apache/htdocs/error.log"
CustomLog "c:/web_server/apache/htdocs/access.log" common
</VirtualHost>
# mysite
<VirtualHost *:80>
ServerName mysite
DocumentRoot "C:/localhost/mysite"
ErrorLog "c:/localhost/mysite/error.log"
CustomLog "c:/localhost/mysite/access.log" common
</VirtualHost>
Наступний крок створення віртуального хоста - це зміна файлу "C:\WINDOWS\system32\drivers\etc\hosts" операційної системи. Відкрийте даний файл і додайте в нього рядки:
127.0.0.1 localhost
127.0.0.1 mysite
Якщо у Вас вже є запис "localhost", то другий додавати не потрібно. Тепер перезапустіть сервер Apache, відкрийте браузер, введіть в адресному рядку "http://mysite/" і ви опинитеся в своєму віртуальному хості.

Встановлення MariaDB


Для початку необхідно завантажити останню версію дистрибутиву MariaDB (https://mariadb.com/downloads/). На момент написання статті назва файлу інсталяції була "mariadb-10.5.9-winx64".

На відміну від попередніх операцій встановлення вебсервера Apache та модуля PHP, файл встановлення MariaDB є інсталяційним, тому потрібно його запустити та слідувати інструкціям.

Під час інсталяції необхідно змінити шлях розміщення "C:\web_server\MariaDB\":

У наступному вікні необхідно двічі ввести пароль до облікового запису Root і підтверджуємо пункт використання UTF8 як набір символів сервера за замовчуванням:

У наступних вікнах залишаємо все по замовчуванню та завершуємо інсталяцію програми.

Після установки на робочому столі з’явиться ярлик HeidiSQL. Програма HeidiSQL являє собою дуже потужну програму для роботи з базами даних MySQL, Microsoft SQL і PostgreSQL. Має дуже зрозумілий і простий інтерфейс, високу швидкість виконання операцій і безліччю вбудованих функцій, таких як створення бази даних, її наповнення, редагування і збереження.

При запуску програми нам необхідно підключиться до бази даних. Для цього вводимо нову назву підключення і пароль:

Далі можна виконувати будь-які операції, які допустимі з базами даних:

Після інсталяції вищеописаного програмного забезпечення ви можете повноцінно локально розробляти власні вебсайти.