Installazione
Per quanto Unit sia stato prodotto dal team di Nginx, non occorre installare Nginx per usare Unit.
Installazione su Ubuntu e Simili
NOTA
Questo è soltanto descrittivo. Noi non installeremo Unit direttamente sulla macchina host, ma useremo un'immagine Docker.
Occorre conoscere l'esatta versione della release Ubuntu o della versione Ubuntu da cui la corrente distribuzione è derivata.
Su Ubuntu;
cat /etc/lsb-release
Su, p.es., Mint:
cat /etc/upstream-release/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu Jammy Jellyfish"
Le seguenti istruzioni si riferiscono quindi alla release 22.04 di Ubuntu.
Download della firma dei pacchetti:
sudo curl --output /usr/share/keyrings/nginx-keyring.gpg \
https://unit.nginx.org/keys/nginx-keyring.gpg
Editare il file di configurazione repositories:
sudo vim /etc/apt/sources.list.d/unit.list
deb [signed-by=/usr/share/keyrings/nginx-keyring.gpg] https://packages.nginx.org/unit/ubuntu/ jammy unit
deb-src [signed-by=/usr/share/keyrings/nginx-keyring.gpg] https://packages.nginx.org/unit/ubuntu/ jammy unit
Installare Unit:
sudo apt update
sudo apt install unit
Ricercare pacchetti d'uso di Unit con vari linguaggi:
apt search --names-only '^unit-'
Al momento Unit supporta:
- Go
- Java (varie versioni)
- Perl
- PHP
- Python 2.7 e 3.10
- Ruby
- WASM (Web Assembly)
Non si possono installare tutti i linguaggi supportati da Unit.
Per esempio, l'installazione del modulo Go include l'installazione del linguaggio Go stesso. E' un pacchetto poderoso.
Molto meglio usare immagini Docker preconfigurate con Unit e il supporto ad un linguaggio specifico.
Installazione su Docker
Dato un linguaggio di sviluppo, scarichiamo l'immagine Docker che da quel linguaggio e il supporto a Unit.
Per esempio, per il linguaggio Go:
docker pull unit:1.32.0-go1.21
Sono disponibili le seguenti immagini:
| Image | Description |
|---|---|
| unit:1.32.0-minimal | No language modules; based on the debian:bullseye-slim image. |
| unit:1.32.0-go1.21 | Single-language; based on the golang:1.21 image. |
| unit:1.32.0-jsc11 | Single-language; based on the eclipse-temurin:11-jdk image. |
| unit:1.32.0-node20 | Single-language; based on the node:20 image. |
| unit:1.32.0-perl5.38 | Single-language; based on the perl:5.38 image. |
| unit:1.32.0-php8.2 | Single-language; based on the php:8.2-cli image. |
| unit:1.32.0-python3.11 | Single-language; based on the python:3.11 image. |
| unit:1.32.0-ruby3.2 | Single-language; based on the ruby:3.2 image. |
| unit:1.32.0-wasm | Single-language; based on the debian:bullseye-slim image. |
Partenza del Contenitore Unit
Faremo ora partire il contenitore.
Per dargli un indirizzo IP preciso occorre prima creare una rete Docker con CIDR contenente tale indirizzo:
docker network create --subnet 192.168.100.0/24 unitnet
Il lancio del contenitore è:
docker run -d --name unitgo --net unitnet --ip 192.168.100.10 \
-v /www:/www -p 8080:8080 -p 80:80 unit:1.32.0-go1.21 \
unitd --control 192.168.100.10:8080 --no-daemon
Non usiamo il comando di default del contenitore. Creerebbe un socket di controllo Unix, e potremmo accedere al server Unix solo da dentro il contenitore.
Diamo invece come comando del contenitore:
unitd --control 192.168.100.10:8080 --no-daemon
Questo crea il socket di controllo Inet 192.168.100.10:8080, che ci permette di interagire con Unit da un altro contenitore o dalla macchina host.
L'opzione --no-daemon lancia unit in foreground. Se non vi fosse partirebbe in background, non vi sarebbe il processo 1 del contenitore, che terminerebbe subito.
Controllo di Raggiungibilità
Pagina di Default
Apriamo un browser all'indirizzo 192.168.100.10. Se funziona vedremo la pagina di benvenuto.

Lo stesso lo otteniamo col comando curl, una utility che useremo sempre nell'interazione con Unit.
curl -X GET 192.168.100.10
Connessione di Controllo
Per avere una lista della configurazione corrente di Unit, ci colleghiamo alla porta di controllo:
curl -X GET 192.168.100.10:8080
L'output è una stringa JSON con la configurazione corrente.