WT-NMP - portable Nginx Mysql Php development stack for Windows
===============================================================
A portable, preconfigured, lightweight, fast and stable server stack for developing php mysql applications on windows, based on the excellent webserver Nginx. Just unzip and start developing!

Copyright (C) 2013-2014 Dragoș Alexandru Ioniță
Copyright (C) 2013-2014 http://wtriple.com
All rights reserved.
http://wtriple.com/wtnmp/
https://sourceforge.net/projects/wtnmp
This software is a fork of nmp-server http://code.google.com/p/nmp-server/



Current Package contains:
-------------------------
- Nginx web server - 1.7.4
- Mysql database server - 5.6.20
- Php scripting language - 5.4.32 & 5.5.16
- Node.js server-side JavaScript engine
- HeidiSql.exe mysql database manager
- WinSCP SFTP client 
- Php Extensions: opcache, xdebug, xcache.
- MSmtp sendmail smtp client wrapper
- Composer.phar dependency manager for php 
- Adminer.php web based mysql database manager
- Reg.php regular expressions tester for both PHP and JavaScript
- wt-nmp.exe server manager


Features:
---------
- TRULY PORTABLE, you can zip it and take it with you, or you can move it to a different location on your filesystem. Configuration files are updated automatically after you move WT-NMP to a different machine/folder. 
- Easy to upgrade: Download / Unzip / Overwrite!. Backups, configuration files, database data, included libraries and projects are persistent during upgrades (not overwritten).
- Lightning-fast web server. Optimized for best performance. Preconfigured servers for fast development.
- Command line tools: mysql client, php console, node consloe, composer , npm, 
- For easy access, all configuration files are stored in one place: WT-NMP\conf and all log files are stored in one folder: WT-NMP\log.
- Multiple PHP Versions and version switcher. Dynamic number of php-cgi processes.
- The server manager runs minimized in the system tray and monitors, logs and restarts crashed servers.
- Easy project Upload, Sync and Browse with WinSCP
- Optional MySQL database daily backups can be enabled with --backup. Up to 7 backup files will be created per database per weekday.
- Ideal solution for multiple development environments or parallel configurations on a desktop computer. You can have any number of WT-NMP clones on your computer, all pointing to a single projects directory.



Installing:
-----------
- [Download the latest installer](http://wtriple.com/wtnmp/). The instaler produces a portable folder.
- Choose any instalation folder you want.



Upgrading:
-----------
- [Download the latest installer](http://wtriple.com/wtnmp/). The instaler produces a portable folder.
- The installer also upgrades previous ZIP instalations as long as you choose the same destination path.



Portability:
------------
- WT-NMP is portable, but the installer must be run once on each new machine.. 
- The installer registers php, mysql, composer and node executables to PATH. If you move WT-NMP somwhere else on your filesystem, or to a new machine, those executables won`t be available globablly anymore.
- So, if you need to copy/clone WT-NMP to a new machine, you need to run the installer once, then overwrite the folder with the cloned folder, even if the new location is different than the old location. 
- If you need to clone again, just copy / overwrite the files. The installer needs to be run only the first time, on each machine.
- For example, sync-ing your work from C:\MyWork\WT-NMP on Machine1 to D:\WT-NMP on Machine2 shold be done by running the installer once on Macine2 (and choosing D:\WT-NMP as destination) then overwriting D:\WT-NMP each time you need to sync your work.





Command line arguments:
-----------------------
* -d	    _--debug_			Display debug messages
* -s	    _--startServers_		Starts all the servers in background and exits
* -k	    _--killAll_			Kills all running servers and exits
* -b        _--backup_			Enables automatic daily backups
* -l	    _--latestPhp_		Forces the use of the latest PHP version
* -p=n	    _--phpCgiServers=n_		Forces the number of PHP-CGI Servers, between 1 and 9
* -j	    _--hideProjects_		Hides Projects list	
* -n	    _--noUpdates_		Disables weekly Update checks	
* __example:__ D:\Work\bin\wt-nmp.exe --debug --backup --phpCgiServers=2 




Issues:
------------
- Nginx: One of the reasons Nginx is so fast, it`s because it does not process .htaccess files. Therefore URL Rewriting and User Access must be set in nginx.conf.
- MySql slow connection on windows 8: changing mysql_connect('localhost','root','') -> mysql_connect('127.0.0.1','root','') solves the problem.
- MySql 5.6 has a bug causing it to use too much memory: add table_definition_cache = 400 to mysql.ini
- PHP is configured in a very restrictive way, like on most hosting providers. Comment out disable_functions, disable_classes, open_basedir in conf/php.ini, if you need a more permissive PHP configuration.
- PHP Extensions: most of them are disabled by default, enable them in conf/php.ini (see bin/php-5.x.x/php.ini for opcache, xdebug, xcache)
- PHP MySql extension is disabled by default and is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the MySQLi or PDO_MySQL extension should be used. If you really want to enable mysql extension, add or uncomment in conf/php.ini: extension = php_mysql.dll
- PHP: Starting only one PHP-CGI server with wt-nmp.exe --phpCgiServers=1 will result in slow ajax requests since Nginx will not be able to process PHP scripts simultaneous.
- XCache PHP Extension: Disabled by default. Due to the limitations of php under windows, (only one process per CGI server, forcing wt-nmp to start more php-cgi servers instead of starting one server with more processes), the XCache PHP Extension will use different shared memory buffers for each php-cgi server. This will use more memory and will make XCache Variable Cache inconsistent between php processes. If you intend relay on it, you should use --phpCgiServers=1. XCache Opcode Cache will not be affected, but it will waste memory.
- OPCache PHP Extension: when enabled, only one php-cgi server can be safely started. Starting more PHP-CGI servers might return "Fatal Error Unable to reattach to base address"



Debuging Configuration Files:
-----------------------------
- After changing the configuration files, one server might refuse start. In order to find out the reason, you can follow this steps:
- Kill all servers and restart wt-nmp.exe --debug ( Display debug messages )
- Copy from the debug logBox the full command, with arguments, used to start that server, under "Start XXX SERVER: "; For example, Start Nginx SERVER: d:\wt-nmp\nginx-1.2.8\nginx.exe  -c d:\wt-nmp\conf\nginx.conf  -p "d:\wt-nmp\nginx-1.2.8"
- Open a Windows command line terminal with Start > Run > cmd , Paste the command and observe the output.
- Also check the server log in WT-NMP/log
- If nothing works, delete that configuraton file, or the whole WT-NMP/conf directory, kill all servers and restart wt-nmp.exe. The wt-nmp.exe server manager will copy the default configuration files to WT-NMP/conf.



***Release History***	| Nginx		| MySQL		| PHP				| Others
------------------------|---------------|---------------|-------------------------------|---------------
[wt-nmp-14.09](http://sourceforge.net/projects/wtnmp/files/wt-nmp-14/wt-nmp-14.09.exe/download)	| 1.7.4		| 5.6.20	| 5.4.32 & 5.5.16	| opcache xdebug xcache composer node.js npm winscp
[wt-nmp-14.06 Installer](http://sourceforge.net/projects/wtnmp/files/wt-nmp-14/wt-nmp-14.06.exe/download)	| 1.7.1		| 5.6.19	| 5.4.29 & 5.5.13	| opcache xdebug xcache composer node.js npm winscp
[wt-nmp-14.06 Zip](http://sourceforge.net/projects/wtnmp/files/wt-nmp-14/wt-nmp-14.06.zip/download)		| 1.7.1		| 5.6.19	| 5.4.29		| opcache xdebug xcache composer node.js npm winscp
[wt-nmp-14.05 Installer](http://sourceforge.net/projects/wtnmp/files/wt-nmp-14/wt-nmp-14.05.exe/download)	| 1.7.0		| 5.6.17	| 5.4.28 & 5.5.12	| opcache xdebug xcache	
[wt-nmp-14.05 Zip](http://sourceforge.net/projects/wtnmp/files/wt-nmp-14/wt-nmp-14.05.zip/download)		| 1.7.0		| 5.6.17	| 5.4.28		| opcache xdebug xcache
[wt-nmp-14.03 Installer](http://sourceforge.net/projects/wtnmp/files/wt-nmp-14/wt-nmp-14.03.exe/download)	| 1.5.11		| 5.6.16	| 5.4.25 & 5.5.9	| opcache xdebug xcache	
[wt-nmp-14.03 Zip](http://sourceforge.net/projects/wtnmp/files/wt-nmp-14/wt-nmp-14.03.zip/download)		| 1.5.11		| 5.6.16	| 5.4.25		| opcache xdebug xcache
[wt-nmp-14.01 Installer](http://sourceforge.net/projects/wtnmp/files/wt-nmp-14/wt-nmp-14.01.exe/download)	| 1.5.8		| 5.6.15	| 5.4.24 & 5.5.8	| opcache xdebug xcache	
[wt-nmp-14.01 Zip](http://sourceforge.net/projects/wtnmp/files/wt-nmp-14/wt-nmp-14.01.zip/download)		| 1.5.8		| 5.6.15	| 5.4.24		| opcache xdebug xcache
[wt-nmp-13.12 Installer](http://sourceforge.net/projects/wtnmp/files/wt-nmp-13/wt-nmp-13.12.exe/download)		| 1.5.7		| 5.6.15	| 5.4.23 & 5.5.7	| opcache xdebug xcache	
[wt-nmp-13.12 Zip](http://sourceforge.net/projects/wtnmp/files/wt-nmp-13/wt-nmp-13.12.zip/download)		| 1.5.7		| 5.6.15	|	 5.4.23	| opcache xdebug xcache
[wt-nmp-13.10](http://sourceforge.net/projects/wtnmp/files/wt-nmp-13/wt-nmp-13.10.zip/download)		| 1.4.3		| 5.6.14	| 5.4.21 & 5.5.5	| opcache xdebug xcache	
[wt-nmp-13.09](http://sourceforge.net/projects/wtnmp/files/wt-nmp-13/wt-nmp-13.09.zip/download)		| 1.4.2		| 5.6.13	| 5.3.27 & 5.4.19 & 5.5.3	| opcache xdebug xcache	
[wt-nmp-13.07.31](http://sourceforge.net/projects/wtnmp/files/wt-nmp-13/wt-nmp-13.07.31.zip/download)		| 1.4.2		| 5.6.13	| 5.4.17	| xcache
[wt-nmp-13.06.09](http://sourceforge.net/projects/wtnmp/files/wt-nmp-13/wt-nmp-13.06.09.zip/download)		| 1.4.1		| 5.6.12	| 5.4.16	| xcache

 

Great Articles:
---------------
* [WordPress in a nutshell: WT-NMP](http://wpkrauts.com/2014/wordpress-in-a-nutshell-wt-nmp/)



How-To:
--------
* Clone/Sync WT-NMP to a new machine:
 - If you copy the WT-NMP folder to a new machine, PHP 5 might not start because php-5.5 requires Microsoft Visual C++ Redistributable 2012.
 - Run wt-nmp installer once on the new machine, then overwrite/sync the whole wt-nmp folder with the cloned one.
* Allow acces from LAN and Internet to your server stack. In /conf/nginx.conf:
		server {
		    listen      *:80    default_server;
		    listen      [::1]:80    ipv6only=on;
		    server_name     ????????.com;
		    location ~ /\.ht {
			deny  all;
		    }
		    location ~ \.php$ {
			try_files $uri =404; 
			include     nginx.fastcgi.conf;
			    fastcgi_pass    php_farm;
			}
		}
* You can use composer.bat to download and keep updated various PHP frameworks and components. In a command line window, run:
 - composer create-project symfony/framework-standard-edition C:\WT-NMP\WWW\myNewSymfProject 2.4.*
 - cd c:\pathTo\WWW
 - composer create-project silverstripe/installer myNewSSProject 3.1.*
 - composer create-project laravel/laravel myNewLarProjec --prefer-dist
* You can upload files or synchronize your project to a server using WinSCP:
 - open WT-NMP Server Manager by clicking on the system tray icon
 - select your project and click on "Setup Remote Connection" icon
 - return to the project list and click on "Upload", "Synchronize" or "Browse" icons
* Installing Extras: Let`s say you want to use nginx 1.2.x instead of the latest version.
 - Kill All servers, [Download the extra package](http://sourceforge.net/projects/wtnmp/files/extras/)
 - Only for Nginx & MySql, delete path\to\WT-NMP\bin\nginx-x.x.x. For PHP it`s ok to keep multiple versions.
 - Unzip the extra package in path\to\WT-NMP\




Changelog:
----------
* wt-nmp-14.09 :
 - cloned php.ini in php bin directory, for composer
 - added the latest versions of Nginx, MySQL, PHP

* wt-nmp-14.05 :
 - wt-nmp.exe server manager now runs minimized in the system tray and monitors and restarts crashed servers
 - added the latest versions of Nginx, MySQL, PHP, adminer
 - added Composer.phar, Node.js, NPM, and WinSCP
 - implemented Update Checker and Project List 
 - implemented Project Upload, Sync and Browse with WinSCP
 - multiple upgrades and fixes.

* wt-nmp-14.03 :
 - added the latest versions of Nginx, MySQL, PHP, adminer

* wt-nmp-14.01 :
 - added the latest versions of Nginx, MySQL, PHP
 - server manager remembers the last php version and number of php processes used
 - better support for multiple development environments on the same OS

* wt-nmp-13.12 :
 - Start servers with windows checkbox
 - Installer 

* wt-nmp-13.10 : 
 - added the latest versions of Nginx, MySQL, PHP
 - added command line option -l --latestPhp
 - changed mysql connection string from 'localhost' to '127.0.0.1' to prevent 1 second delay on windows 8

* wt-nmp-13.09 : 
 - added PHP 5.5.3 allongside 5.4.19 and 5.3.27
 - added opcache xdebug Php Extensions
 - in the server manager you can choose from multiple PHP versions
 - added PSPad free text editor

* wt-nmp-13.07.31 : 
 - added the latest versions of Nginx, MySQL, PHP, XCache
 - Xcache is loaded but disabled by default
 - added msmtp (sendmail alternative for windows) and php mail() tester
 - Fixed a few config bugs

* wt-nmp-13.06.09 : 
 - WT-NMP is now truly portable, the wt-nmp.exe server manager updates configuration files automatically after mooving to a new location
 - MySQL data dir is moved from distribution dir mysql-*/data to wt-nmp basedir in order for database data to be persistent during upgrades
 - removed command line option -w --warningsDisabled
 - renamed command line option -p --phpProcesses to -p --phpCgiServers
 - renamed nginx additional config files to nginx.*.conf
 - moved all executables in /bin
 - added a few icons to the server manager
 - added MySQL Database daily backups --backup

* wt-nmp-13.04.23 : 
 - added the latest versions of Nginx, MySQL, PHP
 - wt-nmp.exe now has a debug logBox and close button
 - all configuration files were moved to C:/wt-nmp/conf to allow easy upgrades
 - reg.php has a new look.
