Как настроить среду разработки Laravel для Windows без Docker
Медленные установки
Мы в Laracraft перепробовали множество локальных сред разработки Laravel под Windows, но нас не устроила производительность и удобство использования таких известных сред, как: php artisan serve, Homestead/Vagrant, Laravel Sail, Laragon и т.д… Эти инструменты, безусловно, очень хороши, если вы, возможно, создаёте новый Laravel-проект, в котором нет очень сложных операций и запросов, и вы работаете только с небольшой базой данных. Но если вам нужна большая производительность для тяжёлых запросов, то этих инструментов будет недостаточно:
php artisan serve
- медленный
- нет красивого url
- может обрабатывать только один запрос одновременно (однопоточный)
Homestead/Vagrant
- медленный
- сложная настройка
- ресурсоёмкий (процессор и память)
Laravel Sail
- медленный
- нет красивого url
- очень утомительная настройка при необходимости одновременной работы нескольких приложений (проброс портов)
- может обрабатывать только один запрос за раз (однопоточный)
Laragon
- Laragon неплох, но не такой быстрый, как наше решение
- нельзя одновременно запускать несколько приложений с разными версиями php
Создадим быструю установку
Поэтому мы решили использовать Laravel с WSL и собственной установкой и настройкой php, mysql и nginx. Несмотря на то, что установка может показаться пугающей, мы действительно впечатлены очень быстрой производительностью и гибкостью конфигурации. С помощью этого руководства настройка должна быть лёгкой, так что это определённо стоит того!
Требования
Убедитесь, что ваша версия Windows поддерживает WSL: Windows 10, версия 2004 или выше (Build 19041 или выше), или Windows 11
Установка WSL
Откройте PowerShell с правами администратора и запустите команду:
wsl.exe --install
Дождитесь окончания установки, это может занять некоторое время. После этого перезагрузите компьютер, и при входе в учётную запись windows автоматически откроется командная строка, которая завершит установку WSL. После этого вам будет предложено ввести учётные данные пользователя для WSL.
Установка PHP
Теперь откройте терминал WSL и поочерёдно выполните следующие команды:
sudo apt-get update
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt install openssl unzip php8.2-cli php8.2-bcmath php8.2-curl php8.2-json php8.2-mbstring php8.2-mysql php8.2-tokenizer php8.2-xml php8.2-zip php8.2-fpm
Установка Composer
Для установки composer
выполните последовательно следующие команды:
cd ~
curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php
HASH=`curl -sS https://composer.github.io/installer.sig`
php -r "if (hash_file('SHA384', '/tmp/composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer
Установка MySQL
Теперь установим MySQL:
sudo apt-get install mysql-server
После завершения установки меняем пароль root для MySQL на password, или на то, что вам больше нравится. В связи с этим необходимо запустить mysql
от имени root:
sudo mysql
С помощью этой SQL команды можно изменить пароль:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Теперь выйдите из mysql с помощью команды exit;
и проверьте подключение к mysql от имени root с заданным паролем:
mysql -u root -p
Если все получилось, переходите к следующему шагу!
Установка Laravel
Возможно, у вас уже есть проект, но в рамках данной статьи мы установим новое приложение Laravel:
cd~
mkdir code
cd code
composer create-project laravel/laravel example-app
Нам нужна база данных, давайте создадим её:
mysql -uroot -p -e "create database example_app"
Настройте .env
файл и установите:
DB_DATABASE=example_app
DB_USERNAME=root
DB_PASSWORD=password
Теперь перейдём к миграции базы данных:
cd example-app
php artisan migrate
Установка и настройка NGINX
Последнее, что нам сейчас нужно, — это веб-сервер, давайте установим NGINX:
sudo apt-get install nginx
Поскольку мы хотим использовать красивый url, не забудьте добавить example-app.test
в файл hosts
, чтобы при вводе его в браузер он разрешался в наш локальный nginx. Для этого откройте редактор от имени администратора и откройте: C:\Windows\System32\drivers\etc\hosts
(убедитесь, что в диалоге открытия файла указан список "Все файлы", иначе файл hosts
не будет показан).
Теперь добавьте в конец файла следующую новую строку:
127.0.0.1 example-app.test
Теперь давайте настроим nginx! Создайте следующий файл:
sudo nano /etc/nginx/sites-available/example-app
И вставьте стандартную конфигурацию Laravel Nginx:
server {
listen 80;
listen [::]:80;
server_name example-app.test;
root /home/zacha/code/example-app/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
Настройте директивы server_name
, root
и, возможно, fastcgi_pass
сокет (если вы установили другую версию php) в соответствии с вашими потребностями!
Теперь включите этот сайт:
sudo ln -s /etc/nginx/sites-available/example-app /etc/nginx/sites-enabled/example-app
Проверьте правильность синтаксиса конфигурации nginx и перезагрузите его:
sudo nginx -t
sudo nginx -s reload
По нашему опыту, лучше всего сменить пользователя nginx
и php-fpm
на текущего пользователя, тогда проблем с правами на файлы не возникнет. Дело в том, что если просто изменить права на текущую папку на группу www-data
, то проблемы все равно возникнут, если, например, при git pull
будут созданы новые файлы.
Поэтому давайте изменим nginx на вашего текущего пользователя в самой верхней части файла:
sudo nano /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log logs/error.log;
pid logs/nginx.pid;
events {
worker_connections 4096; ## Default: 1024
}
http {
include conf/mime.types;
include /etc/nginx/proxy.conf;
include /etc/nginx/fastcgi.conf;
index index.html index.htm index.php;
default_type application/octet-stream;
Также измените пользователя и группу fpm на вашего текущего пользователя:
sudo nano /etc/php/8.2/fpm/pool.d/www.conf
[www]
user = www-data
group = www-data
listen = /run/php/php8.2-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
Теперь перезапустите fpm и nginx:
sudo service php8.2-fpm restart
sudo service nginx restart
Готово
Вот и все, теперь откройте http://example-app.test
в своём браузере и наслаждайтесь очень быстрым временем отклика!
Нам удалось сократить время выполнения сложных операций с 13 с. до 1,5 с., что означает прирост около 800%!