Установка локального веб-сервера на подсистему Windows для Linux

Александр Мальцев
14K
3
Установка локального веб-сервера на подсистему Windows для Linux
Содержание:
  1. Что такое подсистема Windows для Linux
  2. Основные этапы настройки веб-сервера на WSL
  3. Включение подсистемы Windows для Linux
  4. Установка приложения «Ubuntu»
  5. Установка программного обеспечения в ОС Ubuntu
  6. Создание директории для веб-проекта
  7. Изменение метода аутентификации MySQL пользователя root
  8. Создание базы данных
  9. Настройка виртуальных хостов в Apache
  10. Перенаправление test.ru на локальный веб-сервер
  11. Команды для запуска и остановки веб-сервера
  12. Проверка работоспособности веб-сервера
  13. Инструкция по установке phpMyAdmin
  14. Дополнительные инструкции
  15. Комментарии

В этой статье рассмотрим процесс установки локального веб-сервера (Apache, MySQL и PHP) на подсистему Windows для Linux (Windows Subsystem Linux).

Что такое подсистема Windows для Linux

Microsoft Windows 10 имеет новую дополнительную функцию, которая называется «Подсистема Windows для Linux (WSL)». Она была добавлена в систему, начиная с обновления «Anniversary Update» и доступна только в 64-битных редакциях этой операционной системы.

WSL представляет собой подсистему для ОС Windows 10, через которую можно запускать Linux приложения. В этой статье рассмотрим, как на данной подсистеме можно настроить веб-сервер (Apache, MySQL, PHP) для локальной разработки веб-проектов.

Windows 10, начиная с версии 2004 уже включает WSL 2.

Основные этапы настройки веб-сервера на WSL

Процесс установки веб-сервера на WSL можно разбить на следующие шаги:

  • включение через панель управления дополнительной функции Windows 10 «Подсистема Windows для Linux»;
  • установку «Ubuntu» или любого другого дистрибутива Linux из магазина приложений Microsoft Store;
  • установка программного обеспечения в ОС Linux и его настройка;
  • редактирование файла hosts в Windows 10;
  • создания bash скриптов для запуска и остановки веб-сервера;
  • проверки работоспособности веб-сервера, посредством установки на сайт, какой-нибудь CMS, например MODX Revolution.

Включение подсистемы Windows для Linux

Для включения компоненты «Подсистема Windows для Linux» в Windows 10 необходимо выполнить следующие действия:

  • открыть «Панель управления» (Пуск -> Служебные -> Windows -> Панель управления);
  • открыть окно «Компоненты Windows» (пункт «Программы» в «Панели управления» -> Включение и отключение компонентов Windows);
  • установить галочку напротив опции «Подсистема Windows для Linux» и нажать «ОК»;
  • перезагрузить операционную систему.
Windows 10 - Включение подсистемы Windows для Linux

Для использования WSL 2 вам необходимо дополнительно ещё включить в окне «Компоненты Windows» необязательный компонент «Платформа виртуальной машины».

Какую версию WSL выбрать

Чтобы определиться какая версия WSL вам нужна, нужно рассмотреть их различия.

WSL 2 в отличие от WSL 1 имеет полнофункциональное ядро Linux с полной совместимостью системных вызовов. Это позволяет использовать внутри WSL 2 целый ряд приложений (Docker и другие). Если вам нужна поддержка этих приложений, то тогда однозначно стоит остановится на 2 версии этой подсистемы. К сведению, ядро Linux для WSL 2 собранно компанией Microsoft и будет автоматически обновляться через центр обновления Windows.

WSL 1 рекомендуется использовать для проектов, файлы которого будут находиться в файловой системе Windows. В этом случае вы получите более высокую производительность, чем на WSL 2.

На мой взгляд, использовать вторую версию WSL пока не имеет особого смысла, только если вы не используете Docker или другое приложение, которому нужна полная совместимость системных вызовов Linux. Т.к. при использовании WSL 2 вам необходимо будет располагать проект в файловой системе Linux, иначе производительность файловых систем ОС при работе с этим проектом будет достаточно низкой. Но в любом случае вы можете переключить WSL для дистрибутива Linux как на первую версию, так и на вторую, и посмотреть какой вариант этой подсистемы для работы вам более подходит.

Работа с версиями WSL

Установку версии WSL, которую вы хотите использовать по умолчанию, осуществляется посредством выполнения в PowerShell следующей команды (например, WSL 2):

wsl --set-default-version 2

Эта команда установит по умолчанию в качестве версии WSL 2. Если нужно WSL 1, то в вместо 2, нужно указать соответственно 1.

Проверить WSL версию, назначенному каждому из установленных дистрибутивов Linux можно в PowerShell через следующую команду:

wsl -l -v

Для того чтобы изменить назначенную WSL версию дистрибутиву Linux на другую:

wsl --set-version <distribution name> <versionNumber>

Например, для того чтобы перевести Ubuntu-18.04 на WSL 2 необходимо выполнить команду:

wsl --set-version Ubuntu-18.04 2

Доступ к файловым системам ОС

Получить в Windows доступ к файлам WSL можно, например, через проводник, введя в его адресной строке путь \\wsl$ или просто выполнив в Bash команду explorer.exe ..

В WSL получение доступа к файловой системе Windows выполняется через /mnt. Например, для того чтобы в Bash перейти на диск C:\ необходимо ввести cd /mnt/c, а на D:\ - cd /mnt/d.

Установка приложения «Ubuntu»

Установку приложения «Ubuntu» на компьютер осуществим через магазин приложений Microsoft Store. Для этого необходимо открыть данный магазин приложений, найти приложение «Ubuntu» и установить его.

Windows 10 - Установка приложения Ubuntu

Установка программного обеспечения в ОС Ubuntu

Запустим операционную систему «Ubuntu».

Введём новое UNIX имя пользователя (username) и пароль (password).

Windows 10 - Создание учётной записи UNIX пользователя

Обновим локальный индекс apt пакетов в операционной системе Ubuntu:

sudo apt update

Обновим установленное программное обеспечение:

sudo apt upgrade

Установим Apache:

sudo apt install apache2

Установим MySQL сервер:

sudo apt install mysql-server

Установим php и другие пакеты, необходимые для веб-разработки:

sudo apt install php libapache2-mod-php php-mysql php-xml php-curl

Для установки какой-то определённой версии php, например 7.1.x, необходимо выполнить следующие команды:

sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php7.1 libapache2-mod-php7.1 php7.1-mysql php7.1-xml php7.1-curl

Включим модуль Mod rewrite в Apache:

sudo a2enmod rewrite

Создание директории для веб-проекта

Создадим в Windows 10, например, с помощью проводника, директорию для сайта (проекта) test.ru:

d:\Projects\test.ru\public_html

При использовании WSL 2 рекомендуется сохранять файлы в файловой системе Linux. Это необходимо для обеспечения максимальной производительности.

В этом случае директорию для проекта поместим сюда:

\home\main\projects\test.ru\public_html

Для более удобного создания каталогов и работы с файловой системой Linux вы можете установить в Ubuntu, например, Midnight Commander:

sudo apt install mc

Запуск Midnight Commander осуществляется посредством ввода команды:

mc

Изменение метода аутентификации MySQL пользователя root

Для изменения метода аутентификации MySQL пользователя root выполним следующие действия:

1. Запустим службу mysql.

sudo service mysql start

2. Подключимся к серверу MySQL под стандартным пользователем root, который создаётся при установке MySQL на компьютер:

sudo mysql -uroot -p

3. Нажмём на Еnter, т.к. по умолчанию пользователь root, созданный при установке, не имеет пароля.

4. Проверим метод аутентификации, который используется для пользователя root.

SELECT user, authentication_string, plugin, host FROM mysql.user WHERE user="root";

Если пользователь использует аутентификацию с помощью плагина auth_socket, то изменим эту настройку на использование пустого пароля. Для этого введём команду:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';
Изменение метода аутентификации MySQL пользователя root

Выполним команду FLUSH PRIVILEGES, которая применит внесённые изменения:

FLUSH PRIVILEGES;

Создание базы данных

Создадим базу данных для веб-проекта test.ru. Для этого введем в командной строке MySQL введём следующую команду:

CREATE DATABASE testru;

Если в базу данных testru необходимо загрузить дамп некоторой базы, находящийся, например, в файле backup.sql, то можно воспользоваться следующими инструкциями:

use testru;
source backup.sql;

Для завершения работы с командной строкой MySQL выйдем из неё:

exit

Настройка виртуальных хостов в Apache

В Ubuntu файлы настроек виртуальных хостов Apache распологаются в /etc/apache2/sites-available/*.conf. По умолчанию в Apache уже настроен один виртуальный хост. Его настройки лежат в файле 000-default.conf. Данный файл будем использовать в качестве примера.

Создадим копию файла 000-default.conf:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/test.ru.conf

Отредактируем файл test.ru.conf, для этого можно воспользоваться, например, редактором nano:

sudo nano /etc/apache2/sites-available/test.ru.conf

Итоговое содержимое файла test.ru.conf:

<VirtualHost *:80>
    ServerAdmin webmaster@test.ru
    ServerName test.ru
    ServerAlias www.test.ru
	DocumentRoot /mnt/d/Projects/test.ru/public_html/
	<Directory /mnt/d/Projects/test.ru/public_html/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>          
	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Настройка виртуальных хостов в Apache

Включим новый виртуальный хост с помощью утилиты a2ensite:

sudo a2ensite test.ru.conf

Перенаправление test.ru на локальный веб-сервер

Для того чтобы доменное имя test.ru было связано с локальным веб-сервером необходимо открыть файл hosts, расположенный по адресу C:\Windows\System32\drivers\etc и добавить в него строчку:

127.0.0.1 test.ru
Редактирование файла hosts

Команды для запуска и остановки веб-сервера

Для запуска Apache и MySQL необходимо ввести следующие команды:

sudo service apache2 start
sudo service mysql start

Для остановки веб-сервера:

sudo service apache2 stop
sudo service mysql stop

Для упрощения запуска и остановки веб-сервера можно создать bash скрипты start.sh и stop.sh.

Содержимое файла start.sh:

#!/bin/bash

echo password | sudo -S sudo service apache2 start
echo password | sudo -S sudo service mysql start
exit 0

Содержимое файла stop.sh:

#!/bin/bash

echo password | sudo -S sudo service apache2 stop
echo password | sudo -S sudo service mysql stop
exit 0

Вместо password необходимо ввести пароль, который установили для UNIX пользователя.

Запуск веб-сервера (./start.sh):

./start.sh
Запуск веб-сервера с помощью bash скрипта

Проверка работоспособности веб-сервера

Длы проверки работоспособности веб-сервера установим на test.ru систему управления контентом, например, MODX Revolution.

Для этого скачаем со страницы Download MODX Revolution архив системы и распакуем его в директорию d:\Projects\test.ru\public_html\.

Для установки системы необходимо открыть мастер. Осуществляется это посредством ввода в строку поиска браузера адреса http://test.ru/setup. После этого ответим на все вопросы мастера и нажмём на кнопку "Установить".

Дождёмся окончания процесса установки и получим отчет об установке CMS MODX Revolution.

Отчет об установке CMS MODX Revolution

Инструкция по установке phpMyAdmin

Пошаговые действия по установке phpMyAdmin в Ubuntu:

1. Установим пароль для MySQL пользователя root, если его нет (т.к. по умолчанию phpMyAdmin не разрешает войти, если у пользователя БД нет пароля).

sudo mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
FLUSH PRIVILEGES;
exit

2. Установим phpMyAdmin:

sudo apt-get install phpmyadmin

При установке мастер будет предлагать вам ответить на следующие вопросы:

  • на приглашение «настроить базу данных для phpmyadmin с помощью dbconfig-common» выберите Yes (Да);
  • в окне на сообщение «пожалуйста, выберите веб сервер, который следует автоматически настроить для запуска phpMyAdmin» выберите Apache (для этого нажмите на Пробел, Tab и Enter);
  • при запросе пароля для самого приложения phpMyAdmin введите, например, root.

Но установленная этим образом версия phpMyAdmin является устаревшей и содержит некоторые ошибки.

Для её обновления выполним ещё следующие действия:

  • cd /usr/share - переход в «usr/share»;
  • sudo rm -rf phpmyadmin - удаление в «usr/share» директории «phpmyadmin»;
  • sudo wget -P /usr/share/ "https://files.phpmyadmin.net/phpMyAdmin/4.9.5/phpMyAdmin-4.9.5-all-languages.zip" - загрузка последней версии (4.9.5) phpMyAdmin;
  • sudo unzip phpMyAdmin-4.9.5-all-languages.zip - распаковка её в текущий каталог;
  • sudo cp -r phpMyAdmin-4.9.5-all-languages phpmyadmin - копирование извлечённые файлы в папку «phpmyadmin»;
  • sudo rm -rf phpMyAdmin-4.9.5-all-languages - удалние папки «phpMyAdmin-4.9.5-all-languages».

Для входа в phpMyAdmin необходимо ввести в адресной строке браузера URL: http://localhost/phpmyadmin/. В поля "Пользователь" и "Пароль" введите root.

Дополнительные инструкции

1. Как в MySQL отключить режим ONLY_FULL_GROUP_BY?

Один из способов отключить режим ONLY_FULL_GROUP_BY это добавить в конец файла «mysql.cnf», расположеннего в «/etc/mysql/» следующий код:

[mysqld]
# установка sql_mode
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
# настройка дефолтной кодировки
character-set-server = utf8

Открыть файл «mysql.cnf» для редактирования можно так:

sudo nano /etc/mysql/mysql.cnf

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

  1. Evgeny
    08 октября 2020, 17:20
    Все сделал, но страничка не открывается (положил в директорию test просто html), в хроме пишет
    This site can’t be reachedtest.loc refused to connect.
    Try:

    Checking the connection
    Checking the proxy and the firewall
    ERR_CONNECTION_REFUSED
    Тестовая страничка лежит в C:\test поэтому сделал симлинк
    sudo ln -s /mnt/c/test /var/www/html/test

    Конфиг хоста точно такой же, за исключением нескольких строчек:
    ServerName test.loc
    DocumentRoot /var/www/html/test
    <Directory /var/www/html/test/>

    Пробовал и вариант когда пути указывывают и на источник — /mnt/c/test, в хостах виндоус 127.0.0.1 test.loc указан. Все по 10 раз перегружал, что может быть не так?

    1. Evgeny
      09 октября 2020, 15:01
      UP. решение нашлось неожиданное, дописал в хосты:
      ::1 test.loc
      и все пошло
      Непонял почему, кто разбирается — это чтоже, Апач 2.4 теперь понимает только i.p.v6?
      1. Александр Мальцев
        11 октября 2020, 05:07
        Какая версия WSL и Ubuntu? На WSL v1 и Ubuntu 18.04 веб-сервер Apache 2.4 работает через IPv4.
        1. Evgeny
          12 октября 2020, 10:59
          у меня Debian 10, wsl 2
          1. Александр Мальцев
            13 октября 2020, 12:28
            WSL 2 в отличие от WSL 1 имеет виртуализированный адаптер Ethernet со своим собственным уникальным IP-адресом. Поэтому для правильной работы нужно указывать именно его.
            Что узнать его IP-адрес в Ubuntu можно, например, воспользоваться ipconfig.
            Далее прописываем его в хосты. Например, если IP равен 172.31.254.71, то:
            172.31.254.71 test.ru
            
    2. Oleg
      06 апреля 2020, 14:00
      Спасибо за статью. Добавьте установку и настройку phpMyAdmin
      1. Александр Мальцев
        08 апреля 2020, 15:10
        Пожалуйста! Информация по установке phpMyAdmin в Ubuntu добавлена в статью.
      2. Александр
        03 марта 2020, 23:17
        Здравствуйте. Пытаюсь повторить вашу инструкцию. Сделал все по аналогии, кроме настройки виртуальных хостов в Apache, в этом пункте я указал свою папку. Создал html файл index.html Но по адресу mysite.ru/index.html доступ запрещен Forbidden. Что мне необходимо исправить?
        1. Александр Мальцев
          05 марта 2020, 14:50
          Здравствуйте! Проверьте есть ли у вас конфиге хоста эти строчки:
          AllowOverride All
          Require all granted
          
        2. Евгений
          12 февраля 2020, 10:34
          Все поставилось нормально, но вот с правами какая то беда. Mysql не хочет запускаться. при старте пишет.
          Starting MySQL database server mysqld No directory, logging in with HOME=/
          все делал по инструкции как в статье
          Подскажите, в чем может быть дело?
          1. Александр Мальцев
            24 февраля 2020, 15:11
            Попробуйте изменить директорию для пользователя MySQL:
            sudo service mysql stop
            sudo usermod -d /var/lib/mysql/ mysql
            sudo service mysql start
            
          2. Владимир
            20 ноября 2019, 19:57
            Подскажите, пожалуйста, что нужно настроить, чтобы можно было открывать этот сайт в моей локальной сети с других устройств. Если ввожу ip хоста то попадаю на стандартную страницу apache (/var/www/html/index.html). Что нужно сделать, чтобы по ip хоста открывалось /mnt/d/Projects/test.ru/?
            1. Александр Мальцев
              22 ноября 2019, 14:18
              Можно назначить порт.
              Для этого в /etc/apache2/ports.conf можно добавить, например, порт 8080:
              Listen 80
              Listen 8080
              
              После этого перейти в /etc/apache2/sites-available/test.ru.conf и изменить в нём порт на 8080:
              <VirtualHost *:8080>
              
              Теперь чтобы открыть этот сайт нужно в адресной строке ввести ip хоста и порт, например:
              192.168.0.101:8080

              Другой вариант‪ — это просто открыть C:\Windows\System32\drivers\etc\hosts и добавить в него (вместо 192.168.0.101 нужно указать ip хоста):
              192.168.0.101 test.ru
            2. Евгений
              08 ноября 2019, 15:33
              Александр спасибо тебе! ты очень крутой :) любой вопрос приводил именно на этот сайт. ЗЫ, Фича интересная буду тестировать
              1. Александр Мальцев
                10 ноября 2019, 10:59
                Евгений, благодарю за отзыв.
              Войдите, пожайлуста, в аккаунт, чтобы оставить комментарий.