En aquest tema, aprendrem com configurar una aplicació Flask per a un entorn de producció. Això inclou ajustar la configuració de l'aplicació, assegurar-se que és segura i optimitzada per a un rendiment òptim, i preparar-la per al desplegament en un servidor de producció.
- Configuració de l'Entorn
1.1. Variables d'Entorn
Les variables d'entorn són una manera segura de gestionar la configuració de l'aplicació, especialment per a informació sensible com claus secretes i configuracions de bases de dades.
Exemple de Configuració de Variables d'Entorn
import os class Config: SECRET_KEY = os.environ.get('SECRET_KEY') or 'a_hard_to_guess_string' SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or 'sqlite:///app.db' DEBUG = False TESTING = False class ProductionConfig(Config): DEBUG = False class DevelopmentConfig(Config): DEBUG = True TESTING = True class TestingConfig(Config): TESTING = True
1.2. Configuració de l'Aplicació
És important separar la configuració de desenvolupament de la de producció. Això es pot fer utilitzant diferents fitxers de configuració o classes de configuració.
Exemple de Configuració de l'Aplicació
from flask import Flask from config import ProductionConfig app = Flask(__name__) app.config.from_object(ProductionConfig)
- Seguretat
2.1. Claus Secretes
Assegura't que la clau secreta (SECRET_KEY
) sigui única i difícil de predir. Aquesta clau s'utilitza per a la signatura de cookies i altres operacions criptogràfiques.
2.2. HTTPS
Utilitza HTTPS per assegurar la comunicació entre el client i el servidor. Això es pot aconseguir configurant el servidor web (com Nginx o Apache) per utilitzar certificats SSL.
2.3. Protecció contra Atacs CSRF
Flask-WTF proporciona protecció contra atacs CSRF (Cross-Site Request Forgery).
Exemple de Protecció CSRF
- Optimització del Rendiment
3.1. Caching
Utilitza mecanismes de caching per millorar el rendiment de l'aplicació. Flask-Caching és una extensió que facilita aquesta tasca.
Exemple de Configuració de Caching
3.2. Compressió
La compressió de les respostes HTTP pot reduir el temps de càrrega de les pàgines. Flask-Compress és una extensió que pot ajudar amb això.
Exemple de Configuració de Compressió
- Logs i Monitorització
4.1. Registre de Logs
Configura el registre de logs per capturar errors i informació important sobre l'estat de l'aplicació.
Exemple de Configuració de Logs
import logging from logging.handlers import RotatingFileHandler if not app.debug: file_handler = RotatingFileHandler('logs/app.log', maxBytes=10240, backupCount=10) file_handler.setFormatter(logging.Formatter( '%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]' )) file_handler.setLevel(logging.INFO) app.logger.addHandler(file_handler) app.logger.setLevel(logging.INFO) app.logger.info('App startup')
4.2. Monitorització
Utilitza eines de monitorització per supervisar el rendiment i la disponibilitat de l'aplicació. Algunes opcions populars inclouen New Relic, Prometheus i Grafana.
- Desplegament
5.1. Servidor WSGI
Utilitza un servidor WSGI com Gunicorn o uWSGI per executar l'aplicació en producció.
Exemple de Configuració amb Gunicorn
5.2. Servidor Web
Configura un servidor web com Nginx o Apache per servir l'aplicació i gestionar les sol·licituds HTTPS.
Exemple de Configuració de Nginx
server { listen 80; server_name yourdomain.com; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; # managed by Certbot }
Conclusió
En aquesta secció, hem après com configurar una aplicació Flask per a un entorn de producció. Hem cobert la configuració de l'entorn, la seguretat, l'optimització del rendiment, el registre de logs i la monitorització, així com el desplegament utilitzant un servidor WSGI i un servidor web. Amb aquests coneixements, estàs preparat per portar la teva aplicació Flask a producció de manera segura i eficient.
Curs de Desenvolupament Web amb Flask
Mòdul 1: Introducció a Flask
- Què és Flask?
- Configuració del Teu Entorn de Desenvolupament
- Creant la Teva Primera Aplicació Flask
- Entenent l'Estructura d'una Aplicació Flask
Mòdul 2: Conceptes Bàsics de Flask
- Enrutament i Mapeig d'URL
- Gestió de Mètodes HTTP
- Renderització de Plantilles amb Jinja2
- Treballant amb Fitxers Estàtics
Mòdul 3: Formularis i Entrada d'Usuari
Mòdul 4: Integració de Bases de Dades
- Introducció a Flask-SQLAlchemy
- Definició de Models
- Realització d'Operacions CRUD
- Migracions de Bases de Dades amb Flask-Migrate
Mòdul 5: Autenticació d'Usuaris
- Registre d'Usuaris
- Inici i Tancament de Sessió d'Usuaris
- Hashing de Contrasenyes
- Gestió de Sessions d'Usuaris
Mòdul 6: Conceptes Avançats de Flask
- Blueprints per a Aplicacions Grans
- Gestió d'Errors
- Pàgines d'Error Personalitzades
- Registre i Depuració
Mòdul 7: APIs RESTful amb Flask
- Introducció a les APIs RESTful
- Creació de Punts Finals RESTful
- Gestió de Dades JSON
- Autenticació per a APIs
Mòdul 8: Desplegament i Producció
- Configuració de Flask per a Producció
- Desplegament a Heroku
- Desplegament a AWS
- Monitorització i Optimització del Rendiment
Mòdul 9: Proves i Millors Pràctiques
- Proves Unitàries amb Flask
- Proves d'Integració
- Cobertura de Proves
- Millors Pràctiques per al Desenvolupament amb Flask