I am currently developing an iOS application that needs a backend to pull data from. I have implemented the backend using Python, web.py and pymongo.
I deployed everything on an EC2 instance, assigned an elastic IP to the instance that the iOS devices call to access the backend, and launch the application through SSH by doing:
nohup python main.py &
Everything works fine (couple dozen users a day, with potential to grow; data transferred is rarely more than a few kilobytes), but I'm wondering if this is the proper way to do things.
For instance on the web.py website, they explain ways to use web.py with Apache, lightppd etc.; are these just special cases, or should I be deploying my backend using one of those full featured servers?
I would absolutely use a full web server rather than the one built into web.py, although you should be okay for now if the traffic remains low. I think the one built into web.py is supposed to be used for debugging, rather than production.
It's mostly a matter of preference which of those servers you use, but I like Nginx with uWSGI.
FWIW, we use CherryPy (the web server "built into" web.py) behind nginx to serve most of the HTML at Oyster.com -- nginx splits the traffic across 2 or 3 web servers each running 4 Python processes, and we can easily handle 100s of requests per second.
However, we use a content delivery network (CDN) for our static resources like images and CSS.