Разработка PHP в Windows имеет ряд недостатков. Но теперь Microsoft предлагает отличный вариант для PHP-разработчиков, работающих в Windows: подсистема Windows для Linux (WSL). WSL - это уровень совместимости для запуска двоичных исполняемых файлов Linux (в формате ELF) изначально в Windows 10. Microsoft говорит:

«Это в первую очередь инструмент для разработчиков, особенно веб-разработчиков и тех, кто работает над проектами с открытым исходным кодом или с ними».

Мы можем запускать среду Linux непосредственно в Windows без дополнительных затрат на виртуальную машину.

Примечание. Эта статья предназначена не только для участников программы предварительной оценки Windows. Эти методы будут работать и с последними стабильными выпусками Windows 10.

В этом руководстве мы настроим стек LAMP (Ubuntu 16.04, Apache, PHP 7.1, MariaDB) на WSL для разработки. Вы можете настроить другие стеки (например, стек LEMP) аналогичными методами.

Предпосылки

Прежде чем приступить к работе с этим руководством, вам понадобится следующее:

Шаг 1: установка bash в Windows

Во-первых, вам необходимо установить WSL на ваш компьютер.

Вы можете установить другие дистрибутивы Linux из Microsoft Store (Ubuntu, openSUSE, SUSE Linux Enterprise Server 12). Но в этом руководстве мы настроим стек LAMP в Ubuntu, поэтому вам нужно выбрать Ubuntu.

У Microsoft есть отличное руководство по установке WSL, следуйте инструкциям в статье.

Если вы успешно установили Bash в Ubuntu в Windows, давайте установим и настроим простой стек LAMP для разработки.

Шаг 2: установка HTTP-сервера Apache

Мы хотим установить последнюю стабильную версию Apache, но официальные репозитории Ubuntu не содержат последней версии.

Нам нужно добавить PPA для пакетов Apache. Персональный архив пакетов (PPA) - это репозиторий, который позволяет сторонним разработчикам создавать и распространять пакеты для Ubuntu. PPA Ондржея Сури предлагает новейшие пакеты Apache / PHP для Ubuntu.

Чтобы добавить PPA, выполните следующую команду в WSL bash:

sudo add-apt-repository ppa:ondrej/apache2

После настройки PPA обновите локальный индекс пакета:

sudo apt-get update

Установите Apache:

sudo apt-get install apache2

Создайте папку проекта для своих веб-приложений. Эта папка должна находиться за пределами файловой системы WSL. Я рекомендую вам использовать папку «Документы».

Следующая команда создаст серверную папку внутри вашего каталога документов. Замените ВАШЕ ИМЯ ПОЛЬЗОВАТЕЛЯ WINDOWS своим именем пользователя Windows.

sudo mkdir /mnt/c/Users/YOUR WINDOWS USERNAME/Documents/server

Создайте символическую ссылку на выбранную папку.

sudo ln -s /mnt/c/Users/YOUR WINDOWS USERNAME/Documents/server /var/www/devroot

Откройте файл конфигурации виртуального хоста Apache по умолчанию:

sudo nano /etc/apache2/sites-enabled/000-default.conf

Измените корень документа на «/ var / www / devroot», который указывает на папку вашего проекта за пределами файловой системы WSL. Установите ServerName в localhost (если порт 80 зарезервирован приложением Windows, замените 80 неиспользуемым портом):

<VirtualHost *:80>

        ServerName localhost

        ServerAdmin webmaster@localhost
        DocumentRoot  /var/www/devroot

      <Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
      </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Когда вы закончите, сохраните файл, нажав Ctrl-O, и нажмите Enter для подтверждения. Выйти с помощью Ctrl-X.

Откройте ваш любимый редактор Windows / IDE и создайте файл index.html в папке проекта (C: \ Users \ ВАШЕ ИМЯ ПОЛЬЗОВАТЕЛЯ WINDOWS \ Documents \ server) со следующим содержимым:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>It works!</title>
</head>
<body>
  <h1>It works!</h1>
</body>
</html>

Запустите HTTP-сервер Apache:

sudo service apache2 start

Откройте http: // localhost / в своем браузере, и вы должны увидеть заголовок Это работает.

Не забудьте включить необходимые вам модули Apache. Например, вы можете включить mod_rewrite:

sudo a2enmod rewrite
sudo service apache2 restart

Шаг 3: установка сервера MariaDB

Добавьте репо, содержащее последние пакеты MariaDB:

sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] https://ams2.mirrors.digitalocean.com/mariadb/repo/10.2/ubuntu xenial main'

Установите MariaDB:

sudo apt-get update
sudo apt-get install mariadb-server

Вам будет предложено создать пароль root во время установки. Выберите надежный пароль и запомните его, потому что он вам понадобится позже.

Запустите MariaDB:

sudo service mysql start

Запустите следующий сценарий (это изменяет некоторые из менее безопасных параметров по умолчанию):

mysql_secure_installation

Шаг 4: установка PHP

Добавьте PPA для последней версии PHP:

sudo add-apt-repository ppa:ondrej/php
sudo apt-get update

Установите пакеты PHP 7.1:

sudo apt-get install php7.1 libapache2-mod-php7.1 php7.1-mcrypt php7.1-mysql php7.1-mbstring php7.1-gettext php7.1-xml php7.1-json php7.1-curl php7.1-zip

Мы должны перезапустить Apache:

sudo service apache2 restart

Создайте файл info.php в папке вашего проекта со следующим содержимым:

<?php
phpinfo();

Откройте в браузере http: //localhost/info.php. Если PHP работает правильно, вы должны увидеть следующее:

Шаг 5: установка phpMyAdmin

phpMyAdmin - это бесплатный инструмент с открытым исходным кодом для администрирования MySQL и MariaDB.

С помощью phpMyAdmin вы можете легко создавать / управлять своими базами данных с помощью веб-интерфейса.

sudo apt-get install phpmyadmin
  • Когда появится первое приглашение, нажмите Пробел, Tab, а затем Enter, чтобы выбрать Apache.
  • Выберите «Да», когда вас попросят использовать dbconfig-common для настройки базы данных.
  • Введите пароль root для MariaDB
  • Выберите пароль для самого приложения phpMyAdmin

Включите необходимые расширения PHP:

sudo phpenmod mcrypt
sudo phpenmod mbstring

Перезагрузите Apache:

sudo service apache2 restart

Теперь вы можете получить доступ к phpMyAdmin по следующему URL-адресу: http: // localhost / phpmyadmin /
Вы можете войти в систему, используя имя пользователя root и пароль root, который вы установили во время установки MariaDB.

Шаг 6: установка Composer

Composer - это менеджер пакетов для PHP. Он позволяет вам устанавливать / обновлять библиотеки, от которых зависит ваш проект. Если вы разработчик PHP, вы, вероятно, используете composer.

Посетите страницу загрузки Composer и следуйте инструкциям в разделе установки из командной строки. После успешной установки Composer вы можете установить его глобально:

sudo mv composer.phar /usr/local/bin/composer

Теперь его можно запустить из любого места, набрав:

composer

Шаг 7: установка Git:

Git - это система контроля версий, которая в основном используется для управления исходным кодом. Узнайте больше о Git здесь.

Вы можете установить его, выполнив следующую команду:

sudo apt-get install git

Прежде чем использовать Git (и если вы с ним не знакомы), прочтите раздел Как настроить Git из Как установить Git в учебнике Ubuntu 16.04.

Шаг 8: автоматический запуск LAMP на WSL (необязательно)

Фоновые задачи в настоящее время не поддерживаются в WSL. Когда вы закроете Bash, ваши службы (Apache и MariaDB) остановятся.

Примечание для участников программы предварительной оценки Windows. Фоновые задачи теперь поддерживаются в WSL, начиная с сборки Windows Insider Build 17046 (подробнее см. в следующем сообщении блога: Поддержка фоновых задач в WSL), но автоматическая запуск сервисов по-прежнему недоступен.

К сожалению, автоматический запуск ваших сервисов немного затруднен.

Настроим автозапуск!

Нам нужно запустить сервисы без ввода пароля.

Прежде чем начать с этого, ознакомьтесь со следующим руководством Как редактировать файл Sudoers в Ubuntu и CentOS.

Выполните следующую команду:

sudo visudo -f /etc/sudoers.d/services

Скопируйте и вставьте в редактор следующее, а затем сохраните:

%sudo ALL=(root) NOPASSWD: /usr/sbin/service *
%wheel ALL=(root) NOPASSWD: /usr/sbin/service *

Это позволяет нам запускать службы (например, Apache и MariaDB) без использования нашего пароля.

Запустите командную строку (не bash) от имени администратора и запустите:

SchTasks /Create /SC ONLOGON /TN "Start WSL LAMP" /TR "c:\Windows\System32\bash.exe -c 'sudo service apache2 start; sudo service mysql start; cd ~; bash'"

Приведенная выше команда создает задачу, которая запускается автоматически при входе в Windows. Он делает следующее:

  • Запускает Apache
  • Запускает MariaDB
  • Изменяет каталог на ваш домашний каталог

Не забывайте: когда вы закроете окно терминала, службы остановятся, и вам придется перезапустить их вручную!

Шаг 9: добавьте тестовые домены (необязательно)

Когда вы работаете над большим количеством веб-приложений, вам пригодятся несколько тестовых доменов. Например, если вы работаете на myapp.com, вы можете получить доступ к локальной версии для разработки на http: //myapp.t est / вместо http: // localhost / myapp.

Далее вы можете заменить «myapp» на имя своего веб-приложения.
Создайте папку в каталоге проектов для своего веб-приложения:

sudo mkdir /mnt/c/Users/YOUR WINDOWS USERNAME/Documents/server/myapp

Добавьте файл виртуального хоста в Apache:

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

Сохраните следующую конфигурацию в новом файле (не забудьте заменить myapp именем вашего приложения).

<VirtualHost *:80>
ServerName myapp.test
ServerAdmin webmaster@localhost
 DocumentRoot /var/www/devroot/myapp
<Directory /var/www/>
 Options Indexes FollowSymLinks
 AllowOverride All
 Require all granted
 </Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Включите новый сайт:

sudo a2ensite myapp.test

Перезагрузите Apache:

sudo service apache2 restart

Наконец, запустите Блокнот или ваш любимый редактор / IDE в Windows с правами администратора (Запуск от имени администратора) и откройте файл hosts. Он находится в папке c: \ windows \ system32 \ drivers \ etc.

Добавьте следующую строку в конец файла и сохраните ее:

127.0.0.1 myapp.test

Теперь вы можете получить доступ к своему веб-приложению в домене http: //myapp.test/.
Вы также можете добавить дополнительные тестовые домены с помощью того же метода.

Заключение

WSL не заменяет Vagrant или Docker и носит экспериментальный характер. В настоящее время WSL не поддерживает автоматический запуск служб, и на данный момент это одна из самых больших проблем. Однако подсистема Windows для Linux - отличный вариант для разработчиков использовать собственную оболочку Linux в Windows. Я думаю, тебе стоит попробовать!