sudo apt install python3-pip
# устанавливаем pipenv
pip3 install pipenv
# если будет ошибка "pipenv: команда не найдена", то устанавливаем командой:
# sudo -H pip3 install -U pipenv
# создаем каталог для приложения
mkdir ./env
cd ./env/
# узнаем версию python
python3 --version
# активируем виртуальное окружение проекта
pipenv --python 3.5
pipenv shell
# устанавливаем приложения
(env)$ pipenv install jupyterlab
# устанавливаем ядро (python3)
(env)$ pipenv install ipykernel
# доступные ядра
(env)$ jupyter kernelspec list
# запуск приложения
(env)$ pipenv run jupyter lab
(env)$ pipenv run jupyter notebook --generate-config
После выполнения команды, будет создан файл /home/< USER >/.jupyter/jupyter_notebook_config.py. Добавляем следущие строки:
# запускаем сервер локально
c.NotebookApp.ip = 'localhost'
c.NotebookApp.port = 12345
# на сервере нет браузера
c.NotebookApp.open_browser = False
# разрешаем удаленный доступ
c.NotebookApp.allow_remote_access = True
# устанавливаем пароль
from IPython.lib import passwd
password = passwd(u'XXXXXXXXXXXXXXXXXXXX')
c.NotebookApp.password = password
c.NotebookApp.allow_password_change = False
# включаем js библиотеку для Math/TeX
c.NotebookApp.enable_mathjax = True
Кофигурационный файл взят из: eploy the Jupyter Notebook container on VPS and use Nginx as the reverse proxy
server {
listen 80;
# Change the server name {some.domain} !!!
server_name some.domain;
location / {
# Change the {host} and {port} !!!
proxy_pass http://127.0.0.1:12345;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
client_max_body_size 50M;
error_log /var/log/nginx/error.log;
location ~* /(api/kernels/[^/]+/(channels|iopub|shell|stdin)|terminals/websocket)/? {
# Change the {host} and {port} !!!
proxy_pass http://127.0.0.1:12345;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
#proxy_set_header Upgrade $http_upgrade;
proxy_set_header Upgrade "websocket";
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
}
Большинство расширений требует устновленного пакета npm. Но в debian это, как правило, устаревшие версии – во время установки, в логах будет строка, наподобие:
...
error get-caller-file@2.0.5: The engine "node" is incompatible with this module. Expected version "6.* || 8.* || >= 10.*". Got "9.11.2"
...
Удаляем из системы старую версию nodejs и устанавливаем по инструкции Node.js Binary Distributions свежую (на момент написания статьи это была версия 13).
# Math
(env)$ pipenv install numpy
(env)$ pipenv install scipy
(env)$ pipenv install pandas
# Bokeh
(env)$ pipenv install bokeh
#(env)$ pipenv run jupyter labextension install @bokeh/jupyter_bokeh
# Widgets
(env)$ pipenv run jupyter labextension install @jupyter-widgets/jupyterlab-manager
# пути запуска скриптов и размещения конфигурационных файйлов
(env)$ jupyter --paths
Создаем файл /etc/systemd/system/jupyterlab.service.
[Unit]
Description=JupyterLab
After=syslog.target
After=multi-user.target
[Service]
Type=simple
PIDFile=/var/run/jupyter.pid
ExecStart=/usr/local/bin/pipenv run jupyter lab
WorkingDirectory=/PATH/TO/ENV/
User=USER
Group=USER
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
[Install]
WantedBy=multi-user.target
В WorkingDirectory должен быть указан путь к каталогу, в котором находится Pipfile-файл.
check process jupyter-lab
matching "jupyter-lab"
start program = "/bin/sh -c 'cd /PATH/TO/ENV/ && /usr/local/bin/pipenv run jupyter lab'" as uid USER and gid USER
stop program = "/usr/bin/killall jupyter-lab"
if cpu usage > 90% for 10 cycles then restart
Файл после перезапуска пуст (в JupyterLab), хотя содержимое в нем есть и, например, vscode его рендерит.
Если посмотреть этот файл в json фомате, то листинг python-кода не должен быть разбит на строки (json файл невалидный).
Решение: “Kernel -> Restart & Run All”, then “File -> Save and Checkpoint”
Jupyter Notebook JSON is invalid