Prompt for Jan. 28

Today we're going to look at how to deploy applications to the web so that others can view them. The goal here is not to create a production-ready system. While we'll incorporate some libraries that are highly performant, we won't be following the absolute best practices for industry use so that we can instead make things a bit easier to prototype.

Requirements: Python 3 | Flask | WhiteNoise | Gunicorn | free Render account | GitHub account (recommended)
(you can use pip to install "flask" and "whitenoise")

A number of cloud "platform as a service" tools exist for hosting web-based projects efficiently. In short, they allow you to upload web server code to a cloud backend which then does the hard part of making them web-accessible. While today we will make use of Render, there are many different providers. These include (in no particular order) Microsoft Azure, AWS, Fly.io, Vercel, and Digital Ocean among many, many others. I encourage you to examine each and figure out which set of features and end-user agreement works best for you. For the purposes of this class, you should not need a paid account.

Important note: You may not need a full Render web service to host a basic homework project. While I am demoing a full web service today, check out Render's ability to serve static sites which will likely suffice for HW1, HW2, etc.

Our system will involve the following components:

At the conclusion of the class, you'll be able to find the files we used here. You can access the Render site we created here.

Commands used in the lecture:

      
      # Go on GitHub and make a new project for your code
      #  (you can also add collaborators at this time)
      
      # Clone your repository on your computer
      git clone -REPOSITORY URL-
      
      # Render needs a requirements file
      #  Use a text editor of your choice. I use VSCode, which can run from the command line
      code requirements.txt
      
      # It includes:
      #   gunicorn - library that runs our code as a web service, must include
      #   flask - imported in our .py
      #   whitenoise - imported in our .py
      
      # Verify that you have installed all of the libraries you are requiring
      pip install -r requirements.txt
      
      # Make a Flask app (make sure Python 3, Flask, and WhiteNoise are installed)
      code app.py
      
      # See the demo files for what we added to app.py

      # At this point we also made a static directory and put some files in it for Whitenoise to serve

      # Test Flask server to see if it works (command may just be python for your machine)
      python app.py
      
      # Commit the changes to your local git repository
      git status
      git add app.py
      git add requirements.txt
      # etc. to add all changed/added files

      # Now commit the changes and push to Github
      git commit -m "first commit"
      git push

      # You now need to set up a project on Render. If is easiest if you connect your account
      # Pick Web Services from the list and select your repository
      
      # Render usually figures out what kind of service you need, but it may get settings wrong
      # Make sure you have set:
      #   Python or Python 3.7 for Environment
      #   pip install -r requirements.txt in Build Command
      #   gunicorn app:app in Start Command

      # Once you create your page, it will begin to build. Check the page for errors/logs
      
      # If you want to modify your page, commit the changes to your repository
      # Then just use the Render menu to pull from your latest commit to update and rebuild