Un serveur WEP en local
WEP: Windows, Nginx (Engine-X), PHP
Introduction (trop longue)
J'ai utilisé plusieurs outils au fil des années pour dev en local en php, passant de Xampp, à Wamp et au petit dernier Laragon. Ce dernier à l'avantage de proposer l'utilisation de Nginx à défaut d'Apache.
J'utilisais une vielle version de Laragon, aujourd'hui je me décide à le mettre à jour et je constate que ce dernier est maintenant passé sous Licence. Je comprends et respecte tout à fait l'auteur du Soft qui doit y consacrer beaucoup de temps, lui même explique que l'on peut toujours utiliser la v6 si on ne souhaite pas acheter de licence.
Cela fait plus de 10ans que je fais du PHP, je suis en capacité de mettre en place un serveur Web et pourtant je suis toujours dépendant d'un soft tier pour le dev en local.
Le grand atout de ces derniers et d'automatiser un certains nombre de tâches, les certificats ssl auto-signés, l'édition du fichier host, la possibilité d'ajouter tout un tas de services: nodejs, les différentes DB, un service Mail, ils sont donc très pratique.
A l'heure actuelle, il est de plus en plus facile d'installer sous Windows NodeJS, Nginx, PHP, des exécutables sont disponibles. Alors, je me suis dis pourquoi pas tenter de se configurer un petit serveur LEMP WEP en local, avec l'aide de ChatGPT, mon expérience en déploiement de serveur Web, cela doit être faisable!
Le serveur HTTP/S
Dans un premier temps, on va mettre en place Nginx.
La doc est plutôt claire.
On a un exécutable, ce dernier s'utilise via la console et n'est pas disponible en tant que service:
start nginx> permet de démarrer Nginxtasklist /fi "imagename eq nginx.exe"> permet de voir si les processus sont bien lancésnginx -s stop> arrêt brutalnginx -s quit> stopnginx -s reloadnginx -s reopen
Pour les fichiers de conf. de chaque site (virtual host), on peut les placer où l'on veut, faut adapter la configuration en conséquence.
Les certificats auto-signés
Perso, je les place dans un sous dossier "ssl" du répertoire "nginx". Dans ce dossier, je créer le fichier localhost.cnf:
[req]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn
[dn]
CN = localhost
[req_ext]
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
[ext]
subjectAltName = @alt_names
Puis, j'exécute la commande suivante:
openssl req -x509 -nodes -days 365 ^
-newkey rsa:2048 ^
-keyout localhost.key ^
-out localhost.crt ^
-config localhost.cnf ^
-extensions ext
Alors oui ce n'est pas parfait, on a toujours l'avertissement dans le navigateur.
Un "virtual Host"
Voici un exemple de config pour un site:
server {
listen 80;
server_name mon_super_site.local;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
http2 on;
server_name mon_super_site.local;
ssl_certificate C:/username/bin/nginx/ssl/localhost.crt;
ssl_certificate_key C:/username/bin/nginx/ssl/localhost.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
root C:/username/projects/mon_super_site/www;
index index.html index.php index.htm;
location / {
try_files $uri $uri/ =404;
# ou on redirige tout vers l'index
#try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Adapter suivant les besoins.
Pour lancer Nginx, suffit de lancer l'exécutable nginx.exe dans une console.
Le fichier Host
Afin de faire fonctionner notre NDD en local il est nécessaire de modifier le fichier %SystemRoot%\System32\drivers\etc\hosts.
On indique le NDD en ajoutant une ligne au fichier: 127.0.0.1 mon-super-site.local.
Ici on voit l'intérêt de développer un soft qui automatise cette tâche pour nous.
PHP
On récupère l'archive qui va bien depuis windows.php.net
Perso, j'ai un dossier bin qui contient le répertoire nginx et un répertoire php qui contiendra les différentes versions.
php.ini
Copier l'un des deux fichier php.ini-xxx, le renommer en php.ini.
Perso j'active souvent ces extensions en dev: curl, exif, fileinfo, gd, intl, mbstring, pdo_mysl et pdo_sqlite.
Ne pas oublier d'indiquer où aller chercher ces extensions via: extension_dir = "ext"
Ne reste plus qu'à démarrer php: php-cgi.exe -b 127.0.0.1:9000 -c php.ini
On fait ainsi pour chaque version de php que l'on souhaite utiliser, bien sûre il faut indiquer un port différent à chaque fois.
Automatiser via .bat
Après avoir un peu batailler avec ChatGPT voici une première approche. Un petit script qui lance php et nginx, où l'on garde la main pour exécuter les commandes Nginx.
Et un autre pour arrêter php et Nginx.
Démarrer Php et Nginx
Voici start-nginx-php.bat:
@ECHO OFF
REM —————————————————————————
REM 0) Forcer la console en UTF-8
REM —————————————————————————
chcp 65001 >nul
REM —————————————————————————
REM 1) PHP
REM —————————————————————————
REM Démarre php-cgi.exe en mode FastCGI sur le port 9000
cd /d C:\username\bin\php\8.3.21-nts
start /B "" php-cgi.exe -b 127.0.0.1:9000 -c php.ini
REM —————————————————————————
REM 2) NGINX
REM ————————————————————————
cd /d C:\username\bin\nginx
start /B "" nginx.exe
REM —————————————————————————
REM 3) Message et reprise de la main
REM —————————————————————————
echo.
echo ===========================================
echo PHP et NGINX sont démarrés en arrière-plan.
echo Tapez vos commandes NGINX (e.g. nginx -s reload).
echo ===========================================
echo.
REM Lancer une nouvelle invite interactive dans cette même fenêtre
cmd
Stopper Php et Nginx
stop-nginx-php.bat:
@ECHO OFF
taskkill /F /IM php-cgi.exe
taskkill /F /IM nginx.exe
J'ai commencé à ajouter MariaDb. Je pense faire un projet à part entière dédié à un serveur WEMP pour dev en local.
Les sources: Mon Xp et chatGPT.
Voici quelques sources utilisées par chatGPT:
- webscoot.io - Create Self Signed Certificate: Ubuntu, Windows, Nginx
- humankode.com - Create a Self-Signed Certificate for Nginx in 5 Minutes
- stackoverflow.com - How can I generate a self-signed SSL certificate using OpenSSL?
- dev.to - [Windows] Using a self-signed certificate for HTTPS connection with Nginx
- knowledge.digicert.com - How to create a CSR using OpenSSL & install your SSL certificate on a Nginx server
- dev.to - Windows 10 Nginx + PHP
- odan - gist.github.com - Nginx and PHP Setup on Windows
- brosahay - gist.github.com -Setup Nginx Server with PHP on windows