Come installare e configurare un ambiente JupyterLab su Rocky Linux 9
Su questa pagina
- Prerequisiti
- Passaggio 1: configurazione del firewall
- Passaggio 2 - Installa Nginx
- Passaggio 3 - Installa JupyterLab
- Passaggio 4 - Configura JupyterLab
- Passaggio 5 - Crea il file del servizio JupyterLab
- Passaggio 6 - Installa SSL
- Passaggio 7 - Configura Nginx
- Conclusione
JupyterLab è un ambiente di sviluppo basato sul Web di nuova generazione per Project Jupyter. Il progetto Jupyter è stato sviluppato con l'obiettivo di sviluppare open source, standard aperti e servizi per l'elaborazione interattiva in più linguaggi di programmazione. JupyterLab offre un'interfaccia flessibile che consente agli sviluppatori di lavorare con documenti e attività come notebook Jupyter, editor di testo, terminali e componenti personalizzati in modo flessibile, integrato ed estensibile. JupyterLab è la prossima generazione di Jupyter Notebook e dovrebbe eventualmente sostituirlo. Supporta oltre 40 linguaggi di programmazione, inclusi R, Python, Scala e Julia.
Questo tutorial ti insegnerà come installare e configurare JupyterLab su un server Rocky Linux 9.
Prerequisiti
-
A server running Rocky Linux 9.
-
A non-root user with sudo privileges.
-
A fully qualified domain name (FQDN) pointing to your server. For our purposes, we will use
jupyterlab.example.com
as the domain name. -
SELinux is disabled.
-
Make sure everything is updated.
$ sudo dnf update
-
Install basic utility packages. Some of them may already be installed.
$ sudo dnf install wget curl nano unzip yum-utils -y
Passaggio 1: configurare il firewall
Il primo passo è configurare il firewall. Rocky Linux utilizza Firewalld Firewall. Controlla lo stato dei firewall.
$ sudo firewall-cmd --state
running
Il firewall funziona con zone diverse e la zona pubblica è quella predefinita che utilizzeremo. Elenca tutti i servizi e le porte attive sul firewall.
$ sudo firewall-cmd --permanent --list-services
Dovrebbe mostrare il seguente output.
cockpit dhcpv6-client ssh
Wiki.js ha bisogno delle porte HTTP e HTTPS per funzionare. Aprili.
$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --add-service=https --permanent
Ricarica il firewall per applicare le modifiche.
$ sudo firewall-cmd --reload
Passaggio 2: installa Nginx
Rocky Linux 9 viene fornito con una versione precedente di Nginx. Devi scaricare il repository Nginx ufficiale per installare l'ultima versione.
Crea e apri il file /etc/yum.repos.d/nginx.repo
per creare il repository Nginx ufficiale.
$ sudo nano /etc/yum.repos.d/nginx.repo
Incolla il seguente codice al suo interno.
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
Salva il file premendo Ctrl + X e immettendo Y quando richiesto.
Installa il server Nginx.
$ sudo dnf install nginx -y
Verificare l'installazione.
$ nginx -v
nginx version: nginx/1.22.1
Abilita e avvia il server Nginx.
$ sudo systemctl enable nginx --now
Controlla lo stato del server.
$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2022-12-13 06:07:05 UTC; 31s ago
Docs: http://nginx.org/en/docs/
Process: 146475 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 146476 (nginx)
Tasks: 2 (limit: 5911)
Memory: 1.9M
CPU: 15ms
CGroup: /system.slice/nginx.service
??146476 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
??146477 "nginx: worker process"
Passaggio 3: installa JupyterLab
Controlliamo prima la versione di Python.
$ python -V
Python 3.9.14
Installa il gestore di pacchetti PIP.
$ sudo dnf install python3-pip
Crea una directory per JupyterLab.
$ mkdir jupyterlab
Passa alla directory appena creata.
$ cd ~/jupyterlab
Imposta un ambiente virtuale chiamato jupyterlab_env
.
$ python3 -m venv --system-site-packages jupyterlab_env
Attiva l'ambiente.
$ source jupyterlab_env/bin/activate
Aggiorna il gestore di pacchetti Pip.
(jupyterlab_env) $ pip install --upgrade pip
Installa JupyterLab.
(jupyterlab_env) $ pip install jupyterlab
Passaggio 4: configurare JupyterLab
Per impostazione predefinita, JupyterLab genera un nuovo token ogni volta che lo avvii per concedere l'accesso all'interfaccia. Sostituiamolo con l'autenticazione della password.
Genera un hash della password. Sostituisci LA TUA_PASSWORD
con una password complessa di tua scelta.
(jupyterlab_env) $ python3 -c "from jupyter_server.auth import passwd; print(passwd('YOUR_PASSWORD'))"
Il comando precedente genererà un lungo hash della password. Utilizza la funzione di hashing della password di Argon2. Annota l'hash.
Crea un file di configurazione JupyterLab.
(jupyterlab_env) $ jupyter lab --generate-config
Il comando precedente genererà un file di configurazione con i valori predefiniti e lo salverà nella directory ~/.jupyter
.
Apri il file per la modifica.
(jupyterlab_env) $ nano ~/.jupyter/jupyter_lab_config.py
Trova le seguenti variabili, decommentale e modifica il loro valore come di seguito. Sostituisci PASSWORD_HASH
con l'hash generato sopra.
c.ServerApp.allow_remote_access = True
c.ServerApp.password = 'PASSWORD_HASH'
Salva il file premendo Ctrl + X e immettendo Y quando richiesto.
Apri la porta 8888 nel firewall.
$ sudo firewall-cmd --add-port=8888/tcp --permanent
$ sudo firewall-cmd --reload
Eseguire il server JupyterLab. Il parametro --ip 0.0.0.0
gli consente di ascoltare qualsiasi indirizzo IP e non solo localhost.
$ jupyter lab --ip 0.0.0.0
Il comando precedente genera un server JupyterLab sulla porta predefinita 8888 che abbiamo aperto. Avvia l'URL http://
nel tuo browser e vedrai la seguente schermata.

Immettere la password e fare clic sul pulsante Accedi per aprire l'interfaccia di JupyterLab.

Ora che l'accesso è confermato, premi Ctrl + C per fermare il server e inserisci y
quando ti viene chiesto di fermarti.
Passaggio 5: creare il file del servizio JupyterLab
Uscire dall'ambiente virtuale.
(jupyterlab_env) $ deactivate
Crea un nuovo file di servizio per JupyterLab.
$ sudo nano /lib/systemd/system/jupyterlab.service
Incolla il seguente codice al suo interno.
[Unit]
Description=JupyterLab Server
[Service]
User=USER
Group=USER
Type=simple
WorkingDirectory=/home/USER/jupyterlab
ExecStart=/home/USER/jupyterlab/jupyterlab_env/bin/jupyter-lab --config=/home/USER/.jupyter/jupyter_lab_config.py
StandardOutput=null
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Salva il file premendo Ctrl + X e immettendo Y quando richiesto.
Sostituisci USER
con l'utente attualmente connesso al tuo sistema.
Inizializza il servizio JupyterLab.
$ sudo systemctl daemon-reload
Abilita e avvia il servizio JupyterLab.
$ sudo systemctl enable jupyterlab --now
Controlla lo stato del servizio.
$ sudo systemctl status jupyterlab
? jupyterlab.service - JupyterLab Server
Loaded: loaded (/usr/lib/systemd/system/jupyterlab.service; disabled; vendor preset: disabled)
Active: active (running) since Tue 2022-12-13 11:45:26 UTC; 5s ago
Main PID: 151675 (jupyter-lab)
Tasks: 1 (limit: 5911)
Memory: 59.0M
CPU: 1.943s
CGroup: /system.slice/jupyterlab.service
??151675 /home/navjot/jupyterlab/jupyterlab_env/bin/python3 /home/navjot/jupyterlab/jupyterlab_env/bin/jupyter-lab --config=/home/navjot/.jupyter/jupyter_lab_config.py
Dec 13 11:45:26 jupyter.example.com systemd[1]: Started JupyterLab Server.
Passaggio 6: installa SSL
Prima di procedere, dobbiamo installare lo strumento Certbot e un certificato SSL per il nostro dominio.
Per installare Certbot, utilizzeremo il programma di installazione del pacchetto Snapd. Snapd porta sempre con sé l'ultima versione stabile di Certbot e dovresti usarla.
Lo strumento Snapd richiede il repository Epel per funzionare.
$ sudo dnf install epel-release -y
Useremo Snapd per installare Certbot. Installa Snapd.
$ sudo dnf install snapd -y
Abilita e avvia il servizio Snap.
$ sudo systemctl enable snapd.socket --now
Crea i collegamenti necessari affinché Snapd funzioni.
$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh
Assicurati che la tua versione di snapd sia aggiornata.
$ sudo snap install core
$ sudo snap refresh core
Installa Cerbot.
$ sudo snap install --classic certbot
Utilizzare il seguente comando per assicurarsi che il comando Certbot possa essere eseguito creando un collegamento simbolico alla directory /usr/bin
.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Genera un certificato SSL.
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m -d jupyterlab.example.com
Il comando precedente scaricherà un certificato nella directory /etc/letsencrypt/live/jupyterlab.example.com
sul tuo server.
Genera un certificato di gruppo Diffie-Hellman.
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Esegui un'esecuzione a secco del processo per verificare se il rinnovo SSL funziona correttamente.
$ sudo certbot renew --dry-run
Se non vedi errori, sei a posto. Il tuo certificato si rinnoverà automaticamente.
Passaggio 7: configurare Nginx
Crea e apri il file /etc/nginx/conf.d/jupyterlab.conf
per la modifica.
$ sudo nano /etc/nginx/conf.d/jupyterlab.conf
Incolla il seguente codice nel file jupyterlab.conf
. Sostituisci tutte le istanze di jupyterlab.example.com
con il tuo dominio.
## enforce HTTPS
server {
listen 80;
listen [::]:80;
server_name jupyterlab.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name jupyterlab.example.com;
access_log /var/log/nginx/jupyterlab.access.log;
error_log /var/log/nginx/jupyterlab.error.log;
client_max_body_size 20m;
http2_push_preload on; # Enable HTTP/2 Server Push
ssl_certificate /etc/letsencrypt/live/jupyterlab.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/jupyterlab.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/jupyterlab.example.com/chain.pem;
ssl_session_timeout 1d;
# Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC).
ssl_protocols TLSv1.2 TLSv1.3;
# Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
# prevent replay attacks.
#
# @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
ssl_early_data on;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
ssl_prefer_server_ciphers on;
ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
add_header X-Early-Data $tls1_3_early_data;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Scheme $scheme;
proxy_buffering off;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8888;
}
}
# This block is useful for debugging TLS v1.3. Please feel free to remove this
# and use the `$ssl_early_data` variable exposed by NGINX directly should you
# wish to do so.
map $ssl_early_data $tls1_3_early_data {
"~." $ssl_early_data;
default "";
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
La configurazione sopra reindirizzerà tutte le richieste HTTP a HTTPS e fungerà da proxy per il servizio JupyterLab per servirlo tramite il tuo dominio.
Salva il file premendo Ctrl + X e immettendo Y quando richiesto.
Apri il file /etc/nginx/nginx.conf
per la modifica.
$ sudo nano /etc/nginx/nginx.conf
Aggiungere la riga seguente prima della riga include /etc/nginx/conf.d/*.conf;
.
server_names_hash_bucket_size 64;
Salva il file premendo Ctrl + X e immettendo Y quando richiesto.
Verifica la configurazione di Nginx.
$ sudo nginx -t
Se non vedi errori, significa che sei a posto. Ricarica il server Nginx.
$ sudo systemctl reload nginx
Ora puoi accedere a JupyterLab visitando l'URL https://jupyterlab.example.com
nel tuo browser.
Conclusione
Questo conclude il nostro tutorial sull'installazione e la configurazione di JupyterLab su un server Rocky Linux 9 e sul suo servizio utilizzando il server proxy Nginx. Se hai domande, pubblicale nei commenti qui sotto.