| 
 | 1 | +# Deploying your app to Heroku - a step by step guide  | 
 | 2 | + | 
 | 3 | +Up until now, we have been working on our app and running it locally on our laptops. Whilst  | 
 | 4 | +this is useful for testing out our app during development, it's no good if our friends want to see  | 
 | 5 | +what we've done in this course!  | 
 | 6 | + | 
 | 7 | +In order for our friends to see the app, we need to upload (deploy) our code to Heroku, a cloud-based platform  | 
 | 8 | +which will assign a publicly accessible URL to our app that can then be visited!  | 
 | 9 | + | 
 | 10 | +Without further ado, let's go through how you can deploy your first app to Heroku!  | 
 | 11 | + | 
 | 12 | +0. Before you start to deploy your app, there are some chores we need to do first:  | 
 | 13 | +   * Make a `Procfile` in the **root folder** of your application. This file contains the Command Prompt/Terminal command telling Heroku exactly how to start/run your application.  | 
 | 14 | +   It normally contains only the following line:  | 
 | 15 | +   ```  | 
 | 16 | +   web: python app.py  | 
 | 17 | +   ```  | 
 | 18 | +   Replace `app.py` with the actual name of your file containing your Flask code if you named it something different.  | 
 | 19 | +   In case you're curious: the `web:` part before the command basically tells Heroku to run your Python code as a web application.  | 
 | 20 | +     | 
 | 21 | +   * Make a file named `requirements.txt` in the **root folder** of your application. This file lists all the external libraries  | 
 | 22 | +   (such as `Flask` and `tweepy`) required by your application, so that Heroku knows exactly the required libraries to install  | 
 | 23 | +   before trying to run your application.  | 
 | 24 | +   In this file, type in the libraries your application require line by line, which may look something like the following:  | 
 | 25 | +   ```  | 
 | 26 | +   flask  | 
 | 27 | +   requests  | 
 | 28 | +   tweepy  | 
 | 29 | +   requests  | 
 | 30 | +   ```  | 
 | 31 | +     | 
 | 32 | +   * In `app.py` (or whatever you named your main file containing the Flask code), add the following line to the top  | 
 | 33 | +   of your Flask code:  | 
 | 34 | +   ```python  | 
 | 35 | +   import os  | 
 | 36 | +   ```  | 
 | 37 | +   For the curious: the `os` module is imported so that we can access *environment variables* set by Heroku, which includes the  | 
 | 38 | +   *port* it has assigned to run your application on.  | 
 | 39 | +     | 
 | 40 | +   Next (usually near the bottom of your Flask code), replace  | 
 | 41 | +   ```python  | 
 | 42 | +   app.run(debug=True)  | 
 | 43 | +   ```  | 
 | 44 | +   with the following:  | 
 | 45 | +   ```python  | 
 | 46 | +   if 'PORT' in os.environ:  | 
 | 47 | +        app.run(host='0.0.0.0', port=int(os.environ['PORT']))  | 
 | 48 | +   else:  | 
 | 49 | +        app.run(debug=True)  | 
 | 50 | +   ```  | 
 | 51 | +   Again, for the curious: this piece of conditional logic checks whether you are running your application on Heroku  | 
 | 52 | +   (in which case, the `PORT` environment variable would exist), or if you are running your application locally. The  | 
 | 53 | +   `host=0.0.0.0` bit instructs your Flask application to listen on **all** web address. This is important to ensure  | 
 | 54 | +   the application runs on Heroku since we don't know which host Heroku will decide to host the application on.  | 
 | 55 | + | 
 | 56 | +1. If you haven't already, go make a Heroku account at https://www.heroku.com  | 
 | 57 | + | 
 | 58 | +2. Once you have made a Heroku account, upon logging in, you will be taken to a dashboard, which looks something like the  | 
 | 59 | +following:  | 
 | 60 | + | 
 | 61 | +  | 
 | 62 | + | 
 | 63 | +3. To deploy the app, we need to make one first on Heroku, so do that by clicking **New > Create New app** (button at top right of the  | 
 | 64 | +dashboard)  | 
 | 65 | + | 
 | 66 | +4. Type in the name of your application, and change the Runtime Selection to "Europe" - this is so that the application loads  | 
 | 67 | +faster as we are geographically closer to Europe than the United States. Finally, click "Create App".  | 
 | 68 | + | 
 | 69 | +  | 
 | 70 | + | 
 | 71 | +5. After clicking "Create App", you should be greeted with the following screen:  | 
 | 72 | + | 
 | 73 | +  | 
 | 74 | + | 
 | 75 | +6. Under "Deployment Method", change it to "GitHub". A "Connect to GitHub" section should now appear.  | 
 | 76 | + | 
 | 77 | +7. Under the "Connect to GitHub" section that just appeared, search for the GitHub repository corresponding to your project, then  | 
 | 78 | +click "Connect" to link the relevant repository (appeared as a result of the search) to the Heroku application you've just created.  | 
 | 79 | + | 
 | 80 | +8. To deploy your project, click "Deploy Branch" under "Manual deploy".  | 
 | 81 | + | 
 | 82 | +9. (Optional) You may have just noticed that a section named "Automatic deploys" has appeared in addition to the "Manual deploy"  | 
 | 83 | +section once you have connected your GitHub repository properly. To save you having to come back to this page in the future  | 
 | 84 | +and click "Deploy Branch" each time you pushed something new to your repository, if you click "Enable Automatic Deploys", then  | 
 | 85 | +Heroku will do so automatically.  | 
 | 86 | + | 
 | 87 | +Congratulations! You have now successfully deployed your application to Heroku!  | 
0 commit comments