Если спросить любого сайтостроителя, с чего следует начинать создание сайта, первое, что они ответят - с выбора хостинга. И почти всегда будет упомянута связка LAMP - Linux, Apache, MySQL, PHP. Разумеется, можно использовать готовую сборку любого XAMPP - но это не наш путь, ибо это неспортивно. В конце концов, наша цель - разобраться, как это работает.
Введение. Подготовительные мероприятия.
Когда сайт лежит на хостинге, хостинг имеет IP-адрес. Более того, на одном и том же сайте может лежать куча сайтов - веб-сервер выдаёт сайт по имени, по которому к нему обращается браузер. Но как узнать, где находится сервер хостинга?
Очень просто. Доменное имя сайта должно быть связано с адресом и разрешаться в DNS. Когда Вы регистрируете доменное имя у доменного регистратора, для информации whois Вам необходимо указать серверы DNS, ответственные за это имя. В частности, можно привязать серверы Яндекса через Яндекс-Коннект. Тогда к этому доменному имени можно будет привязать заодно и Вашу корпоративную почту.
Но как же быть? Вы ещё только создаёте сайт. Вы ещё не хотите выставлять его на всеобщее обозрение! Пофиг! Принцип тот же. Более того, Вы можете создавать хоть тысячи сайтов - и всем им выдавать свой уникальный IP-адрес. Поскольку эти сайты доступны только Вам, для них можно использовать адрес интерфейса обратной петли.
А где их прописывать, если у Вас под рукой нет DNS-серверов? Они и не нужны! Когда служба DNS ещё не была создана, распространялся один на всех большой-большой файл hosts. Он до сих пор есть в каждой системе. В UNIX и Linux он лежит в папке /etc/hosts, а в Windows - в папке:
C:\windows\system32\drivers\etc\hosts
Но если открыть этот файл в Блокноте, Вы не сможете его редактировать. Чтобы суметь сохранить изменённую версию файла, Блокнот должен быть запущен с правами администратора. Поэтому с правами администратора я обычно открываю Командную строку и затем открываю файл hosts такой командой:
Добавьте в этот файл строки:
127.0.0.1 localhost
127.0.0.2 mysite.myhome.local mysite
Важное уточнение: доменный суффикс myhome.local системе тоже желательно указать. Он указывается там же, где и имя компьютера.
Подсказка: суффиксы интернет-доменов и суффиксы доменов Active Directory нынче означают одно и то же, так что mysite.myhome.local ничуть не хуже какого-нибудь vk.com
Ну вот, а теперь прямо в командной строке можете проверить разрешение имени, дав команду:
ping mysite
И правильный ответ будет о том, что четыре эхо-пакета успешно достигли адреса 127.0.0.2 и успешно вернулись.
Этап первый. СУБД MariaDB.
В четырёх буквах LAMP подразумевается система Linux, веб-сервер Apache, СУБД MySQL и скриптовый язык PHP. Систему мы уже заменили на Windows. Можем воспользоваться встроенным веб-сервером IIS, но всё-таки воспользуемся более правильным Nginx, MySQL заменим на правильный форк от создателя - MariaDB... а в остальном всё правильно.
Очень хочется попинать по почкам тех, кто при установке Windows отдаёт весь диск под системный раздел C: - нам крайне желательно использовать дополнительный раздел, например D: - впрочем, это не важно, главное понять принцип.
Чтобы было всё вместе, мы на диске D: (или какой там у Вас?) создаём папку web. В ней создаём папку maria. А затем качаем дистрибутив отсюда: https://mariadb.com/downloads/ - не забываем указать версию своей операционной системы.
И ставим мы её в папку D:\web\maria - при этом не забываем указать, что ни root, ни кто другой из пользователей не может обращаться к этой СУБД ниоткуда кроме локалхоста. И что обращение к этой СУБД только на имя localhost порт 3306 (ну нет в винде unix-сокетов). И кодировка базы utf8
Если Вы измените настройки в этом файле, не забудьте потом перезапустить службу MySQL.
Этап второй. Установка веб-сервера nginx.
Качаем версию сервера под Windows отсюда:
https://nginx.org/ru/download.html
Разумеется, нам нужна стабильная версия. Тот, кто понял замысел, наверняка уже догадался, что сервер просто распаковывается в папку
D:\web\nginx
Править файлы настройки можно с помощью файлового менеджера. Я использую Far Manager, Вы можете использовать любой.
Так выглядят мои настройки. Прошу заметить, я убрал комментарии для дополнительных возможностей - в частности, поддержку SSL и других виртуальных хостов. Лучше для каждого хоста создавать свой отдельный файл в папке conf.d - и включать-выключать нужный сайт переносом его из одной папки в другую.
Этап третий. Установка PHP.
Качаем нужную нам версию отсюда: https://windows.php.net/download/
Прошу не обманываться тем, что это тоже "всего лишь архив, который надо всего лишь распаковать в нужное место". Так-то оно так, только видите слева пометки "VC15"? Это значит, что для работы это ПО требует распространяемой (redistrivutable) версии MSVC 2017. Поэтому сначала рекомендую установить её (а заодно можно и более ранние).
Архив должен быть распакован в папку
D:\web\nginx\php
После этого надо обязательно отредактировать файл настроек php.ini - в частности, указать путь к дополнениям.
extension_dir = "ext"
cgi.fix_pathinfo=0
Не все дополнения установлены по умолчанию. Но как минимум Вам понадобятся bz2 curl fileinfo gd2 mbstring mysqli pdo_mysql sockets xmlrpc xsl - их тоже надо будет раскомментировать.
Этап 4. Запуск.
"Здравствуйте, уважаемые пассажиры! К Вашим услугам представляем новый, самый комфортабельный авиалайнер. На первом этаже бассейн, на втором поле для гольфа, на третьем футбольное поле, на четвёртом пять ресторанов с блюдами самых экзотических кухонь мира. А теперь мы со всем этим барахлом постараемся взлететь" © старый анекдот.
Если мы всё сделали правильно, служба MySQL уже стартовала и работает, а вот по поводу всего прочего... Увы, это не службы.
Создаём файл nginx-start.bat, в котором пишем всего две строки:
@echo off
start nginx -c conf/nginx.conf
Создаём к нему ярлык и перемещаем его в папку "Автозагрузка" - теперь, когда пользователь входит в систему, веб-сервер будет запускаться. В конце концов, домашний компьютер - не сервер терминалов и вряд ли мы тут будем работать под разными пользователями одновременно. А если по очереди - для этого есть общая папка "Автозагрузка".
Щёлкаем по ярлыку, открываем Диспетчер Задач и видим в фоне два процесса nginx.exe
Теперь более сильное колдунство. Файл php-fpm-start.bat выглядит так:
@echo off
echo Starting PHP FastCGI...
set path=d:\web\nginx\php;%PATH%
d:\web\nginx\php\php-cgi.exe -b 127.0.0.1:9000 -c d:\web\nginx\php\php.ini
Но если мы его запустим, то увидим чёрное окно консоли. В принципе оно не мешает, мы можем работать и так. Но если мы перфекционисты...
Создаём файл php-fpm-start.vbs - и пишем в нём:
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "d:\web\nginx\php-fpm-start.bat",0
Вот этот 0 и означает, что запущенное окно должно быть скрыто. Теперь создаём ярлык к файлу VBS и кидаем его в ту же папку "Автозагрузка". Запускаем. Теперь всё в порядке: окна нет, а процесс php-cgi.exe есть.
Этап 5. Проверка.
Как мы помним, адрес 127.0.0.1 зарезервирован для localhost, а в файле настроек nginx.conf для него указана папка html
Запускаем браузер, открываем localhost и наблюдаем файл index.html, который лежит по адресу D:\web\nginx\html\index.html
В принципе, для сайтов на HTML5+CSS3+JS этого уже хватит. Но мы что, зря что ли PHP ставили? Создаём в папке d:\web\nginx\html файл test.php
<?php phpinfo(); ?>
Да-да, всего одна строчка.
Открываем http://localhost/test.php (у меня старая версия PHP)
Если Вы видите эту картинку - поздравляю, Вы всё сделали правильно. Но всё же проверьте, все ли дополнения у Вас появились. Особенно обратите внимание на mysqli - оно нам ещё понадобится.
Рекомендую скачать PhpMyAdmin, распаковать его в папку myadmin, скопировать файл config.inc.sample.php в config.inc.php, прописать в нём blowfish_secret - и открыть адрес http://localhost/myadmin
Если Вы вошли с логином root и паролем, указанным при установке MariaDB, Вам останется разрешить создать базу данных phpmyadmin для хранения в ней настроек.
Вот теперь всё, можно разрабатывать свои сайты или устанавливать готовые CMS - такие как WordPress, Joomla, Drupal и прочие.
Заключение.
Для разработки сайтов рекомендую ещё поставить Eclipse PHP Developer
https://www.eclipse.org/downloads/packages/release/2020-03/r/eclipse-ide-php-developers
Прошу обратить внимание, он требует установленной Java Runtime Environment (Java JRE)
https://www.oracle.com/java/technologies/javase-jre8-downloads.html
Буду рад, если статья Вам понравилась. Буду рад рассказать ещё. А если Вам что-то оказалось непонятным - не стесняйтесь задавать вопросы в комментариях. До новых встреч!