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:

ImageDescription
unit:1.32.0-minimalNo language modules; based on the debian:bullseye-slim image.
unit:1.32.0-go1.21Single-language; based on the golang:1.21 image.
unit:1.32.0-jsc11Single-language; based on the eclipse-temurin:11-jdk image.
unit:1.32.0-node20Single-language; based on the node:20 image.
unit:1.32.0-perl5.38Single-language; based on the perl:5.38 image.
unit:1.32.0-php8.2Single-language; based on the php:8.2-cli image.
unit:1.32.0-python3.11Single-language; based on the python:3.11 image.
unit:1.32.0-ruby3.2Single-language; based on the ruby:3.2 image.
unit:1.32.0-wasmSingle-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.

Unit-welcome

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.