Synology Web Station con Flask y Python

Hola a tod@s!
En este post, veremos cómo montar una web con Flask utilizando Web Station, configurar el acceso externo y como revisar nuestro log.

Flask: Es un microframework web de Python que permite crear aplicaciones y APIs de forma rápida y sencilla. Es ligero, flexible y no impone una estructura rígida, lo que facilita la personalización según las necesidades del proyecto. Además, es extensible, permitiendo añadir funcionalidades a través de librerías y extensiones adicionales.

Web Station: Es uno de los servicios que nos ofrece synology para ejecutar flask con Python.

1. Instalación de Python en Synology

Primero, asegúrate de tener Python instalado en tu Synology. Si no lo tienes, puedes instalarlo desde el Package Center.

2. Configuración de Web Station

Vamos a crear un entorno para Python desde Web Station y para ello iremos a:

  1. Configuración de Lenguaje de Script:
    • Ve al menú de Web Station, selecciona Configuración de lenguaje de script y en la pestaña de Python, pulsa en «Crear».
  2. Creación del Entorno:
    • Añade un nombre de perfil y una descripción. Configura uWSGI seleccionando el número de procesos, hilos, y límites máximos.
  3. Instalación de Módulos:
    • Aquí puedes añadir tu archivo requirements.txt para instalar las dependencias necesarias o bien haciéndolo manualmente. Puedes seleccionar la versión de Python que necesites.
  4. Revisión y Creación:
    • Revisa la configuración y crea el entorno.

3. Configuración del Portal de Servicios Web

En esta sección configuraremos la redirección de nuestra aplicación Flask:

  1. Crear un Host Virtual:
    • Ve al Portal de servicios web y crea un nuevo host virtual.
  2. Configuración del Host:
    • Selecciona el tipo de portal (basado en nombre o puerto).
    • Añade el nombre del host si es necesario y configura el puerto.
    • Selecciona la ruta de tu proyecto Flask.
    • Configura Nginx como backend y selecciona Python como lenguaje, eligiendo el entorno que creaste anteriormente.
    • Establece los tiempos de espera, guarda y confirma los cambios.

*Si creas el host virtual basado en el nombre de host, recuerda la redirección.

4. Acceso Externo con DDNS o Redireccionar desde el proveedor

  • Si tienes un dominio o subdominio, redirige desde tu proveedor de dominio a la IP de tu Synology.
  • También podrías configurar el servicio DDNS para automatizar la actualización de IP, ejemplo con el proveedor strato en este post.

Nota: Es recomendable utilizar SSL para mayor seguridad.

5. Configuración de Certificados SSL

Para añadir un certificado SSL:

  1. Ve a Panel de control > Seguridad > Certificado.
  2. Selecciona Añadir un nuevo certificado y sigue los pasos para completar la configuración.

Al finalizar, podrás acceder a tu web mediante HTTPS.

Si necesitas más información sobre este tema puedes ver este post.

6. Registro de Logs en Flask

Para gestionar logs en Flask, dejo un ejemplo de código que puedes utilizar como base:

import sys
import os
# Añade el directorio raíz del proyecto al PYTHONPATH para poder importar
sys.path.append(os.path.abspath(os.path.dirname(__file__)))

from flask import Flask, render_template, request
import json

# Logging
logger = get_logger()
# Flask
app = Flask(__name__)

# Rutas
@app.route('/')
def index():
    try:
        logger.info(f"Probando acceso index")
        return render_template('index.html')
    except Exception as e:
        logger.error('Error {e}')
        sys.exit()


# Ejecutar
if __name__ == '__main__':
    app.run('0.0.0.0', port=80)

*La parte de código sys.path.append(os.path.abspath(os.path.dirname(__file__))) es la solución al error:

attempted relative import with no known parent package

Funciones de ejemplo para el log en Flask

  • Ejemplo conectando al «Centro de registros» de nuestro Synology:

*Si quieres más información sobre este tema puedes ir a este post (pinchado aquí).

import logging
import logging.handlers
import sys

def get_logger():
    # LOGGING
    logger = logging.getLogger()
    if not logger.handlers:
        h = logging.handlers.SysLogHandler(address=("192.168.1.10", 514), facility='user')
        logger.setLevel(logging.DEBUG)
        logger.addHandler(h)
    
    return logger
  • Ejemplo creando tu propio archivo.log
import logging
import logging.handlers
import sys

def get_logger():

    nom_loggin = f'/volume1/ruta/proyecto/logs/app.log' # Ruta completa
    logging.basicConfig(filename=nom_loggin, level=logging.INFO, format='%(asctime)s - %(message)s',
                    datefmt='%d-%b-%y %H:%M:%S')
    return logging

7. Ver registros Python y uWSGI

A parte de tener nuestro registro de LOG es posible que tengamos problemas a la hora de ejecutar o simplemente porque queremos ver los registros de la conexión. Para ello podemos revisar los logs de Python y uWSGI:

  • Accede a la ruta: cd /var/packages/Python3.9/var/log/
  • Usa el comando para ver los logs: sudo cat python3.9-uwsgi.log

Recuerda ajustar la ruta según la versión de Python que estés utilizando.
Dejo el comando directo:

sudo cat /var/packages/Python3.9/var/log/python3.9-uwsgi.log

* De alguna cosilla os salvará poder ver este log… 😉


¡Espero que os haya sido útil!

Salu2!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *