Сайт Романа ПарпалакаБлог20180108

WSL: Линуксовая подсистема в Windows

8 января 2018 года, 01:23

Полноценная веб-разработка на Windows всегда была нелегкой. Для небольших сайтов хватало сборок апача с PHP вроде Денвера. Но как только в проекте требуется memcached, redis или что-то более сложное, настройка окружения существенно усложняется или вообще становится невозможной.

В этот момент разработчики начинают использовать виртуальные машины, локальные или удаленные. Вместе с ними появляются проблемы синхронизации файлов в крупных проектах. Для продуктивной работы PhpStorm индексирует файлы проекта и наблюдает за их изменениями. Когда файлы редактируются на одной операционной системе, а исполняются и управляются из гита на другой, неизбежны задержки синхронизации или тормоза индексирования. Еще и composer где-то нужно запускать, что добавляет путаницы с синхронизацией.

Неискушенный читатель может спросить, зачем вообще разрабатывать на Windows. Причины могут быть разные. Например, корпоративная политика. Админам проще управлять кучей компьютеров с Windows.

Так или иначе, проблема удобной настройки окружения для веб-разработки на PHP была решена только в Windows 10. В ней появилась линуксовая подсистема, или WSL. Она позволяет запускать скомпилированные для линукса бинарники. При этом ядро линукса отсутствует, а системные вызовы к нему на лету транслируются в Win API. В общем, WSL — это Wine наоборот.

Несколько лет после выхода линуксовая подсистема была в состоянии беты, и пользоваться ей было невозможно. Но, начиная с Creators Update, выпущенного в апреле, ситуация изменилась, и nginx вместе с php-fpm нормально заводится и работает.

С практической точки зрения WSL — это командная строка bash, в которой можно устанавливать любой пакет из репозитория Ubuntu 16.04 через apt install. Диски компьютера примонтированы и доступны в файловой системе через /mnt/c, /mnt/d и т. д.

Ребята из Микрософта нацеливались на «интероперабельность»: из bash можно запустить не только линуксовые elf-бинарники, но и обычные exe-файлы. Процессы могут без проблем работать друг с другом. Например, мне было лень делать дамп и переносить базу данных, и я оставил ее в Windows. К ней успешно подключается php-fpm.

Я перевел ежедневную работу на линуксовую подсистему. Обнаружил две проблемы. Первая: не работают unix-сокеты. Решается использованием TCP-сокетов в конфигурации php-fpm и nginx. Вторая: nginx падает при загрузке файлов, из-за того что вызывает нереализованную функцию. Решается запуском встроенного в PHP веб-сервера при тестировании загрузки файлов. Ситуация у меня возникала редко. Может быть ее уже исправили, а я об этом и не знаю.

Еще есть особенность: не работают средства автозапуска программ. Пришлось добавить команды service start nginx в .bashrc.

И еще есть баг. Через некоторое время процесс beam начинает загружать процессор. Приходится останавливать сервис rabbitmq.

Положительные моменты: можно выкинуть MinGW, виртуальные машины и прочие попытки завести bash на Windows, и работать в полноценной линуксовой консоли. Софт в среде разработки идентичен софту на боевом сервере и обновляется одной командой apt upgrade.

Спустя три года я всё-таки перешел на Windows 10, линуксовая подсистема стала в этом решающим фактором.

Поделиться

О схеме URL сервиса генерации картинок с формулами Ctrl Поиграл на рояле

Читайте также

Воспоминания системного администратора
В лицее я не только учился, но еще и проработал лаборантом в кабинете информатики с 2002 по 2004 год.
2011
Windows vs. Ubuntu
Я давно хотел установить линукс и посмотреть, окажется ли он для меня лучше, чем Windows.
2010
Очередь на основе PHP-FPM
Применил на практике прием, когда асинхронная очередь обработки сообщений реализовывается через PHP-FPM по протоколу fastcgi. На удивление, всё заработало сразу, никакой наладки не потребовалось.
2020
Управление зависимостями на примере composer
Недавно я объяснял Илье Бирману, как инструменты управления зависимостями помогают разрабатывать программное обеспечение. С его разрешения публикую адаптированный вариант.
2016

Комментарии

#1. 8 января 2018 года, 13:43. hshhhhh.name пишет:
> Неискушенный читатель может спросить, зачем вообще разрабатывать на Windows. Причины могут быть разные. Например, корпоративная политика. Админам проще управлять кучей компьютеров с Windows.

А вы почему? :)

И я не говорю что линукс сильно лучше, но уж макось то точно луче чем виндоус.
#2. 8 января 2018 года, 14:07. пишет:
Привычка :)

На предыдущей работе действительно была такая корпоративная политика. На текущей мне просто дали ноутбук с уже установленной Windows 10, и я не стал ничего менять.
#3. 28 февраля 2018 года, 16:00. Валетин пишет:
Не остается ощущения, что все таки лучше запускать приложение в полноценной среде(в данном случае в виртуалке)? Хранить проекты в хост системе, а линукс подключить через NFS Synced folder (Vagrant позволяет). Такой вариант я нашел самым производительным.
#4. 23 ноября 2018 года, 09:42. Константин пишет:
> Не остается ощущения, что все таки лучше запускать приложение в полноценной среде(в данном > случае в виртуалке)? Хранить проекты в хост системе, а линукс подключить через NFS Synced
> folder (Vagrant позволяет). Такой вариант я нашел самым производительным.

У кого как, у меня на ноуте например Vagrant через SMB или NFS отдает простую страницу на Laravel около 3 секунд, а иногда и еще дольше.
А теперь представь, сколько времени я могу потратить зря, просто ожидая загрузки?
При этом у меня 4 ядра 8гб RAM и SSD
С докером та же песня, все ну очень медленно

В WSL мне куда больше понравилось работать, на текущий момент еще есть косяки, пришлось хорошенько настроить Nginx конфиги для шустрой работы, но думаю в будущем это будет прорыв и тогда Vagrant канет в лету. Так вот на WSL те же сайты у меня грузятся полностью за 1 — 1,5 сек, а отклик сервера так вообще 200-500мс

Оставьте свой комментарий


Формулы на латехе: $$f(x) = x^2-\sqrt{x}$$ превратится в $$f(x) = x^2-\sqrt{x}$$.
Выделение текста: [i]курсивом[/i] или [b]жирным[/b].
Цитату оформляйте так: [q = имя автора]цитата[/q] или [q]еще цитата[/q].
Других команд или HTML-тегов здесь нет.

Записи