Saltar al contenido

Cómo Instalar Jupyter Notebook en un VPS

Cómo instalar Jupyter Notebook en un VPS

¿Necesitas instalar Jupyter en un servidor en la nube para acceder a tus cuadernos desde cualquier lugar y en cualquier momento? Has llegado al artículo perfecto. Aquí encontrarás una guía detallada paso a paso para que puedas lograrlo de manera sencilla y en poco tiempo.

Te voy a acompañar por los todos los pasos necesarios, y algunos opcionales, uno a uno, para que puedas tener Jupyter Notebook perfectamente funcional instalado en un servidor privado virtual (VPS). Además podrás acceder a tus cuadernos de manera remota y segura a través de cualquier navegador web mediante un certificado SSL y, si así lo deseas, con tu propio nombre de dominio. Solo necesitarás tu equipo y un buen servicio de servidores privados virtuales.

¡Vamos allá!

Paso 1: creando y configurando tu Virtual Private Server

Lo primero de todo es tener disponible un VPS. Si no tienes uno te recomiendo los servicios proporcionados por Clouding. En esta guía de instalación utilizaremos un servidor VPS creado en Clouding.

Tras registrarte, lo primero que debes hacer es crear y configurar el VPS. El panel de control es sencillo e intuitivo con lo que no tendrás ningún problema para hacerlo.

En la pestaña Mis Servidores haz click en el botón de añadir nuevo servidor, que te llevara a la página de configuración del mismo.

Creación y configuración del VPS en Clouding
Creación del servidor en Clouding

Pondremos un hostname de servidor y un nombre. El hostname es el nombre que tendrá tu servidor internamente y el nombre será el identificador de tu servidor en el panel de control. Pueden coincidir o no. En este caso yo pondré jupyter en ambos pero tú puedes poner lo que prefieras.

Después seleccionaremos el tipo de servidor a crear. Por su popularidad y facilidad de uso, en esta guía utilizaremos Ubuntu Linux. Haz click en el botón de Ubuntu y selecciona la versión disponible más reciente (o la versiñon concreta que te haga falta).

Después elige los recursos del servidor que necesites en el apartado Selecciona la configuración del servidor. Puedes elegir el número de cores o núcleos que necesitas, la cantidad de RAM por core y la cantidad de disco SSD.

Podrás ver el precio estimado de tu servidor al cambiar la configuración de recursos. Y no te preocupes si te quedas corto o te pasas, siempre podrás redimensionar los recursos de tu servidor (ten en cuenta que el disco SSD no se puede reducir, solo aumentar).

A continuación configura tus modos de acceso al servidor. Hay dos opciones, acceso por contraseña y por llave SSH. Tienes que elegir al menos una, aunque puedes seleccionar las dos. Es lo que haré en este caso.

Crea una contraseña (recuerda, ¡que sea segura!) y selecciona una llave SSH. Para la llave SSH puedes crear una o seleccionar la que ya hay creada para ti por defecto (se llama default).

A continuación configuramos las copias de seguridad en el apartado Configuración de backups. Si lo activas puedes configurar la frecuencia de las copias y el número de copias a guardar. Recuerda que si activas esta opción se utilizará más disco para poder almacenar las copias, así que considera configurar el servidor teniendo en cuenta esto.

El siguiente paso es seleccionar el cortafuegos en la sección Red. Por defecto ya viene un perfil de cortafuegos llamado default configurado, aunque puedes crear el tuyo propio si lo deseas. Vamos a utilizar el que ya viene configurado, pero más adelante necesitaremos modificarlo.

Después puedes activar la red privada si lo deseas. Esto permite a todos tus VPS comunicarse entre sí si lo necesitas. Para nuestro caso no será necesario, pues solo precisamos un VPS, así que lo dejaremos desactivado.

También podrás configurar el filtro para ataques de denegación de servicio (DDoS). Activa esta opción solo en caso de que tengas ataques habitualmente.

A ver, te cuento...

Te envío todos los días un consejo para que cada día seas mejor en Python.
Puede ser un truco, una píldora, un tip, una historia de mentalidad o motivación, cualquier cosa...
Siempre sobre Python y programación.
Más de 2500 personas como tú los reciben cada día.

Día que estás fuera, consejo sobre Python que te pierdes.
Abajo te suscribes a la lista de correo y te regalo un montón de cosas: La Hoja de Referencia de Python, el Tutorial Interactivo, 30 Ejercicios de Python y la Guía de ChatGPT y Python. By the face.

✅ Contenido exclusivo de alto valor      ✅ Sin spam      ✅ Cancela cuando quieras



Antes de suscribirte consulta aquí la 
Información Básica sobre Protección de Datos. Responsable de datos: Juan Monroy Camafreita.
Finalidad de recogida y tratamiento de datos personales: enviarte boletín informativo de Python y comunicaciones comerciales.
Legitimación: tu consentimiento.
Destinatarios: no se ceden a terceros. Los datos se almacenan en los servidores de marketing (GetResponse).
Derechos: podrás ejercer tus derechos de acceso, rectificación, limitación y supresión de datos en info @ codigopiton.com así como presentar una reclamación ante una autoridad de control.
Más información: política de privacidad, encontrarás información adicional sobre la recopilación y el uso de tu información personal.

Finalmente, la última opción te permite ejecutar scripts personalizados en el momento de crear el servidor. No nos hará falta en esta ocasión.

Con esto ya está el servidor correctamente configurado. Puedes revisar el coste total al final justo antes de presionar el botón Enviar que creará el servidor con la configuración seleccionada.

Una vez que termine el proceso podrás ver en tu pestaña de Mis Servidores el nuevo servidor creado, que pasará por algunas fases antes de estar completamente operativo como son Instalando y Optimizando Software. Además, habrás recibido un correo electrónico confirmándote la creación del servidor.

En pocos minutos tu servidor estará en estado Activo y listo para usarse. ¡Así de fácil y rápido!

Servidor activo
Servidor activo

Paso 2: conectando al servidor

Una vez que el servidor está creado, puedes hacer click sobre su nombre para comprobar sus detalles. En la pestaña de Ajustes tendremos información muy importante para acceso a nuestro servidor, como son la dirección DNS y la IP pública. Cualquiera de estos dos datos nos será necesario para acceder al servidor.

Como ves, en este caso, la dirección DNS del servidor es 2407c70c-0a4c-40da-8338-754c957095f0.clouding.host.

Una vez con estos datos ya podremos conectarnos al servidor para comenzar con la instalación de Jupyter.

Puedes utilizar el cliente SSH de tu preferencia para esto. Una opción popular es PuTTY. Yo utilizaré el cliente estándar ssh de mi equipo Linux.

Cuando se creó el VPS solo se creó un usuario, que es el administrador de la máquina o usuario root. Así que tendremos que acceder a la misma utilizando este usuario.

Utiliza la opción -l del comando ssh para indicar el nombre de usuario e indica la máquina a la que te deseas conectar, bien mediante la IP o bien mediante el nombre DNS:

ssh -l root 2407c70c-0a4c-40da-8338-754c957095f0.clouding.host

Si es la primera vez que te conectas acepta la clave SSH.

Introduce la contraseña que seleccionaste al configurar el servidor en el paso 1 y estás dentro. A partir de ahora, casi todas las operaciones de instalación y configuración las haremos desde el terminal remoto.

Paso 3: configurando tu propio nombre de dominio (opcional)

Si tienes un nombre de dominio podrás configurarlo para utilizarlo en lugar del que te proporciona Clouding. Si no tienes un nombre de dominio no pasa nada, no es necesario, puedes continuar con el paso 4. Si quieres un nombre de dominio propio te recomiendo que utilices los servicios de Don Dominio.

Uno de los dominios complementarios de Código Pitón es academiacodigopiton.com. Utilizaré este dominio para este ejemplo pero, evidentemente, tú has de usar el tuyo.

El primer paso es acceder a tu proveedor de nombres de dominio para cambiar lo que se conoce como "servidores de nombres". Los servidores de nombres son aquellos servidores que gestionan el servicio de DNS (Domain Name System) que asigna los nombres de dominios a direcciones IP.

Tenemos que configurar los servidores de nombres de nuestro dominio para que se use el servicio DNS de nuestro servidor VPS. En el caso de Clouding, podrás encontrar los nombres de dichos servidores de DNS en la pestaña DNS.

Servidores DNS de Clouding
Servidores DNS de Clouding

Como puedes ver, en mi caso los servidores son ns1.clouding.io y ns2.clouding.io. Una vez fijados estos nombres como servidores en tu proveedor de nombres de dominio hay que esperar un tiempo para que el cambio se haga efectivo, pues se tiene que propagar la información a diversos servidores alrededor del mundo. Aunque en algunos casos los cambios se producen en minutos, podría llegar a tardar hasta 24 horas.

Sigamos configurando. En la misma página de DNS en la que te encuentras debes añadir tu dominio para poder configurarlo. Haz click en el botón + de añadir dominio e introduce el nombre de tu dominio. En cuanto lo hagas, lo podrás ver en el listado de dominios. Desde ahí mismo podrás editarlo ahora.

15 conceptos fundamentales que necesitas conocer para aprender y dominar Python

Te voy a hacer cuatro regalos (no uno, no dos, no tres, cuatro) que hablan de estos 15 conceptos fundamentales de Python: mi Tutorial Básico Interactivo de Python, una cheat sheet de Python en español: La Hoja de Referencia de Python, una guía de ChatGPT y Python y 30 ejercicios de Python (es un reto para ti).

Estos regalos son exclusivos para los suscriptores de Código Pitón.

👍 Quiero mis cuatro regalos

Haz click en el botón de editar para acceder a la pantalla que nos permite cambiar los registros DNS para tu dominio. En este caso, la configuración es muy sencilla.

Pulsa el botón + de añadir información al registro DNS. Lo que haremos será crear un registro de tipo A que nos permite asociar la IP de nuestro servidor VPS a nuestro nombre de dominio o un subdominio. En este caso, quiero asociar la IP al subdominio jupyter.academiacodigopiton.com para poder acceder a Jupyter utilizando esa dirección en mi navegador, pero tu podrías usar cualquier otro, como www o, incluso, ningún subdominio, para acceder a través del nombre principal.

Anota la dirección IP pública de tu servidor que podrás encontrar en la página principal de configuración de tus servidores VPS y colócala en el campo Apunta a la IP en la configuración de DNS, como puedes ver en la imagen.

Configuración del registro A en el DNS de Clouding
Configuración del registro A en el DNS de Clouding

Pulsa Enviar y lo tienes. Recuerda que los cambios pueden tardar en hacerse efectivos.

Ahora ya podrás acceder a tu servidor utilizando el nombre de dominio o subdominio de tu preferencia.

Paso 4: actualizando el servidor

Te recomiendo que, antes de realizar ninguna otra acción actualices el servidor. El propio mensaje de bienvenida al conectar te recordará si hay actualizaciones pendientes.

Para esto basta con ejecutar el comando apt update para actualizar la lista de paquetes disponibles y, posteriormente, el comando apt upgrade para comenzar la actualización.

El segundo de estos comandos puede pedirte que selecciones aquellos servicios que deban ser reiniciados por haber sido actualizados. Selecciona los que necesites reiniciar (deja los que vengan marcados por defecto) y pulsa Ok.

Reinicio de servicios
Reinicio de servicios

Con esto ya tienes el servidor perfectamente actualizado. Recuerda realizar esta operación de vez en cuando para tener siempre tu servidor a punto.

Paso 5: creando un nuevo usuario

Como el único usuario del sistema es ahora mismo el administrador, debemos crear un usuario estándar.

Haremos uso del comando useradd para añadir un usuario. Puedes llamarle como quieras, yo lo llamaré juan. La opción -s asignará el interprete de comandos (o shell) que seleccionemos, que en este caso será bash. La opción -m creará la carpeta personal para el nuevo usuario.

Para que el nuevo usuario pueda realizar tareas de administración lo añadiremos al grupo sudo. Usaremos el comando usermod con la opción -aG, indicando el grupo y el usuario a añadir a dicho grupo.

Finalmente, asignaremos una contraseña al usuario con el comando passwd, que nos pedirá que introduzcamos una nueva contraseña y la confirmemos.

Así, estos tres comandos se introducirán como sigue:

root@jupyter:~# useradd -m -s /bin/bash juan
root@jupyter:~# usermod -aG sudo juan
root@jupyter:~# passwd juan

Con esto tenemos nuestro nuevo usuario juan (o el nombre que le hayas puesto) configurado y listo para ser usado.

Ahora cerraremos la sesión de administrador y volveremos a conectarnos a nuestro servidor, pero esta vez, utilizando el nuevo usuario y contraseña:

ssh -l juan 2407c70c-0a4c-40da-8338-754c957095f0.clouding.host

¡Recuerda! Si has configurado el DNS para tu nombre de dominio puedes usarlo para conectarte a tu servidor en lugar del nombre inicial asignado.

Paso 6: instalando Jupyter y las librerías deseadas

Ya estamos conectados a nuestro servidor con el usuario estándar recién creado y podemos empezar a instalar el entorno Python necesario para poder acceder a Jupyter remotamente.

La imagen instalada de Ubuntu en nuestro servidor ya contiene una versión actual de Python, con lo que no tendremos que instalarlo nosotros. Sí instalaremos pip, que nos servirá para instalar los paquetes y librerías necesarios.

Recibe contenido exclusivo de Python y programación y obtén gratis mi reto para ti: 30 Ejercicios de Python.
Todos los días te envío un consejo sobre trucos de Python, ejercicios, secretos, mentalidad, sintaxis, historias de motivación, etc.
Día que estás fuera, consejo sobre Python que te pierdes.
✅ Contenido de alto valor      ✅ Sin spam      ✅ Cancela cuando quieras


Antes de suscribirte consulta aquí la 
Información Básica sobre Protección de Datos. Responsable de datos: Juan Monroy Camafreita.
Finalidad de recogida y tratamiento de datos personales: enviarte boletín informativo de Python y comunicaciones comerciales.
Legitimación: tu consentimiento.
Destinatarios: no se ceden a terceros. Los datos se almacenan en los servidores de marketing (GetResponse).
Derechos: podrás ejercer tus derechos de acceso, rectificación, limitación y supresión de datos en info @ codigopiton.com así como presentar una reclamación ante una autoridad de control.
Más información: política de privacidad, encontrarás información adicional sobre la recopilación y el uso de tu información personal.

Para ello ejecutaremos lo siguiente:

juan@jupyter:~$ sudo apt install python3-pip

El comando anterior nos pedirá la contraseña de nuestro usuario y comenzará a instalar los paquetes correspondientes en el sistema tras pedirnos confirmación. Durante el proceso se nos solicitará de nuevo que reiniciemos algunos servicios actualizados como sucedía en el paso 2.

Con pip ya funcional podemos instalar los paquetes que necesitemos y que estarán disponibles para usar desde los cuadernos de Jupyter. En este caso, y como ejemplo, instalaré únicamente numpy y matplotlib:

juan@jupyter:~$ python3 -m pip install --user numpy matplotlib

Cuando termine la instalación de dichos paquetes se nos dará una advertencia acerca de que determinados scripts recién instalados no son accesibles por no estar incluidos en el path de búsqueda. No te preocupes, pues se habrán añadido al fichero .profile los comandos necesarios para actualizar dicho path. La próxima vez que reinicies el sistema ya estará actualizado el path. Para hacerlos disponibles en el momento puedes ejecutar el comando source así:

juan@jupyter:~$ source .profile

Tras instalar todos los paquetes que desees y, en su caso, las librerías del sistema necesarias para darles soporte, ya puedes instalar Jupyter con el siguiente comando:

juan@jupyter:~$ python3 -m pip install jupyter

Y ya lo tenemos instalado. Vamos ahora a configurarlo.

Paso 7: configurando Jupyter

Para poder acceder correctamente a nuestro Jupyter desde un navegador es necesario configurarlo. Para ello hay que ejecutar el siguiente comando:

juan@jupyter:~$ jupyter notebook --generate-config

Esto creará un fichero de configuración por defecto en tu carpeta de usuario /home/usuario (en mi caso /home/juan). Este fichero se ubica dentro de la carpeta .jupyter y se llama jupyter_notebook_config.py.

Como muchas veces Jupyter se instala para acceder localmente, por defecto viene configurado para que se abra un navegador al lanzarlo. Vamos a evitar esto ya que seremos nosotros quienes abramos un navegador remotamente. Así, la primera el primero de los ajustes será modificar la siguiente línea del fichero jupyter_notebook_config.py:

# c.NotebookApp.open_browser = True

Puedes editar el fichero mediante un editor de texto como nano o vim de la siguiente manera:

juan@jupyter:~$ nano .jupyter/jupyter_notebook_config.py

Modifica la línea para eliminar el marcador de comentario # al principio de la misma y para que ponga False en lugar de True. Es decir, la línea debe quedar así:

c.NotebookApp.open_browser = False

Lo siguiente que configuraremos sirve para permitir conexiones remotas y no solo desde la máquina local, paso indispensable si queremos poder usar nuestro Jupyter desde cualquier sitio. Busca la siguiente línea:

# c.NotebookApp.ip = 'localhost'

Modifícala para que quede de la siguiente manera:

c.NotebookApp.ip = '0.0.0.0'

¡Ojo! Asegúrate de eliminar el # del principio o la configuración no tendrá efecto.

Finalmente, vamos a indicarle a Jupyter que genere los ficheros de los cuadernos en la carpeta que queramos. De no hacerlo, los creará por defecto en la carpeta principal del usuario. Busca la propiedad c.NotebookApp.notebook_dir e indica ahí la carpeta que desees. En mi caso será notebooks que estará ubicada en mi carpeta de usuario /home/juan:

c.NotebookApp.notebook_dir = '/home/juan/notebooks'

Guarda el fichero con las configuraciones realizadas y cierra el editor de texto.

No olvides crear la carpeta notebooks que hemos indicado en el fichero de configuración:

juan@jupyter:~$ mkdir notebooks

Ahora vamos a proteger nuestro Jupyter con una contraseña. Desde la línea de comandos escribiremos el siguiente:

juan@jupyter:~$ jupyter notebook password

Esto nos pedirá que introduzcamos una contraseña y que la confirmemos. Introduce una nueva contraseña segura (y que sea diferente de la de la cuenta de registro de Clouding y del usuario que creaste en tu VPS). No te preocupes si algún día olvidas la contraseña. Volviendo a introducir ese comando puedes poner una nueva.

El comando recién introducido escribe el password cifrado a un nuevo fichero de configuración ubicado en la carpeta .jupyter y llamado jupyter_notebook_config.json.

Ya casi lo tenemos, antes de poder lanzar Jupyter para acceder a él, tenemos que hacer otra operación.

Paso 8: abriendo el puerto de Jupyter en el cortafuegos

Es habitual que los VPS estén protegidos mediante cortafuegos o firewalls para restringir las conexiones entrantes. La configuración básica de un cortafuegos está basada en reglas o normas en las que se especifica qué puertos permiten conexiones.

En nuestro caso, Jupyter crea un servidor web que admite conexiones en el puerto 8888 (aunque el puerto es configurable). Vamos a dejar ese puerto por defecto.

Lo que tendremos que hacer es permitir las conexiones a dicho puerto en la configuración del cortafuegos.

Si tienes tu VPS con Clouding, accede al panel de configuración de cortafuegos. Si recuerdas, en el paso 1, al crear el servidor VPS, optamos por elegir el perfil de cortafuegos por defecto que viene preconfigurado. Podrás ver ese perfil, llamado default en el listado de perfiles de cortafuegos.

Lista de cortafuegos en Clouding
Lista de cortafuegos en Clouding

Haz click en el botón de editar el perfil para acceder a la configuración del perfil. En la pantalla de configuración del perfil del cortafuegos podrás observar muchas reglas, como en la siguiente imagen:

Reglas del cortafuegos
Reglas del cortafuegos

Haz click en el botón de añadir nueva regla en el encabezado de la tabla Normas del Firewall. Se abrirá un menú para que elijas la plantilla de norma a utilizar. Selecciona Norma Personalizada y haz click en el botón + de añadir.

Ahora tendrás acceso a un formulario para la configuración de la norma:

  • En el campo Protocolo deja seleccionado TCP.
  • En los campos Desde puerto y Hasta puerto indica el puerto 8888, que es el único que necesita Jupyter.
  • El campo IP de Origen debe contener el valor 0.0.0.0/0. Si quieres limitar el acceso a una única dirección IP, por ejemplo la de tu casa o trabajo, podrías indicarla aquí.
  • Pon la descripción que prefieras en el campo Descripción para identificar la norma, por ejemplo, Jupyter Notebook.
Añadiendo una nueva regla al cortafuegos
Añadiendo una nueva regla al cortafuegos

Pulsa el botón de enviar y se creará la nueva norma. Si todo ha ido bien, podrás verla en el listado de normas con el estado de activada.

Paso 9: asegurando la conexión con SSL

Aunque en este punto ya podríamos lanzar Jupyter y acceder a él desde el navegador para usarlo, todavía no es recomendable hacerlo.

Por defecto se usa una conexión http estándar no segura, sin cifrar. Vamos a remediar esto para poder conectarnos de manera segura a través de https con un certificado SSL válido.

Para generar un certificado SSL haremos uso del servicio gratuito de Let's Encrypt. Para esto vamos a instalar como administradores en el sistema el paquete certbot que nos ayudará en la creación del certificado:

juan@jupyter:~$ sudo apt install certbot

Tras introducir la contraseña de nuestro usuario, se instalarán los paquetes necesarios en el VPS. Nuevamente el sistema nos preguntará si queremos reiniciar algunos servicios. No es necesario en este caso.

Ahora ejecutaremos el comando certbot para generar el certificado para nuestro dominio, que indicaremos mediante el parámetro -d. Aquí has de poner el nombre de dominio asignado a tu VPS o el nombre de tu propio dominio que hayas configurado en el paso 3 (o puedes indicar los dos añadiendo otro parámetro -d).

Para mi caso, que he configurado el dominio jupyter.academiacodigopiton.com haré lo siguiente:

juan@jupyter:~$ sudo certbot certonly -d jupyter.academiacodigopiton.com

Esto lanzará el proceso de generación que te hará varias preguntas:

  • Primero debes indicar que quieres lanzar un servidor temporal para la generación del certificado (opción 1: Spin up a temporary webserver (standalone)).
  • Después te pedirá un correo para notificaciones sobre seguridad y renovación de tus certificados.
  • Finalmente te solicitará que leas las condiciones del servicio. Cuando lo hayas hecho confirma que estás de acuerdo.

Tras esto se generarán los certificados y te indicará en qué lugar se han instalado:

Requesting a certificate for jupyter.academiacodigopiton.com

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/jupyter.academiacodigopiton.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/jupyter.academiacodigopiton.com/privkey.pem
This certificate expires on 2023-03-23.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Estas rutas a los certificados y los propios certificados están protegidos para que solo pueda acceder a ellos el usuario administrador. Como nuestro servidor de Jupyter será lanzado en nombre del usuario que habíamos creado (en mi caso juan), vamos a copiar los certificados a una carpeta y cambiar sus permisos para que dicho usuario pueda acceder a ellos.

Primero creamos una carpeta .certs en la carpeta principal del usuario.

juan@jupyter:~$ mkdir .certs

Después, como administradores copiaremos nuestros certificados a la carpeta recién creada:

juan@jupyter:~$ sudo cp /etc/letsencrypt/live/jupyter.academiacodigopiton.com/fullchain.pem .certs
juan@jupyter:~$ sudo cp /etc/letsencrypt/live/jupyter.academiacodigopiton.com/privkey.pem .certs

Ahora, cambiaremos el propietario de las copias de los certificados para que nos pertenezcan y les daremos los permisos adecuados:

juan@jupyter:~$ sudo chown juan:juan .certs/*.pem
juan@jupyter:~$ chmod 770 .certs

Ya tenemos nuestros certificados listos. Ahora configuraremos Jupyter para que utilice estos certificados. Volveremos a abrir con un editor de texto el fichero de configuración .jupyter/jupyter_notebook_config.py.

Buscaremos la propiedad c.NotebookApp.certfile y le asignaremos como valor la ruta a nuestro certificado fullchain.pem:

c.NotebookApp.certfile = '/home/juan/.certs/fullchain.pem'

Haremos lo mismo con la propiedad c.NotebookApp.keyfile y el certificado privkey.pem:

c.NotebookApp.keyfile = '/home/juan/.certs/privkey.pem'

No te olvides de quitar el # al comienzo de ambas líneas. Guardaremos el fichero de configuración y cerraremos el editor de texto.

Paso 10: conectando con Jupyter

Y ya, por fin, tenemos todo configurado. Para conectar con tu nuevo servidor de Jupyter primero debes lanzarlo, para ello escribe lo siguiente en tu terminal del VPS:

juan@jupyter:~$ jupyter notebook

Esto arrancará el servidor y lo tendremos listo para usar. Debe mostrar un mensaje similar al siguiente en tu terminal:

[I 11:10:51.089 NotebookApp] Serving notebooks from local directory: /home/juan/notebooks
[I 11:10:51.090 NotebookApp] Jupyter Notebook 6.5.2 is running at:
[I 11:10:51.090 NotebookApp] https://jupyter:8888/
[I 11:10:51.090 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

Ahora, desde tu navegador accede a la URL, según estés usando el nombre asignado al VPS o tu propio dominio. Utiliza el protocolo https y el puerto 8888 para la conexión. En mi caso tendré que acceder a https://jupyter.academiacodigopiton.com:8888.

Si todo ha ido bien, se mostrará la pantalla inicial de Jupyter donde te solicitará que introduzcas la clave que configuraste en el paso 7.

Paso 11: utilizando Jupyter

Aquí ya no hay mucho que decir, para probar que todo funciona correctamente crea un nuevo cuaderno y escribe algún código. Yo he creado el cuaderno Parabola en el que pintaré la gráfica de una parábola con un código muy sencillo y utilizando la librería matplotlib instalada previamente en el paso 6.

Parábola en Jupyter con Matplotlib en un servidor VPS
Parábola en Jupyter hecha con Matplotlib en un servidor VPS

Podrás ver que el fichero Parabola.ipynb ha aparecido en la carpeta notebooks que creaste en el paso 7.

Paso 12: iniciando Jupyter automáticamente (opcional)

Finalmente, y de manera opcional, para evitar tener que entrar al VPS y lanzar Jupyter manualmente cada vez que lo necesites, podemos crear un servicio en el sistema y configurarlo para que se arranque al iniciar el servidor. Así lograremos que siempre esté disponible.

Primero crea una carpeta en la que almacenaremos un script para lanzar Jupyter. Yo crearé la carpeta scripts:

juan@jupyter:~$ mkdir scripts

Entra en el directorio creado y crea un fichero de texto llamado jupyter.sh con el siguiente contenido:

#!/bin/bash
/home/juan/.local/bin/jupyter notebook

A continuación vamos a dar permisos de ejecución a este fichero:

juan@jupyter:~/scripts$ chmod 755 jupyter.sh

Ahora podrás lanzar Jupyter ejecutando ese script. Pero lo importante aquí es que lo ejecute el sistema cuando se inicie. Para ello, tenemos que crear un servicio.

Crear el servicio es muy sencillo, basta con crear un fichero más y activarlo como servicio del sistema.

Crea un nuevo fichero de texto como administrador (como usuario estándar no podrás hacerlo) en la carpeta /etc/systemd/system/ que se llame jupyter.service y que tenga el siguiente contenido:

[Unit]
Description=Servicio Jupyter Notebook

[Service]
User=juan
WorkingDirectory=/home/juan
ExecStart=/home/juan/scripts/jupyter.sh
Type=simple
TimeoutStopSec=10
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

Ten en cuenta que debes modificar este contenido para que se ajuste a tu caso, en concreto fíjate en los parámetros User (tu nombre de usuario), WorkingDirectory (la carpeta en la que se ejecutará el script) y ExecStart (el script que se ejecutará, y que es el fichero jupyter.sh que has creado hace un momento). El resto puedes dejarlos tal y como están.

Ahora solo nos queda decirle al sistema que hay un nuevo servicio. Para ello ejecuta lo siguiente:

juan@jupyter:~$ sudo systemctl daemon-reload

Ahora que el servicio está dado de alta en el sistema solo queda activarlo:

juan@jupyter:~$ sudo systemctl enable jupyter

Con esto, cada vez que se inicie el sistema Jupyter se lanzará de manera automática para que esté siempre disponible. Puedes probar a reiniciar el sistema para comprobarlo.

También puedes lanzar el servicio para la ejecución de Jupyter sin reiniciar con solo ejecutar:

juan@jupyter:~$ sudo systemctl start jupyter

Si en lugar de start pones stop podrás pararlo. Y si usas status podrás comprobar el estado del servicio.

Si por lo que sea hay algún problema y el servicio no se arranca podrás consultar el log de errores ejecutando lo siguiente, que te dará las pistas para arreglarlo:

juan@jupyter:~$ sudo journalctl --unit=jupyter

Y listo, ya tienes un VPS con Jupyter siempre activo para usarlo desde donde y cuando quieras.

Conclusiones

Te he contado en este artículo cómo crear un servidor VPS y configurarlo para después instalar Jupyter para utilizarlo de manera remota y segura.

Los servidores VPS de Clouding facilitan mucho esta operación pues su creación y configuración es ágil, intuitiva y sencilla, sin decenas de pasos difíciles de comprender. Además, sus precios son muy competitivos, pudiendo tener un servidor privado virtual disponible y facturado por horas desde tan solo 0.004€/hora. No dudes en registrarte de manera gratuita. Te regalarán 5 € de saldo al crear tu cuenta para que puedas probar sus servicios sin tener que preocuparte.

Si has seguido al pie de la letra todos los pasos de esta guía no habrás tenido ningún problema para conseguir instalar tu servidor de Jupyter particular en un VPS.

Espero que puedas sacarle mucho provecho.

¡Feliz programación!

Si te ha gustado lo que has leído, ESTO TE VA A ENCANTAR...

Te envío todos los días un consejo para que cada día seas mejor en Python.
Puede ser un truco, una píldora, un tip, una historia de mentalidad o motivación, cualquier cosa...
Siempre sobre Python y programación.
Más de 2500 personas como tú los reciben cada día.

Día que estás fuera, consejo sobre Python que te pierdes.
Abajo te suscribes a la lista de correo y te regalo un montón de cosas: La Hoja de Referencia de Python, el Tutorial Interactivo, 30 Ejercicios de Python y la Guía de ChatGPT y Python. By the face.

✅ Contenido exclusivo de alto valor      ✅ Sin spam      ✅ Cancela cuando quieras



Antes de suscribirte consulta aquí la 
Información Básica sobre Protección de Datos. Responsable de datos: Juan Monroy Camafreita.
Finalidad de recogida y tratamiento de datos personales: enviarte boletín informativo de Python y comunicaciones comerciales.
Legitimación: tu consentimiento.
Destinatarios: no se ceden a terceros. Los datos se almacenan en los servidores de marketing (GetResponse).
Derechos: podrás ejercer tus derechos de acceso, rectificación, limitación y supresión de datos en info @ codigopiton.com así como presentar una reclamación ante una autoridad de control.
Más información: política de privacidad, encontrarás información adicional sobre la recopilación y el uso de tu información personal.
30 ejercicios de Python

Mira, te envío 30 ejercicios de Python para practicar todo el Python que necesitas saber para programar con soltura.

Son variados y de distintas dificultades. Tendrás un poco de todo: variables, condicionales, funciones, ficheros, listas, diccionarios, etc.

Y de regalo: La Hoja de Referencia de Python. Pon tu email aquí abajo ahora y te los envío.

Información Básica de Protección de Datos. Responsable de datos: Juan Monroy Camafreita.
Finalidad de recogida y tratamiento de datos personales: enviarte boletín informativo de Python y ofertas de productos y servicios propios.
Legitimación: tu consentimiento.
Destinatarios: no se ceden a terceros. Los datos se almacenan en los servidores de marketing (GetResponse).
Derechos: podrás ejercer tus derechos de acceso, rectificación, limitación y supresión de datos en info @ codigopiton.com así como presentar una reclamación ante una autoridad de control.
Más información: política de privacidad, encontrarás información adicional sobre la recopilación y el uso de tu información personal.