¿Qué es el Jupyter Notebook y para que se utiliza?
Jupyter Notebook es una aplicación web de código abierto que permite crear y compartir documentos que contienen código, ecuaciones, visualizaciones y texto explicativo. Se utiliza principalmente para la exploración de datos, el desarrollo de software y la enseñanza de ciencias de la computación y ciencias relacionadas. Los notebooks de Jupyter son compatibles con una amplia variedad de lenguajes de programación, incluyendo Python, R, Julia y muchos otros.
¿Cómo instalar el Jupyter Notebook en Ubuntu 22.10?
Puedes instalar Jupyter Notebook en Ubuntu 22.10 siguiendo estos pasos:
Actualiza los paquetes de tu sistema:
apt update -y
apt upgrade -y
Instalamos Python
Instalamos Python y sus dependencias en nuestro servidor. Con le siguiente comando:
apt-get install python3 python3-pip -y
Comprobamos la versión instalada con el comando:
python3 --version
Esta es la salida que obtuvimos:
Python 3.10.7
Con el siguiente comando actualizamos PIP:
pip3 install --upgrade pip
Verificamos la version de PIP con el comando:
pip3 --version
Si todo ha salido bien obtenemos esta respuesta:
pip 23.0 from /usr/local/lib/python3.10/dist-packages/pip (python 3.10)
Con el siguiente comando instalamos el entorno virtual:
pip3 install virtualenv
Y ahora con el siguiente paso.
Instalamos el Jupyter Notebook
Creamos el directorio de Notebook:
mkdir ~/project
Luego, entramos en el directorio y creamos el entorno virtual:
cd ~/project
virtualenv notebookenv
Activamos en entorno con el siguiente comando:
source notebookenv/bin/activate
Ahora instalamos el Jupyter Notebook con el comando:
pip install jupyter
Cuando se instale el Jupyter Notebook lo iniciamos con el siguiente comando:
jupyter notebook --allow-root
La respuesta es algo así:
[I 23:06:04.394 NotebookApp] Serving notebooks from local directory: /home/vesko
[I 23:06:04.394 NotebookApp] Jupyter Notebook 6.4.8 is running at:
[I 23:06:04.395 NotebookApp] http://localhost:8889/?token=634f7721dec929a445f609 8e4352db36638032b2422f713a
[I 23:06:04.395 NotebookApp] or http://127.0.0.1:8889/?token=634f7721dec929a445 f6098e4352db36638032b2422f713a
[I 23:06:04.395 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 23:06:04.398 NotebookApp]
To access the notebook, open this file in a browser:
file:///home/veselin/.local/share/jupyter/runtime/nbserver-321-open.html
Or copy and paste one of these URLs:
http://localhost:8889/?token=634f7721dec929a445f6098e4352db36638032b2422f713a
or http://127.0.0.1:8889/?token=634f7721dec929a445f6098e4352db36638032b2422f713a
Presionamos CTRL+C y paramos Jupyter Notebook
Generamos la contraseña para Jupiter Notebook
Con el primer comando generamos la configuración básica:
jupyter notebook --generate-config
Y con el siguiente creamos la contraseña:
jupyter notebook password
Nos pide la contraseña y la confirmación y salimos con el comando:
deactivate
Creamos el servicio para Jupyter Notebook
Creamos con el comando:
nano /etc/systemd/system/jupyter.service
Y dentro añadimos las siguientes líneas:
[Unit]
Description=Jupyter Notebook
[Service]
Type=simple
PIDFile=/run/jupyter.pid
ExecStart=/root/project/notebookenv/bin/jupyter-notebook --config=/root/.jupyter/jupyter_notebook_config.py --allow-root
User=root
Group=root
WorkingDirectory=/root/project/notebookenv
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Guardamos con CTL+O y salimos con CT+X. También reiniciamos los servicios y comprobamos con los comandos:
systemctl daemon-reload
systemctl start jupyter
systemctl enable jupyter
systemctl status jupyter
Instalamos Nginx y configuramos el Reverse Proxy para Jupyter Notebook
Primero instalamos Nginx con el comando:
apt-get install nginx -y
Y creamos la configuración para el virtual host:
nano /etc/nginx/conf.d/jupyter.conf
Y añadimos estas lineas:
upstream notebook {
server 127.0.0.1:8888;
}
server {
listen 80;
server_name jupyter.myweb.com;
access_log /var/log/nginx/myweb.com.access.log;
error_log /var/log/nginx/myweb.com.error.log;
location / {
proxy_pass http://localhost:8888;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
}
Guardamos y comprobamos la sintaxis con el comando:
nginx -t
Si esta todo bien nos da esta respuesta:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Reiniciamos el servicio de Nginx:
systemctl restart nginx
Y comprobamos su funcionamiento con el comando:
systemctl status nginx
You will get the following output:
nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Tue 2023-02-07 23:05:17 UTC; 25min ago
Docs: man:nginx(8)
Process: 105 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SU>
Process: 116 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 117 (nginx)
Tasks: 2 (limit: 19007)
Memory: 9.8M
CPU: 24ms
CGroup: /system.slice/nginx.service
|-117 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
`-118 "nginx: worker process"
Añadimos el modo o los privilegios del grupo para www-data con el comando:
usermod -g www-data root
Para configurar el acceso remoto a Jupyter Notebook tenemos que configurar lo siguiente:
nano /root/.jupyter/jupyter_notebook_config.py
Des comentamos la línea y cambiamos False por True:
c.NotebookApp.allow_remote_access = True
Guardamos y reiniciamos:
systemctl restart jupyter
Y con esto debemos poder entrar en nuestro Jupyter Notebook
Como acceder a Jupyter Notebook
Si esta todo bien podemos acceder a nuestra web con su URL: http://myweb.com o en su defecto con la IP del nuestro servidor. Para el acceso nos pedirá la contraseña que pusimos unos pasos mas arriba.
Esto es todo, cualquier pregunta podéis contactarme en los comentarios.