Pyviz Panel app.show () не работает при удаленном использовании ноутбука Jupyter - PullRequest
1 голос
/ 21 января 2020

Я установил Anaconda на виртуальную машину CentOS на сервере Ubuntu. Затем я создал среду conda для всех моих python библиотек данных на этой виртуальной машине. У меня на ноутбуке подходящая среда conda.

Затем я следовал этому руководству, чтобы позволить мне выполнять аналитику данных на сервере с помощью ноутбука Jupyter удаленно на моем ноутбуке: https://amber-md.github.io/pytraj/latest/tutorials/remote_jupyter_notebook

Я могу успешно загрузить свой ноутбук Jupyter на свой ноутбук и выполнить аналитику на сервере. Я также могу пометить мое завершенное приложение как .servable() в блокноте, а затем использовать panel serve --show ... на своем терминале виртуальной машины, чтобы предоставить законченное интерактивное приложение пользователям локальной сети через веб-браузер.

Моя проблема заключается в том, что когда я вместо того, чтобы пометить мое приложение .show(), чтобы я мог просмотреть приложение / отчет, над которым я сейчас работаю, в блокноте, я получаю следующее сообщение: <bokeh.server.server.Server at 0x7faa92ef5590>, но приложение не загружается в новой вкладке браузера, как ожидалось .

Как заставить app.show() работать при использовании ноутбука Jupyter удаленно, а не локально?


Обновление 23/01/20 в ответ на ответ @ SandervandenOord:" Вам необходимо указать порт для .show () и убедиться, что пользователь может получить доступ к этому порту на удаленном сервере "

Для иллюстрации этого вопроса (не актуально ), скажем, моя виртуальная машина сервера имеет адрес 192.168.0.1 , а ноутбук - 192.168.0.2 , а порт, который я хочу использовать с app.show(), равен 3333, 1. Настройка порта:

На сервере ( 192.168.0.1 ):

  • Проверьте, что порт 3333 не используется: sudo lsof -i:3333
  • Убедитесь, что iptables не показывает порт как открытый: sudo iptables-save | grep 3333
  • Добавьте порт в файл / etc / services : sudo nano /etc/services
  • Я добавил следующую строку в начало файла и сохранил:
# service-name  port/protocol  [aliases ...]   [# comment]
bokeh-server    3333/tcp                        # Open port to allow app.show() to work on a remotely executed Jupyter Notebook
  • Включите брандмауэр: sudo systemctl enable firewalld
  • Запустите брандмауэр: sudo systemctl start firewalld
  • Проверьте состояние брандмауэра: sudo systemctl status firewalld
  • Убедитесь, что этот порт открыт: sudo iptables-save | grep 3333 Вывод: -A IN_public_allow -p tcp -m tcp --dport 3333 -m conntrack --ctstate NEW -j ACCEPT

  • Проверьте, что пользователь может получить доступ к порту на сервере:

Я установил ncat на сервере ( 192.168.0.1 ):
sudo yum install nmap-ncat -y

Затем я настраиваю обмен сообщениями между сервером и ноутбуком:

  • На сервере:
    nc -l 3333
  • На ноутбуке:
    nc 192.168.0.1 3333

, а также между ноутбуком и сервером:

  • На ноутбуке:
    nc -l 3333
  • На сервере:
    nc 192.168.0.2 3333

  • Сообщения успешно поступают с сервера на ноутбук и наоборот.

  • Подтверждение этих двух соединений:
    sudo lsof -i:3333

, которые вывели:

COMMAND  PID      USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nc      1776       XXX    5u  IPv4  23627      0t0  TCP vmserver:bokeh-server->192.168.0.2:55358 (ESTABLISHED)
nc      1846       XXX    3u  IPv4  22895      0t0  TCP vmserver:33658->192.168.0.2:bokeh-server (ESTABLISHED)

, показывая, что сервер на порту 3333 может взаимодействовать с ноутбуком через другой порт, а ноутбук через порт 3333 может взаимодействовать с сервером через другой порт.

Я не уверен, как заставить их подключаться к одному и тому же порту? ie оба на порт 3333? Это источник моей проблемы?

Затем в своем ноутбуке jupyter я заменил app.show() на
app.show(port=3333, websocket_origin=None, threaded=False)

Однако я все еще испытываю то же поведение, что и ранее, в том, что приложение не загружается в новой вкладке браузера, как и ожидалось.

Затем я экспериментировал с параметрами websocket_origin (пробовал "192.168.0.1", "192.168.0.2" и "*") и threaded (True / False), но изменение их не дало желаемого результата загрузки приложения в новой вкладке браузера.

Пара интересных моментов :
1. Если я запускаю свою записную книжку, которая выполняет

app.show(port=3333, websocket_origin=None, threaded=False)

, а затем на сервере запускаю:
sudo lsof -i:3333
, то возвращается следующее:

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ZMQbg/1 19328 xxx   45u  IPv4  83214      0t0  TCP *:bokeh-server (LISTEN)
ZMQbg/1 19328 xxx   54u  IPv6  83215      0t0  TCP *:bokeh-server (LISTEN)

Кажется, сервер ожидает, что что-то случится на порте 3333? ie СЛУШАТЬ ? В отличие от того, когда я обменивался сообщениями между сервером и ноутбуком (и наоборот), на самом деле, похоже, ESTABLISHED соединение не было.

Обратите внимание, что эти две строки только появляются после Я запускаю ноутбук.

После того, как я выполнил свою записную книжку (и приложение на новой вкладке не открылось), если я попытаюсь запустить записную книжку снова, я получу это предупреждение в своей записной книжке jupyter: OSError: [Errno 98] Address already in use

Так что похоже, что соединение между сервером и ноутбуком было УСТАНОВЛЕНО или, по крайней мере, зарезервировано? Чтобы это исправить, мне нужно закрыть соединение с моим сервером, а затем на моем ноутбуке выполнить команду: lsof -ti:8888 | xargs kill -1, а затем восстановить соединение между сервером и ноутбуком согласно https://amber-md.github.io/pytraj/latest/tutorials/remote_jupyter_notebook

@ SandervandenOord, у вас есть какие-нибудь указания относительно того, что я мог бы попробовать дальше?

Заранее большое спасибо.


Версии программного обеспечения в среде conda на ВМ:

# Name                    Version                   Build  Channel
_anaconda_depends         2019.03                  py37_0  
_libgcc_mutex             0.1                        main  
alabaster                 0.7.12                   py37_0  
anaconda                  custom                   py37_1  
anaconda-client           1.7.2                    py37_0  
anaconda-project          0.8.4                      py_0  
arrow-cpp                 0.11.1          py37h0e61e49_1004    conda-forge
asn1crypto                1.3.0                    py37_0  
astroid                   2.3.3                    py37_0  
astropy                   4.0              py37h7b6447c_0  
atomicwrites              1.3.0                    py37_1  
attrs                     19.3.0                     py_0  
babel                     2.8.0                      py_0  
backcall                  0.1.0                    py37_0  
backports                 1.0                        py_2  
backports.os              0.1.1                    py37_0  
backports.shutil_get_terminal_size 1.0.0                    py37_2  
beautifulsoup4            4.8.2                    py37_0  
bitarray                  1.2.0            py37h7b6447c_0  
bkcharts                  0.2                      py37_0  
blas                      1.0                         mkl  
bleach                    3.1.0                    py37_0  
blosc                     1.16.3               hd408876_0  
bokeh                     1.4.0                    py37_0  
boost-cpp                 1.68.0            h11c811c_1000    conda-forge
boto                      2.49.0                   py37_0  
bottleneck                1.3.1            py37hdd07704_0  
bzip2                     1.0.8                h7b6447c_0  
ca-certificates           2019.11.28           hecc5488_0    conda-forge
cairo                     1.14.12              h8948797_3  
cartopy                   0.17.0           py37hbb7e04d_1  
certifi                   2019.11.28               py37_0  
cffi                      1.13.2           py37h2e261b9_0  
cftime                    1.0.4.2          py37hdd07704_0  
chardet                   3.0.4                 py37_1003  
click                     7.0                      py37_0  
click-plugins             1.1.1                      py_0  
cligj                     0.5.0                    py37_0  
cloudpickle               1.2.2                      py_0  
clyent                    1.2.2                    py37_1  
colorama                  0.4.3                      py_0  
colorcet                  2.0.2                      py_0    pyviz
contextlib2               0.6.0.post1                py_0  
cryptography              2.8              py37h1ba5d50_0  
curl                      7.67.0               hbc83047_0  
cycler                    0.10.0                   py37_0  
cython                    0.29.14          py37he6710b0_0  
cytoolz                   0.10.1           py37h7b6447c_0  
dask                      2.9.1                      py_0  
dask-core                 2.9.1                      py_0  
datashader                0.9.0                      py_0    pyviz
datashape                 0.5.4                    py37_1  
dbus                      1.13.12              h746ee38_0  
decorator                 4.4.1                      py_0  
defusedxml                0.6.0                      py_0  
distributed               2.9.1                      py_0  
docutils                  0.15.2                   py37_0  
entrypoints               0.3                      py37_0  
et_xmlfile                1.0.1                    py37_0  
expat                     2.2.6                he6710b0_0  
fastcache                 1.1.0            py37h7b6447c_0  
feather-format            0.4.0                   py_1003    conda-forge
filelock                  3.0.12                     py_0  
fiona                     1.8.4            py37hc38cc03_0  
flask                     1.1.1                      py_0  
fontconfig                2.13.0               h9420a91_0  
freetype                  2.9.1                h8a8886c_1  
freexl                    1.0.5                h14c3975_0  
fribidi                   1.0.5                h7b6447c_0  
fsspec                    0.6.2                      py_0  
gdal                      2.3.3            py37hbb2a789_0  
geopandas                 0.6.1                      py_0  
geos                      3.7.1                he6710b0_0  
geoviews                  1.6.6                      py_0    pyviz
geoviews-core             1.6.6                      py_0    pyviz
get_terminal_size         1.0.0                haa9412d_0  
gevent                    1.4.0            py37h7b6447c_0  
giflib                    5.1.4                h14c3975_1  
glib                      2.63.1               h5a9c865_0  
glob2                     0.7                        py_0  
gmp                       6.1.2                h6c8ec71_1  
gmpy2                     2.0.8            py37h10f8cd9_2  
graphite2                 1.3.13               h23475e2_0  
greenlet                  0.4.15           py37h7b6447c_0  
gst-plugins-base          1.14.0               hbbd80ab_1  
gstreamer                 1.14.0               hb453b48_1  
h5py                      2.9.0            py37h7918eee_0  
harfbuzz                  1.8.8                hffaf4a1_0  
hdf4                      4.2.13               h3ca952b_2  
hdf5                      1.10.4               hb1b8bf9_0  
heapdict                  1.0.1                      py_0  
holoviews                 1.12.7                     py_0    pyviz
html5lib                  1.0.1                    py37_0  
hvplot                    0.5.2                      py_0    pyviz
hypothesis                4.54.2                   py37_0  
icu                       58.2                 h9c2bf20_1  
idna                      2.8                      py37_0  
imageio                   2.6.1                    py37_0  
imagesize                 1.2.0                      py_0  
importlib_metadata        1.3.0                    py37_0  
intel-openmp              2019.4                      243  
ipykernel                 5.1.3            py37h39e3cac_1  
ipython                   7.11.1           py37h39e3cac_0  
ipython_genutils          0.2.0                    py37_0  
ipywidgets                7.5.1                      py_0  
isort                     4.3.21                   py37_0  
itsdangerous              1.1.0                    py37_0  
jbig                      2.1                  hdba287a_0  
jdcal                     1.4.1                      py_0  
jedi                      0.15.2                   py37_0  
jeepney                   0.4.2                      py_0  
jinja2                    2.10.3                     py_0  
joblib                    0.14.1                     py_0  
jpeg                      9b                   h024ee3a_2  
json-c                    0.13.1               h1bed415_0  
json5                     0.8.5                      py_0  
jsonschema                3.2.0                    py37_0  
jupyter                   1.0.0                    py37_7  
jupyter_client            5.3.4                    py37_0  
jupyter_console           6.0.0                    py37_0  
jupyter_core              4.6.1                    py37_0  
jupyterlab                1.2.4              pyhf63ae98_0  
jupyterlab_server         1.0.6                      py_0  
kealib                    1.4.7                hd0c454d_6  
keyring                   20.0.0                   py37_0  
kiwisolver                1.1.0            py37he6710b0_0  
krb5                      1.16.4               h173b8e3_0  
lazy-object-proxy         1.4.3            py37h7b6447c_0  
ld_impl_linux-64          2.33.1               h53a641e_7  
libarchive                3.3.3                h5d8350f_5  
libboost                  1.67.0               h46d08c1_4  
libcurl                   7.67.0               h20c2e04_0  
libdap4                   3.19.1               h6ec2957_0  
libedit                   3.1.20181209         hc058e9b_0  
libffi                    3.2.1                hd88cf55_4  
libgcc-ng                 9.1.0                hdf63c60_0  
libgdal                   2.3.3                h2e7e64b_0  
libgfortran-ng            7.3.0                hdf63c60_0  
libkml                    1.3.0                h590aaf7_4  
liblief                   0.9.0                h7725739_2  
libnetcdf                 4.6.1                h11d0813_2  
libpng                    1.6.37               hbc83047_0  
libpq                     11.2                 h20c2e04_0  
libprotobuf               3.6.1             hdbcaa40_1001    conda-forge
libsodium                 1.0.16               h1bed415_0  
libspatialindex           1.9.3                he6710b0_0  
libspatialite             4.3.0a              hb08deb6_19  
libssh2                   1.8.2                h1ba5d50_0  
libstdcxx-ng              9.1.0                hdf63c60_0  
libtiff                   4.1.0                h2733197_0  
libtool                   2.4.6                h7b6447c_5  
libuuid                   1.0.3                h1bed415_2  
libxcb                    1.13                 h1bed415_1  
libxml2                   2.9.9                hea5a465_1  
libxslt                   1.1.33               h7d1a2b0_0  
llvmlite                  0.31.0           py37hd408876_0  
locket                    0.2.0                    py37_1  
lxml                      4.4.2            py37hefd8a0e_0  
lz4-c                     1.8.1.2              h14c3975_0  
lzo                       2.10                 h49e0be7_2  
markdown                  3.1.1                    py37_0  
markupsafe                1.1.1            py37h7b6447c_0  
matplotlib                3.1.1            py37h5429711_0  
mccabe                    0.6.1                    py37_1  
mistune                   0.8.4            py37h7b6447c_0  
mkl                       2019.4                      243  
mkl-service               2.3.0            py37he904b0f_0  
mkl_fft                   1.0.15           py37ha843d7b_0  
mkl_random                1.1.0            py37hd6b4f25_0  
mock                      3.0.5                    py37_0  
more-itertools            8.0.2                      py_0  
mpc                       1.1.0                h10f8cd9_1  
mpfr                      4.0.1                hdf1c602_3  
mpmath                    1.1.0                    py37_0  
msgpack-python            0.6.1            py37hfd86e86_1  
multipledispatch          0.6.0                    py37_0  
munch                     2.5.0                      py_0  
nbconvert                 5.6.1                    py37_0  
nbformat                  4.4.0                    py37_0  
ncurses                   6.1                  he6710b0_1  
netcdf4                   1.4.2            py37h808af73_0  
networkx                  2.4                        py_0  
nltk                      3.4.5                    py37_0  
nose                      1.3.7                    py37_2  
notebook                  6.0.2                    py37_0  
numba                     0.47.0           py37h962f231_0  
numexpr                   2.7.0            py37h9e4a6bb_0  
numpy                     1.17.4           py37hc1035e2_0  
numpy-base                1.17.4           py37hde5b4d6_0  
numpydoc                  0.9.2                      py_0  
olefile                   0.46                     py37_0  
openjpeg                  2.3.0                h05c96fa_1  
openpyxl                  3.0.2                      py_0  
openssl                   1.1.1d               h7b6447c_3  
owslib                    0.18.0                     py_0  
packaging                 20.0                       py_0  
pandas                    0.25.3           py37he6710b0_0  
pandoc                    2.2.3.2                       0  
pandocfilters             1.4.2                    py37_1  
panel                     0.7.0                      py_0    pyviz
pango                     1.42.4               h049681c_0  
param                     1.9.2                      py_0    pyviz
parquet-cpp               1.5.1                         3    conda-forge
parso                     0.5.2                      py_0  
partd                     1.1.0                      py_0  
patchelf                  0.10                 he6710b0_0  
path                      13.1.0                   py37_0  
path.py                   12.4.0                        0  
pathlib2                  2.3.5                    py37_0  
patsy                     0.5.1                    py37_0  
pcre                      8.43                 he6710b0_0  
pep8                      1.7.1                    py37_0  
pexpect                   4.7.0                    py37_0  
pickleshare               0.7.5                    py37_0  
pillow                    7.0.0            py37hb39fc2d_0  
pip                       19.3.1                   py37_0  
pixman                    0.38.0               h7b6447c_0  
pkginfo                   1.5.0.1                  py37_0  
plotly                    4.4.1                      py_0    plotly
plotly_express            0.4.1                      py_0    plotly
pluggy                    0.13.1                   py37_0  
ply                       3.11                     py37_0  
poppler                   0.65.0               h581218d_1  
poppler-data              0.4.9                         0  
proj4                     5.2.0                he6710b0_1  
prometheus_client         0.7.1                      py_0  
prompt_toolkit            2.0.9                    py37_0  
psutil                    5.6.7            py37h7b6447c_0  
ptyprocess                0.6.0                    py37_0  
py                        1.8.1                      py_0  
py-lief                   0.9.0            py37h7725739_2  
pyarrow                   0.11.1          py37hbbcf98d_1002    conda-forge
pycodestyle               2.5.0                    py37_0  
pycosat                   0.6.3            py37h7b6447c_0  
pycparser                 2.19                     py37_0  
pycrypto                  2.6.1            py37h14c3975_9  
pyct                      0.4.6                      py_0    pyviz
pyct-core                 0.4.6                      py_0    pyviz
pycurl                    7.43.0.3         py37h1ba5d50_0  
pyepsg                    0.4.0                    py37_0  
pyflakes                  2.1.1                    py37_0  
pygments                  2.5.2                      py_0  
pykdtree                  1.3.1            py37hdd07704_2  
pylint                    2.4.4                    py37_0  
pyodbc                    4.0.27           py37he6710b0_0  
pyopenssl                 19.1.0                   py37_0  
pyparsing                 2.4.6                      py_0  
pyproj                    1.9.6            py37h14380d9_0  
pyqt                      5.9.2            py37h05f1152_2  
pyrsistent                0.15.6           py37h7b6447c_0  
pyshp                     2.1.0                      py_0  
pysocks                   1.7.1                    py37_0  
pytables                  3.6.1            py37h71ec239_0  
pytest                    5.3.2                    py37_0  
pytest-arraydiff          0.3              py37h39e3cac_0  
pytest-astropy            0.7.0                      py_0  
pytest-astropy-header     0.1.1                      py_0  
pytest-doctestplus        0.5.0                      py_0  
pytest-openfiles          0.4.0                      py_0  
pytest-remotedata         0.3.2                    py37_0  
python                    3.7.6                h0371630_2  
python-dateutil           2.8.1                      py_0  
python-libarchive-c       2.8                     py37_13  
pytz                      2019.3                     py_0  
pyviz_comms               0.7.2                      py_0    pyviz
pywavelets                1.1.1            py37h7b6447c_0  
pyyaml                    5.2              py37h7b6447c_0  
pyzmq                     18.1.0           py37he6710b0_0  
qt                        5.9.7                h5867ecd_1  
qtawesome                 0.6.0                      py_0  
qtconsole                 4.6.0                      py_1  
qtpy                      1.9.0                      py_0  
readline                  7.0                  h7b6447c_5  
requests                  2.22.0                   py37_1  
retrying                  1.3.3                    py37_2  
rope                      0.14.0                     py_0  
rtree                     0.8.3                    py37_0  
ruamel_yaml               0.15.87          py37h7b6447c_0  
scikit-image              0.15.0           py37he6710b0_0  
scikit-learn              0.22.1           py37hd81dba3_0  
scipy                     1.3.2            py37h7c811a0_0  
seaborn                   0.9.0              pyh91ea838_1  
secretstorage             3.1.1                    py37_0  
send2trash                1.5.0                    py37_0  
setuptools                44.0.0                   py37_0  
shapely                   1.6.4            py37h86c5351_0  
simplegeneric             0.8.1                    py37_2  
singledispatch            3.4.0.3                  py37_0  
sip                       4.19.8           py37hf484d3e_0  
six                       1.13.0                   py37_0  
snappy                    1.1.7                hbae5bb6_3  
snowballstemmer           2.0.0                      py_0  
sortedcollections         1.1.2                    py37_0  
sortedcontainers          2.1.0                    py37_0  
soupsieve                 1.9.5                    py37_0  
sphinx                    2.3.1                      py_0  
sphinxcontrib             1.0                      py37_1  
sphinxcontrib-applehelp   1.0.1                      py_0  
sphinxcontrib-devhelp     1.0.1                      py_0  
sphinxcontrib-htmlhelp    1.0.2                      py_0  
sphinxcontrib-jsmath      1.0.1                      py_0  
sphinxcontrib-qthelp      1.0.2                      py_0  
sphinxcontrib-serializinghtml 1.1.3                      py_0  
sphinxcontrib-websupport  1.1.2                      py_0  
spyder                    3.3.6                    py37_0  
spyder-kernels            0.5.2                    py37_0  
sqlalchemy                1.3.12           py37h7b6447c_0  
sqlite                    3.30.1               h7b6447c_0  
statsmodels               0.10.1           py37hdd07704_0  
sympy                     1.5.1                    py37_0  
tbb                       2019.8               hfd86e86_0  
tblib                     1.6.0                      py_0  
terminado                 0.8.3                    py37_0  
testpath                  0.4.4                      py_0  
thrift-cpp                0.12.0            h0a07b25_1002    conda-forge
tk                        8.6.8                hbc83047_0  
toolz                     0.10.0                     py_0  
tornado                   6.0.3            py37h7b6447c_0  
tqdm                      4.41.1                     py_0  
traitlets                 4.3.3                    py37_0  
unicodecsv                0.14.1                   py37_0  
unixodbc                  2.3.7                h14c3975_0  
urllib3                   1.25.7                   py37_0  
wcwidth                   0.1.7                    py37_0  
webencodings              0.5.1                    py37_1  
werkzeug                  0.16.0                     py_0  
wheel                     0.33.6                   py37_0  
widgetsnbextension        3.5.1                    py37_0  
wrapt                     1.11.2           py37h7b6447c_0  
wurlitzer                 2.0.0                    py37_0  
xarray                    0.14.1                     py_1  
xerces-c                  3.2.2                h780794e_0  
xlrd                      1.2.0                    py37_0  
xlsxwriter                1.2.7                      py_0  
xlwt                      1.3.0                    py37_0  
xz                        5.2.4                h14c3975_4  
yaml                      0.1.7                had09818_2  
zeromq                    4.3.1                he6710b0_3  
zict                      1.0.0                      py_0  
zipp                      0.6.0                      py_0  
zlib                      1.2.11               h7b6447c_3  
zstd                      1.3.7                h0b5b093_0

1 Ответ

1 голос
/ 21 января 2020

Необходимо указать порт для .show () и убедиться, что пользователь может получить доступ к этому порту на удаленном сервере:

Signature: .show(port=0, websocket_origin=None, threaded=False)
Docstring:
Starts a bokeh server and displays the Viewable in a new tab

Arguments
---------
port: int (optional, default=0)
  Allows specifying a specific port
websocket_origin: str or list(str) (optional)
  A list of hosts that can connect to the websocket.

  This is typically required when embedding a server app in
  an external web site.

  If None, "localhost" is used.
threaded: boolean (optional, default=False)
  Whether to launch the Server on a separate thread, allowing
  interactive use.

Returns
-------
server: bokeh.server.Server or threading.Thread
  Returns the bokeh server instance or the thread the server
  was launched on (if threaded=True)
...