Hello Friends, In this article I will show you how to deploy a flask app on Heroku. Follow the below steps to deploy your python flask app on Heroku.
Prerequisite:
- You must have installed Git in your system.
- You must have installed Python in your system.
Step-1: Install Heroku CLI
% brew tap heroku/brew && brew install heroku
Above command is for Mac, for other systems you can click here
Step-2: Create Python Virtual Environment
% python3 -m venv foldername
% source foldername/bin/activate
% cd foldername
Step-3: Install Flask & Gunicorn
% pip3 install flask gunicorn
Step-4: Create an app folder and simple python app
% mkdir app
% cd app
% vi main.py
main.py
from flask import Flask
app= Flask(__name__)
@app.route('/')
def index():
return "<h1>Welcome to CodingX</h1>"
Step-5: Create an entry point to the application, wsgi.py
% cd ../
% vi wsgi.py
wsgi.py
from app.main import app
if __name__ == "__main__":
app.run()
Step-6: Run the application in your local system
% python wsgi.py
Step-7: Create requirements.txt and Procfile file
% pip3 freeze
% pip3 freeze > requirements.txt
% vi Procfile
Procfile
web: gunicorn wsgi:app
Step-8: Create an app in Heroku
Step-9: Deploy your app to heroku
% heroku login
% git init
% heroku git:remote -a codingx-python
% git add.
% git commit -am "First python app"
% git push heroku master
Step-10: Open your application on browser
https://app-name.herokuapp.com
It's done!
Please Subscribe to my Youtube Channel https://youtube.com/c/codingx
Oldest comments (16)
Thank you, Very good. More people should focus on succinct explanations like this.
I am glad you like it :)
Thanks omg you are thebest =ever!!!!1!!!!
Hi,
Firstly thank you very much ... I have to python files and they are in the same folder, named app folder... one is main.py and the other is sendemail1.py and there is wsgi.py file under the virtual directory. But when i run the wsgi.py it gives me the ModuleNotFoundError: No module named 'sendemail1' error so i can not push to heroku...
my wsgi.py is;
from app.main import app
if name == "main":
app.run()
main.py file is:
from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
from sendemail1 import sendemail
from sqlalchemy.sql import func
...
app= Flask(name)
app.config['SQLALCHEMY_DATABASE_URI']='postgresql://postgres:123456@localhost/height_collector'
class Data(db.Model):
tablename="data"
id=db.Column(db.Integer,primary_key=True)
email_=db.Column(db.String(120),unique=True)
height_=db.Column(db.Integer)
@app.route("/")
def index():
return render_template("index.html")
@app.route("/success",methods=['POST'])
def success():
if request.method=='POST':
email=request.form["email_name"]
height=request.form["height_name"]
if name=='main':
app.debug=True
app.run()
sendemail1.py file is
from email.mime.text import MIMEText
import smtplib
def sendemail(email,height,avg_height,count):
from_email="usertestblabla@gmail.com"
from_password="eee134566"
to_email=email
thank you very much
Hi again,
i found the error...It is because i have to write the import like this
from app.sendemail1 import sendemail to the main.py
than it works
have a great day
Super useful!!!!!!!!!
thank you!!!
Thanks great tutorial.
Hey I have a simple endpoint on my Herokuapp bloggir.herokuapp.com/d and i want to fetch it with JS fetch API, it is giving an error.please help
Thank you so much!! Very well explained
I like the tutorial, Thank you.
My question is how do is set a port and a database that isn't a local storage on like: sqlite, to using postgresql?
Neat work Thanks lot
Thanks, this was quick and easy and it worked perfectly for me.
Thank you. very useful
Thanks mate!
OMG!!! THANK YOU SO MUCH!!! I was spending the past few days struggling to deploy my Flask app to Heroku, and then I stumbled across your article. After a few modifications, the site is now in production! :D