Bottle, es un framework web, escrito en python, que por su tamaño (un único fichero de 149K), entraría dentro de la categoría de microframework, aunque puede cubrir la mayoría de nuestras necesidades.
Una de sus limitaciones, es que no soporta de base HTTPs, pero como enseguida veremos, esta limitación es fácilmente subsanable.
Naturalmente, lo primero que necesitaremos, es un certificado. Si disponemos de uno firmado por una CA será perfecto. En caso contrario, no importa, vamos a crear nuestro propio certificado autofirmado.
Naturalmente, como no puede ser de otra manera, en este último caso, recibiremos una advertencia del navegador indicanco que el certificado no es confiable.
Aquí tienes un pequeño script en bash que creará las claves pública y privada del certificado. Naturalmente, deberás cambiar la variable DOMINIO, por el valor que te interese.
#!/bin/bash
# Este script crea un certificado autofirmado.
# Clave privada: mi.dominio.net.key
# Clave pública: mi.dominio.net.crt
DOMINIO=mi.dominio.net
DIASVALIDEZ=3650
CLAVEPRIVADA=$DOMINIO.key
CLAVEPUBLICA=$DOMINIO.crt
openssl req -x509 -nodes -days $DIASVALIDEZ -newkey rsa:2048 \
-subj /CN=$DOMINIO \
-keyout $CLAVEPRIVADA \
-out $CLAVEPUBLICA
Como imagino que harás las pruebas en tu equipo local, no te olvides de hacer una entrada en tu fichero /etc/hosts para que se pueda resolver la IP de tu dominio ficticio.
127.0.0.1 mi.dominio.net
Ya tenemos nuestro certificado, así que vamos a crear nuestro entorno virtual y ha instalar lo que necesitamos. Bottle y gunicorn (que será el encargado de gestionar la comunicación https).
python3 -m venv venv
source venv/bin/activate
pip install bottle
pip install gunicorn
Ya sólo nos queda crear nuestro maravilloso sitio https.
import os
from bottle import (route, run, request, response, abort, error, static_file)
DOMINIO = "mi.dominio.net"
#===============================================================================
# Configuramos directorios para recursos estáticos.
#===============================================================================
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_DIR = os.path.join(BASE_DIR, 'static')
@route('/', ['GET'])
def home():
return "Sitio seguro !!!"
#===============================================================================
# Iniciamos el servidor web que expone las funciones en todas sus direcciones
# de red.
#
# En lugar de 443 para https, para no requerir permisos de root, usamos el 8443.
#===============================================================================
run(
reloader = True,
debug = True,
host = "0.0.0.0",
server='gunicorn',
keyfile=f"{ DOMINIO }.key",
certfile=f"{ DOMINIO }.crt",
port = 8443
)
El secreto, bottle cumple con la espacificación de WSGI (Web Server Gateway Interface) y, nos permite ejecutarlo como servidor web autónomo, o delegar en un servidor que cumpla con la especificación. En nuestro caso, gunicorn que es quien nos dará el soporte para https.
Ya solo nos queda ejecutar nuestro servidor, con algo parecido a:
python3 main.py
y comprobar el resultado de nuesto magnífico trabajo
Fácil ¿no?
Top comments (0)