| Version | Date | Notes | By |
|---|---|---|---|
| 0.9 | 2025-08-28 | Updated PHP version to 8.4 and added extensions | BRB |
| 0.8 | 2022-05-04 | Updated PHP version to 8.1 and added extensions | BRB |
| 0.7 | 2020-09-09 | Updated wkhtmltopdf instructions | FPA |
| 0.6 | 2020-01-21 | Restructured | JFM |
| 0.5 | 2019-06-17 | Added wkhtmltopdf and offline installation | JTO |
| 0.4 | 2018-07-16 | Added WebDAV information. New extensions. Small fixes | JFM |
| 0.3 | 2017-10-30 | Changed the sqlsrv driver version | JFM |
| 0.2 | 2017-10-30 | Added laravel-echo-server and laravel queues configuration | JFM |
| 0.1 | 2017-04-07 | Initial release | JFM |
| Software | Version | Notes |
|---|---|---|
| PHP for windows | 8.4 VC16 x64 Non Thread Safe | |
| IIS Rewrite Module | Current | |
| Visual C++ Redistributable for Visual Studio 2015 | Current | |
| Redis | 3.0.x | |
| Composer | Current | |
| NodeJS | 22.x.x | |
| wkhtmltopdf | Stable | |
| PHP sqlsrv extension | Check requirements | System requirements |
| ODBC Driver | ODBC Driver 17 | |
| Ioncube Loader | Windows VC15 (Non-TS) (64 bits) | Only needed for encrypted installations |
| Git | Current | |
| PHP_IMAGICK | 8.4 Not Thread Safe x64 | Follow installation guide (all DLLs in PHP folder) |
Bit Bash Here then run git --versionRedis does not officialy build Windows binaries, but you can use the ones officially supported by the Microsoft Open Technologies team.
As of the moment of writing this guide, the production ready version is the latest from the 3.0.x branch The 3.2.x is available but not ready for production
This guide was base on the official installation instructions: http://php.net/install.windows
c:\php| Directive | Notes |
|---|---|
| cgi.force_redirect = 0 | |
| cgi.fix_pathinfo=1 | |
| fastcgi.impersonate = 1 | |
| fastcgi.logging = 0 | |
| sys_temp_dir = "c:\temp" | Change to the system's temp folder. |
| extension_dir = "c:\php\ext" | Change to the PHP extension folder. |
| post_max_size = 108M | Change to something like this. |
| upload_max_filesize = 102M | Change to something like this. |
| max_execution_time = 60 | Change to something like this. |
curl.cainfo = 'c:/php/cacert.pem'Uncomment/Add the following extension in php.ini file
Installing the sqlsrv driver
Folder permissions
You must give the user IUSR and the group IIS_IUSR permissions to read both folders, and write permissions to the folder storage and bootstrap/cache on the backend folder
You have 2 choice, either use sub-domains (best option) or use different ports
The frontend and the backend need to be on a different website, you can use the default web site for the frontend and create a new one for the backend.
Frontend
If you can use the frontend just rename it to frontend and go to step 3
application/font-woff2 for the extension .woff2Backend
For the backend we need to configure PHP, so there's some extra steps.
<?php phpinfo()This is similar to the Using different ports method, the only difference is that you must fill the Host name with the corresponding sub-domain for each website and you don't need to specify different ports for the frontend and backend since IIS will redirect the request base on the sub-domain
If IIS is configured with the WebDAVModule you may have errors using the PUT verb. To solve it you have to remove it by adding the following lines to the webconfig file
<modules>
<remove name="WebDAVModule"/>
</modules>
<handlers>
<remove name="WebDAV"/>
</handlers>
composer --versioncp .env.example .env, edit it and change the configurations accordingly.cp laravel-echo-server.example.json laravel-echo-server.json, edit it and change the configurations accordingly.composer installphp artisan key:generatephp artisan jwt:secretcomposer require wemake/sgi-....php artisan migrateCheck the development documentation. Export locally and copy to the server
node --version and npm --versionNSSM is used to create services on windows. We need this to better handle laravel-echo-server and laravel queues
npm install -g laravel-echo-server.laravel-echo-server.example.json file to laravel-echo-server.json and configure accordingly.nssm install wemake-laravel-echo-server and configure and configure accordingly (change the paths if needed)Application tab
| Config | Value |
|---|---|
| Path | C:\Users\wemake\AppData\Roaming\npm\laravel-echo-server.cmd |
| Startup directory | C:\inetpub\wwwroot\backend |
| Arguments | start |
Details tab
| Config | Value |
|---|---|
| Display name | Roboyo - Laravel echo server |
| Startup type | Automatic |
I/O tab
| Config | Value |
|---|---|
| Output (stdout) | C:\inetpub\wwwroot\backend\storage\logs\laravel-echo-server.log |
nssm start wemake-laravel-echo-servernssm install wemake-laravel-queue-work and configure accordingly (change the paths if needed)Application tab
| Config | Value |
|---|---|
| Path | C:\php\php.exe |
| Startup directory | C:\inetpub\wwwroot\backend |
| Arguments | artisan queue:work |
Details tab
| Config | Value |
|---|---|
| Display name | Roboyo - Laravel queue work |
| Startup type | Automatic |
I/O tab
| Config | Value |
|---|---|
| Output (stdout) | C:\inetpub\wwwroot\backend\storage\logs\laravel-queue-work.log |
Update the .env file accordingly. Example:
WKHTML_PDF_BINARY="C:/<instalation_path>/bin/wkhtmltopdf.exe"
WKHTML_IMG_BINARY="C:/<instalation_path>/bin/wkhtmltoimage.exe"
You also have to add the IUSR and IIS_IUSRS users to the security properties with read permissions for the wkhtmltopdf folder.
Don't forget to check if IUSR and IIS_IUSRS users have permissions to the backend folder of the application and if they have access to the temp files folder. If not you can create a new temporary files folder with the right permissions for the users. Edit the php.ini and update the following
sys_temp_dir = "<New-directory-created>"
Or you can change the access permissions to the Windows temporary files' directory.