Laravel Valet For Windows
Introduction
This is Windows version of Laravel Valet. Valet is a Laravel development environment for minimalists. This Windows version brings even less software than Valet for Mac and you still can share your sites publicly using local tunnels.
Laravel Valet for Windows configures your PC to run Caddy on demand. Then, using c:\Windows\System32\drivers\etc\hosts
file, Valet proxies all requests on the *.dev
domain to point to sites installed on your local machine.
In other words, a blazing fast Laravel development environment that uses roughly les than 1mb of RAM (see RAM usage). Valet isn't a complete replacement for Vagrant or Homestead, but provides a great alternative if you want flexible basics, prefer extreme speed, or are working on a machine with a limited amount of RAM.
Please, keep in mind, an arbitrary php application won't work in Valet, you need to support them via special drivers. Obviously Laravel is supported, as well, as many others popular php headliners, like Symfony, WordPress, Joomla, etc. See the full list here
Important Notes
- Set C:\Windows\System32\drivers\etc\hosts file permissions to allow full control for current user/administrator
- Windows 64-bit is supported (if anyone still needs 32-bit, please, make an issue)
- Run git-bash as Administrator, as only Administrator can handle symlinks on Windows
- Sometimes caddy server just stops working (
502 Bad Gateway
), without any reason, sometimes it stops when the Internet connection is lost, manually runningvalet restart
always helps
Quick How To
This will set up and run a new Laravel application named blog
, accessible on localhost http://blog.dev/. Only php and composer are required to run Valet for Windows. See advanced how to if you don't have them yet.
You must use git-bash or similar shell. This doesn't work in standard Windows cmd, native bash will soon come to Windows, fingers crossed.
composer global require laravel/installer vitr/valet4windows
mkdir ~/Sites && cd ~/Sites
laravel new blog
valet install
valet park
valet scan
valet start
cd blog && valet open
Advanced How To
Install php & composer
As we run php with Caddy in FastCGI mode download NTS (Non Thread Safe) version (x86 or x64) from http://windows.php.net/download#php-7.0. Extract downloaded archive to C:\php
. Copy php.ini-development
as php.ini
and open it in a text editor. Uncomment extension path for Windows
; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir
; extension_dir = "./"
; On windows:
extension_dir = "ext"
uncomment required extensions, e.g.
; Windows Extensions
; Note that ODBC support is built in, so no dll is needed for it.
; Note that many DLL files are located in the extensions/ (PHP 4) ext/ (PHP 5+)
; extension folders as well as the separate PECL DLL download (PHP 5+).
; Be sure to appropriately set the extension_dir directive.
;
;extension=php_bz2.dll
extension=php_curl.dll
;extension=php_fileinfo.dll
;extension=php_gd2.dll
;extension=php_gettext.dll
;extension=php_gmp.dll
;extension=php_intl.dll
;extension=php_imap.dll
;extension=php_interbase.dll
;extension=php_ldap.dll
extension=php_mbstring.dll
;extension=php_exif.dll ; Must be after mbstring as it depends on it
;extension=php_mysqli.dll
;extension=php_oci8_12c.dll ; Use with Oracle Database 12c Instant Client
extension=php_openssl.dll
;extension=php_pdo_firebird.dll
extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
extension=php_pdo_odbc.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
;extension=php_pgsql.dll
;extension=php_shmop.dll
Keep in mind Laravel's server requirement https://laravel.com/docs/master/installation#server-requirements.
Tokenizer PHP Extension is included by default in all Windows builds
Add php path (e.g. C:\php
) to your system path.
Install composer from https://getcomposer.org/download/. Composer-Setup.exe windows installer does all the work for you, including putting the composer bin folder in your system path, so, later you can easily use commands like laravel
or valet
.
Install Composer packages
From this point use git-bash or or other bash compatible terminal, as windows cmd doesn't work for us here. It's too much work to completely rewrite all the valet commands in windows shell and hopefully bash support will be included officially in Windows 10 very soon.
composer global require laravel/installer vitr/valet4windows
hosts
file
Updating your valet scan
it updates your hosts file C:\Windows\System32\drivers\etc\hosts, so, you have to change its properties to allow full control for current user.
Running Valet
If you're on Windows there is a chance that your ports 80 and 443 are already occupied by ISS or Skype. Read more how to disable ISS here http://stackoverflow.com/questions/30901434/iis-manager-in-windows-10 and how to fix Skype here http://stackoverflow.com/questions/22994888/why-skype-using-http-or-https-ports-80-and-443
Open Laravel site
cd blog && valet open (will open http://blog.dev in chrome)
List of supported applications and frameworks
Unresolved Issues
- https://github.com/mholt/caddy/issues/732#issuecomment-207819773 Caddy server couldn't be run as a service on Windows (means the cmd is always open), on a flip side could be easily closed)), here is more https://forum.caddyserver.com/t/requested-plugins-ideas-for-developers/127 https://github.com/mholt/caddy/issues/293 it's requested as a plugin for Caddy, hopefully they implement this soon, but my workaround with an extra cmd window works just fine.
- Rescan parked folders manually after adding new subfolder(s) (could be resolved with some sort of filesystem watcher, e.g. node.js)
- Working with symlinks on Windows requires run git-bash as administrator
Testing
I see the benefits of only integration testing here. I would test each valet command and check the outcomes. Unfortunately, travis doesn't support Windows, so, I perform them manually on Windows machine. Later on, I may try https://ci.appveyor.com/
Roadmap
- compile caddy with this Minimal windows service stub https://github.com/kardianos/minwinsvc
- update valet drivers
- demo how to install SSL certificates (so much fun:)
- Implement the same tests as for Mac and maybe some more
- Clean up all the OS X leftovers
- update caddyserver (Latest release v0.9.0)
- Combine
scan
withpark, forget, link, unlink
- Move caddy exec to bin, Caddyfile config to ~/.valet
- fix larawhale names in readme
- move the history into a standalone history file (see CHANGELOG.md)
- Port all original mac Valet commands
- domain
- fetch-share-url
- forget
- help
- install
- link (requires run git-bash as administrator)
- links
- list
- logs
- on-latest-version
- open
- park
- paths
- restart
- secure, to get rid of in-browser warning you have to manually install certificate (double click on ~.valet\Certificates\blog.dev.crt and install it in the root)
- share
- start
- stop
- uninstall
- unlink
- unsecure
- which