At Laracraft, we’ve experimented with various Windows-based local Laravel development environments, but we weren’t satisfied with the performance and usability of popular options like Vagrant/Homestead, php artisan serve, Laravel Sail, Laragon and others. While these tools work well for simpler Laravel projects or those with small databases, they fall short when handling more complex operations or heavier requests that demand better performance.
So we decided to go for a Laravel setup with WSL and native php, mysql and nginx installation and configuration. Though it might be intimidating to set it up, we are really impressed by the very fast performance and the very flexible configuration. With this guide it should be easy to setup, so this is definitely worth it!
Make sure your Windows version is compatible with WSL: Windows 10, Version 2004 or higher (Build 19041 or higher), or Windows 11
Open your PowerShell as an Administrator and hit:
wsl.exe --install
Wait for the installation to be finished, this may take a while. After that, restart your computer and when you login to your windows account, the command prompt should open automatically and finish the WSL installation. After that you will be asked to enter your user credentilas for WSL.
Now open your WSL terminal and execute these commands one by one:
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-mbstring php8.2-mysql php8.2-tokenizer php8.2-xml php8.2-zip php8.2-fpm
To install composer, execute these commands one by one:
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
Now lets install MySQL:
sudo apt-get install mysql-server
After the installation is finished, we change the root password for MySQL to <code>password<code>, or what ever you prefer. Therefor you have to execute mysql as root:
sudo mysql
With this command you can change the password:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Now leave mysql with enter <code>exit;<code> and test the login as root with the password you set:
mysql -u root -p
If this works, go one with the next step!
You may already have a project, but for the sake of this tutorial, we install a fresh new Laravel application:
cd ~
mkdir code
cd code
composer create-project laravel/laravel example-app
We need a database, let's create one:
mysql -uroot -p -e "create database example_app"
Adjust your <code>.env<code> file and set:
DB_DATABASE=example_app
DB_USERNAME=root
DB_PASSWORD=password
Now lets migrate the database:
cd example-app
php artisan migrate
The last thing we need now is a webserver, let's install NGINX:
sudo apt-get install nginx
As we want to use a pretty url, make sure to add example-app.test to your hosts file, so that when we enter it in the browser, it resolves to our local nginx. Therefor open the Editor as Administrator and open: <code>C:\Windows\System32\drivers\etc\hosts<code> (make sure to list "All files", in the open file dialog, else the host file will not be shown).
Now add the following new line at the end of the file:
127.0.0.1 example-app.test
Let's now configure nginx! Create the following file:
sudo nano /etc/nginx/sites-available/example-app
And paste the default Laravel Nginx config:
Adjust the <code>server_name<code>, <code>root<code> and maybe the <code>fastcgi_pass<code> sockets (if you installed a differenct php version) directives to your needs!
Now enable this site:
sudo ln -s /etc/nginx/sites-available/example-app /etc/nginx/sites-enabled/example-app
Check if nginx config syntax is correct and reload:
sudo nginx -t
sudo nginx -s reload
We experienced that it's the best to change nginx and php-fpm user to your current user, so you will never get file permission issues. The thing is, if you just change the rights of your curent folder to the <code>ww-data<code> group, you will still get issues, if new files gets created on a git pull, for instance.
So let's change nginx to your current user at the very top of the file:
sudo nano /etc/nginx/nginx.conf
Also change fpm user and group to your current user:
sudo nano /etc/php/8.2/fpm/pool.d/www.conf
Now restart fpm and nginx:
sudo service php8.2-fpm restart
sudo service nginx restart
Thats it, now hit <code>http://example-app.test<code> in your browser and enjoy these very fast response times!
We managed to reduce execution time on complex operations from 13s down to 1,5s, which is an increase of about 800%!
The rich text element allows you to create and format headings, paragraphs, blockquotes, images, and video all in one place instead of having to add and format them individually. Just double-click and easily create content.
A rich text element can be used with static or dynamic content. For static content, just drop it into any page and begin editing. For dynamic content, add a rich text field to any collection and then connect a rich text element to that field in the settings panel. Voila!
Headings, paragraphs, blockquotes, figures, images, and figure captions can all be styled after a class is added to the rich text element using the "When inside of" nested selector system.
<code>test123<code>
<span style="color:red;">asdfasdf</span>
composer require spatie/laravel-artisan-dispatchable