arrow_back Volver
Inicio keyboard_arrow_right Artículos keyboard_arrow_right Artículo

¿Cómo Realizar El Deploy De Una Aplicación Flask A Heroku?

Eduardo Ismael Garcia

Full Stack Developer at Código Facilito.

av_timer 2 Min. de lectura

remove_red_eye 38053 visitas

calendar_today 25 Octubre 2019

En esta ocasión aprenderemos a desplegar nuestra aplicación Flask a los servidores de Heroku. Contrarío a lo que muchos puedan pensar esta es una tarea relativamente sencilla. 😉

Para este tutorial estaré trabajando con el API que construimos en el post aterior.

Bien, una vez dicho esto comencemos. 😺

Dependencias

Lo primero que debemos hacer será instalar la biblioteca de gunicor. Para ello ejecutamos el siguiente comando.

pip install gunicorn

Para trabajar con variables de entorno recomiendo utilizar decouple.

pip install python-decouple

Listo, una vez con las dependencias instaladas el siguiente paso será generar nuestro archivo requirements.txt

pip freeze > requirements.txt

Configuración Heroku

Ahora vamos a crear y configurar nuestro proyecto en Heroku; para ello haremos uso del CLI.

heroku login

Creamos nuestro proyecto.

heroku create <nombre de tu aplicación heroku>

Ligamos el repositorio a nuestra app en heroku.

heroku git:remote -a <nombre de tu aplicación heroku>

Procedemos a crear nuestra base de datos.

heroku addons:create heroku-postgresql:hobby-dev

Al nosotros crear la base de datos se creará, de forma automática, la variable de entorno DATABASE_URL, variable que almacena la url de la base de datos. 🍔

Configuración Flask

Ya tenemos el proyecto y la base de datos, toca el turno de configurar nuestro proyecto Flask. En mi caso el archivo config.py quedaría de la siguiente manera.

from decouple import config

class Config:
    pass

class DevelopmentConfig(Config):
    DEBUG = True
    SQLALCHEMY_DATABASE_URI = 'postgresql://localhost/users'
    SQLALCHEMY_TRACK_MODIFICATIONS = False

class ProductionConfig(Config):
    DEBUG = False
    SQLALCHEMY_DATABASE_URI = config('DATABASE_URL', default='localhost')
    SQLALCHEMY_TRACK_MODIFICATIONS = False

config = {
    'development': DevelopmentConfig,
    'production': ProductionConfig
}

Utilizo la variable de entorno DATABASE_URL para el atributo SQLALCHEMY_DATABASE_URI

En mi archivo main.py agrego una simple condición para saber cual será la configuración a utilizar.

from decouple import config as config_decouple

def create_app(enviroment):
    app = Flask(__name__)

    app.config.from_object(enviroment)

    with app.app_context():
        db.init_app(app)
        db.create_all()

    return app

enviroment = config['development']
if config_decouple('PRODUCTION', default=False):
    enviroment = config['production']

app = create_app(enviroment)

En este caso me apoyo de la variable de entorno PRODUCTION para conocer si nos encontramos en producción o no, así que es necesario crear dicha variable en nuestro servidor.

Nos situamos en settings del proyecto en Heroku y agregamos la variable de entorno. 🤠

El siguiente paso será crear nuestro archivo Procfile, Sí, así sin extensión alguna. Colocamos lo siguiente.

web: gunicorn main:app

En mi caso colo main:app ya que la aplicación de Flask (app) se encuentra en mi archivo main.py.

En teoría, con todo lo realizado hasta este punto deberíamos poder desplegar nuestra aplicación sin ningún problema, en teoría. 🤖

Que nervios, 👻 ahora ejecutamos el siguiente comando, el comando clave.

git push heroku master

El proceso de deploy puede tardar un par de segundos, e inclusive minutos, dependiendo del tamaño del proyecto así como de las dependencias.

Listo! sí no tuviste ningún error, felicitaciones, tu proyecto ya se encuentra en un servidor de producción, todo el mundo puede acceder a él. 🤩😎

Ahora simplemente ingresamos a nuestro sitio web.

heroku open

Si queremos echa un vistazo a los logs ejecutamos la siguiente sentencia.

heroku logs

Bootcamp FullStack con JavaScript

Más información

Inscripciones Abiertas.