Windows 11 come server Web senza installare nulla: guida pratica con WSLC

WSL Containers permette di trasformare Windows 11 in un server Web temporaneo o riutilizzabile, eseguendo Nginx, WordPress e applicazioni Python in container Linux isolati.

Un PC Windows 11 può diventare al bisogno un server Web, una macchina WordPress, un ambiente Python o una piccola piattaforma di sviluppo senza installare Nginx, PHP, MariaDB, Python o decine di librerie sul sistema principale. Con WSL Containers (WSLC), l’applicazione vive dentro un container Linux: la si può avviare, fermare, modificare, riaccendere giorni dopo oppure eliminare completamente quando non serve più.

Con un server Web tradizionale si installano servizi e dipendenze sul sistema operativo; con WSLC si porta dentro il container quasi tutto ciò che serve all’applicazione.

Microsoft integra wslc.exe direttamente in Windows Subsystem for Linux (WSL) ed è possibile farvi riferimento per creare, eseguire e gestire container Linux su Windows. Tra le operazioni supportate ci sono avvio, arresto, ispezione, gestione delle immagini, networking e costruzione di immagini personalizzate.

Un piccolo server Web che si accende soltanto quando serve

Immaginiamo di voler avere sul PC un server nginx per prove, documentazione locale o una piccola Web app.

Per cominciare, bisogna controllare se WSL Containers è disponibile: basta aprire la finestra del terminale e digitare wslc version. Se il comando restituisce il numero di versione, WSLC è presente e utilizzabile. In caso contrario conviene verificare la versione di WSL con wsl --version e aggiornare eventualmente WSL tramite wsl --update, per poi riprovare.

Il comando seguente permette di creare un container nginx chiamato web. Da qui in avanti nginx può essere considerato un po’ alla stregua di un servizio “manuale”:

wslc run -d --name web -p 8080:80 nginx

  • Per avviarlo, basta utilizzare il comando: wslc container start web
  • Per arrestare il container: wslc container stop web
  • Per controllare lo stato: wslc container list --all

Il vantaggio pratico emerge soprattutto quando il container è stato personalizzato.

Modificare nginx e ritrovare le modifiche al riavvio

Supponiamo di voler cambiare una configurazione interna del container. È possibile accedere al container usando il comando che segue:

wslc exec -it web /bin/bash

In alternativa, è possibile avviare direttamente un comando dalla finestra del terminale di Windows:

wslc exec web cat /etc/nginx/nginx.conf

Se modifichiamo, ad esempio, un file HTML quindi arrestiamo e riavviamo il container, le modifiche saranno conservate, com’è possibile verificare digitando – nella barra degli indirizzi del browser – localhost:8080:

echo "<h1>Il mio server WSLC</h1>" > /usr/share/nginx/html/index.html

Server WSLC Windows con nginx

Un’app Python sempre pronta, senza installare Python su Windows

Uno degli usi più interessanti dei container WSLC in Windows è creare una piccola Web app Python, pronta per essere eseguita in caso di necessità.

Creiamo in Windows 11 una cartella C:\Python quindi, al suo interno, un file app.py con il seguente contenuto:

from flask import Flask
from datetime import datetime

app = Flask(__name__)

@app.route("/")
def home():
    return f"""

Aggiungiamo un ulteriore file, requirements.txt, con quanto segue:

flask

Creiamo anche Containerfile inserendovi questo:

FROM python:3.13-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY app.py .

CMD ["python", "app.py"]

Il comando seguente costruisce una nuova immagine container usando il Containerfile presente nella cartella corrente. L’opzione -t python-web assegna all’immagine il nome python-web, mentre il punto finale . indica a WSLC di usare la directory corrente come contesto di build, includendo quindi i file necessari come app.py e requirements.txt:

wslc build -t python-web .

Come ultimo passo si può avviare il container:

wslc run -d --name python-web -p 8000:8000 python-web

Aprendo http://localhost:8000 dal browser web, si accede all’applicazione Python appena inserita nel container. Python, pip e Flask rimangono nel container: Windows non ha installato nulla sulla macchina host.

App Python in esecuzione WSLC

Python diventa ancora più interessante con una cartella montata

Se il codice Python cambia spesso, ricostruire l’immagine a ogni modifica con il comando wslc build -t python-web . diventa impraticabile.

Una soluzione consiste nel lasciare Python, Flask e le dipendenze dentro il container, ma mantenere i file sorgenti su Windows. La cartella Windows viene resa visibile all’interno del container tramite un mount.

Supponiamo che il progetto Python si trovi in una cartella specifica sull’host Windows: il container può vedere quella stessa cartella come /app. In pratica app.py continua a essere un normale file Windows, modificabile con VS Code, Notepad++ o qualsiasi altro editor, mentre Python lo esegue dall’interno del container.

Il vantaggio è che non serve ricostruire l’immagine ogni volta che si modifica il codice: l’immagine può contenere soltanto il runtime e le librerie necessarie, ad esempio:

FROM python:3.13-slim

WORKDIR /app

RUN pip install flask

CMD ["python", "app.py"]

Dopo aver costruito una volta l’immagine con wslc build -t python-flask . si può avviare il container usando la seguente sintassi:

wslc run -d --name python-dev -p 8000:8000 -v C:\progetti\mia-app:/app python-flask

Nell’esempio il file C:\progetti\mia-app\app.py diventa, dal punto di vista del container, /app/app.py.

WordPress: un ambiente completo che si accende e si spegne

WordPress rende il concetto alla base di WSLC ancora più evidente perché richiede diverse componenti per funzionare: il CMS stesso, PHP e il DBMS MariaDB.

Possiamo creare una rete virtuale dedicata per mettere in comunicazione due container Linux, quello di WordPress e quello che gestisce il database:

wslc network create wordpress-net

I seguenti due comandi, invece, servono per creare i due container e vanno eseguiti da una finestra PowerShell:

wslc run -d `
  --name wordpress-db `
  --network wordpress-net `
  -e MARIADB_DATABASE=wordpress `
  -e MARIADB_USER=wordpress `
  -e MARIADB_PASSWORD=PasswordForte `
  -e MARIADB_ROOT_PASSWORD=PasswordRoot `
  mariadb:latest
wslc run -d `
  --name wordpress `
  --network wordpress-net `
  -p 8080:80 `
  -e WORDPRESS_DB_HOST=wordpress-db:3306 `
  -e WORDPRESS_DB_USER=wordpress `
  -e WORDPRESS_DB_PASSWORD=PasswordForte `
  -e WORDPRESS_DB_NAME=wordpress `
  wordpress:latest

Ovviamente, al posto delle password indicate, vanno inserite password sufficientemente forti. A questo punto si completa l’installazione di WordPress digitando, in questo caso, http://localhost:8080. Si possono installare temi, plugin e creare contenuti.

WordPress in esecuzione dentro WSLC

Le applicazioni dei container Linux accessibili da smartphone e altri PC

Una volta avviata l’app Python o WordPress, possiamo volerla raggiungere dalla LAN.

Se il PC Windows avesse indirizzo IP privato 192.168.1.2 (basta verificarlo con il comando ipconfig /all) si può ad esempio aprire la porta 8000 o qualunque altra porta sulla quale è in ascolto l’applicazione nel container. Altri dispositivi in rete locale potranno così raggiungerla, dal browser web, digitando http://192.168.1.2:8000.

Prima conviene verificare il binding:

netstat -ano | findstr ":8000"

Se compare 127.0.0.1:8000 significa che il servizio è raggiungibile solo localmente.

Possiamo in quel caso usare Windows come ponte (da finestra PowerShell):

netsh interface portproxy add v4tov4 `
listenaddress=192.168.1.2 `
listenport=8000 `
connectaddress=127.0.0.1 `
connectport=8000

E creare una regola firewall:

New-NetFirewallRule `
-DisplayName "WSLC Python 8000" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 8000 `
-Action Allow

A quel punto smartphone e PC della rete possono collegarsi all’applicazione; il container continua a essere Linux, ma Windows diventa il punto di accesso verso la LAN.

Conclusioni

WSL Containers rende molto più semplice usare Windows 11 come base per servizi Linux temporanei o riutilizzabili: si può avviare un server Web, mantenere pronta un’app Python, creare un ambiente WordPress completo e fermare tutto quando non serve, senza installare runtime e dipendenze direttamente sull’host.

La vera utilità emerge quando si separano bene applicazione, configurazione e dati: il container può essere spento e riavviato mantenendo il proprio stato, il codice può restare sul filesystem Windows tramite mount e i dati importanti possono essere conservati in volumi.

In questo modo WSLC diventa non soltanto uno strumento per fare test, ma un metodo pratico per avere ambienti Linux pronti all’uso senza appesantire Windows.

Ti consigliamo anche

Link copiato negli appunti