Installation von »JupyterLab«
»JupyterLab« ist eine web-basierte interaktive Umgebung zur Erzeugung von Jupyter-Notebook-Dokumenten (oft Python-Programme mit zugehöriger Dokumentation).
Nachfolgend werden Hinweise zur Installation unter openSUSE 15.5 gegeben. Sie gelten sinngemäß auch für andere systemd-basierte Linux-Distributionen.
Installation der nötigen System-Pakete
zypper in --recommends apache2 inkscape python311-base pandoc
Anmerkung: Mit Pythonversionen <= 3.6 gab es Probleme.
ipynb
mit home-Verzeichnis
Anlegen des Nutzers useradd --create-home --system --user-group ipynb
mkdir /home/ipynb/notebooks
chown -R ipynb.ipynb /home/ipynb
Apache-Server als Proxy einrichten.
Im Verzeichnis /etc/apache2/vhosts.d
ist die Datei jupyterlab.conf
mit folgendem Inhalt zu erstellen:
Listen 82
<VirtualHost *:82>
Header edit Origin a73435.berlin.ptb.de:82 127.0.0.1:8888
RequestHeader edit Origin a73435.berlin.ptb.de:82 127.0.0.1:8888
Header edit Referer a73435.berlin.ptb.de:82 127.0.0.1:8888
RequestHeader edit Referer a73435.berlin.ptb.de:82 127.0.0.1:8888
<Location />
ProxyPass http://127.0.0.1:8888/
ProxyPassReverse http://127.0.0.1:8888/
</Location>
<Location /api/kernels/>
ProxyPass ws://127.0.0.1:8888/api/kernels/
ProxyPassReverse ws://127.0.0.1:8888/api/kernels/
</Location>
</VirtualHost>
Anmerkung: Statt des Ports 82 kann auch ein anderer gewählt werden.
Desweiteren sind einige Apache-Module zu aktivieren
sudo a2enmod mod_proxy_wstunnel proxy proxy_http headers proxy_wstunnel
und der Apache-Prozess ist neu zu starten:
sudo systemctl restart apache2.service
Dies bewirkt, dass künftig alle Anfragen an http://a73435.berlin.ptb.de:82/
nach http://127.0.0.1:8888/
umgeleitet werden.
Installation der Komponenten von »JupyterLab«
Anlegen einer virtuellen Python-Umgebung
cd /usr/local/share/
/usr/bin/python3.11 -m venv JupyterLab
Installation der nötigen Python-Bibliotheken
cd JupyterLab
source ./bin/activate
python3 -m pip install --upgrade pip
pip3 install jupyterlab nbconvert
# Zusätzliche Nutzer-Bibliotheken (je nach Wunsch):
pip3 install matplotlib statistics datetime numpy sympy pandas couchdb
Erzeugen eines Passwortes
JUPYTER_CONFIG_DIR=$PWD jupyter server password
Enter password: ...
Verify password: ...
...
Anmerkung: Es wird der Hash-Code des Passwortes in die Datei jupyter_server_config.json
im aktuellen Verzeichnis geschrieben. Um tatsächlich die gewohnte Passwortabfrage zu erhalten, muss der Inhalt der eben erzeugten Datei
{
"IdentityProvider": {
"hashed_password": "argon2:$argon2id$v=19$m=10240,t=10,p=XXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
}
zu
{
"ServerApp": {
"password": "argon2:$argon2id$v=19$m=10240,t=10,p=XXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
}
geändert werden.
Erzeugen der Systemd-Service-Datei
cat <<EOF > JupyterLab.service
[Unit]
Description=JupyterLab Service
[Service]
Type=simple
WorkingDirectory=/usr/local/share/JupyterLab
EnvironmentFile=-/etc/environment
ExecStart=/bin/bash -lc 'source ./bin/activate ; \\
jupyter lab --notebook-dir=/home/ipynb/notebooks --no-browser \\
--config=./jupyter_server_config.json'
User=ipynb
Group=ipynb
PIDFile=/run/jupyterlab.pid
Restart=on-failure
RestartSec=60s
[Install]
WantedBy=multi-user.target
EOF
Start des Systemd-Services
(Unter root-Account ausführen.)
systemctl link $PWD/JupyterLab.service
systemctl daemon-reload
systemctl enable JupyterLab.service
systemctl start JupyterLab.service
systemctl status JupyterLab.service
Spätere Installation weiterer Python-Bibliotheken
Neuinstallation
ssh root@a73435
...
cd /usr/local/share/JupyterLab
source ./bin/activate
pip3 install xyz uvw abc
deactivate
#
chown -R ipynb.ipynb /usr/local/share/JupyterLab
systemctl restart JupyterLab.service
#
exit
Update einer bereits installierten Python-Bibliothek
ssh root@a73435
...
cd /usr/local/share/JupyterLab
source ./bin/activate
pip3 install <package_name> --upgrade
deactivate
#
chown -R ipynb.ipynb /usr/local/share/JupyterLab
systemctl restart JupyterLab.service
#
exit
Update sämtlicher Python-Bibliotheken einschließlich »JupyterLab« selbst
ssh root@a73435
...
cd /usr/local/share/JupyterLab
source ./bin/activate
for i in $(pip3 list -o | awk 'NR > 2 {print $1}'); do pip3 install --upgrade $i; done
deactivate
#
chown -R ipynb.ipynb /usr/local/share/JupyterLab
systemctl restart JupyterLab.service
#
exit