Bottle is a small microframework that lets you build simple python webapps in a few minutes. This talk will explain how to build simple webapp from scratch and configure your system to deploy many other apps concurrently with a rock solid and scalable setup.
Exploring the Future Potential of AI-Enabled Smartphone Processors
Simple webapps with nginx, uwsgi emperor and bottle
1.
2. What is nginx
HTTP and reverse proxy server
Event driven
Very fast
Easy to configure
3. What is uWSGI
WSGI compatible server
VERY flexible
Little overhead
Compatible with many frameworks like: bottle, flask,
django, …
4. What is bottle
Bottle is a fast, simple and lightweight WSGI web
microframework
No additional dependencies
Uses decorators: @route, @get, @post, etc…
5. Bottle Hello World
mkdir –p /opt/uwsgiApps/apps/
cd /opt/uwsgiApps/apps/
virtualenv bottle-hello
cd bottle-hello
pip install bottle
6. Bottle Hello World
vi bottle-hello.py:
from bottle import route, run
@route('/hello')
def hello():
return "Hello World!"
if __name__ == '__main__':
run(port=8080, debug=True)
else:
application = app
7. Bottle Hello World
python bottle-hello.py
Try to access http://localhost:8080/
8. Bottle Hello World v2
Add this (after the initial imports) to bottle-hello.py:
from bottle import template
@route('/hello/<name>')
def greet(name='Stranger'):
return template('Hello {{name}}, how are you?', name=name)
python bottle-hello.py
Try to access http://localhost:8080/hello/yourname
9. uWSGI installation
pip install uwsgi
vi /etc/init/uwsgi.conf:
# uWSGI - manage uWSGI application server
description "uWSGI Emperor"
start on (filesystem and net-device-up IFACE=lo)
stop on runlevel [!2345]
respawn
env LOGTO=/var/log/uwsgi/uwsgi.log
env BINPATH=/usr/local/bin/uwsgi
exec $BINPATH --emperor /opt/uwsgiApps/conf.d/ --logto $LOGTO
10. uWSGI emperor
One of many uWSGI configuration options
One master process
Many independent child processes
Each application has a config file
Touch or modify the config file to restart the
application
11. uWSGI example config
vi /opt/uwsgiapps/conf.d/bottle-hello.xml:
<uwsgi>
<master>true</master>
<processes>1</processes>
<vaccum>true</vaccum>
<chmod-socket>600</chmod-socket>
<socket>/tmp/%n.sock</socket>
<uid>www-data</uid>
<gid>www-data</gid>
<pythonpath>/opt/uwsgiApps/apps/%n/src/</pythonpath>
<module>scatterapp</module>
</uwsgi>
12. nginx configuration
vi /etc/nginx/conf.d/subdomain1.domain.com.conf:
server {
listen 80;
server_name subdomain1.domain.com.conf;
location / {
include uwsgi_params;
uwsgi_pass unix://tmp/bottle-example.py;
}
}
13. System overview
nginx acts as a reverse proxy
nginx redirects the requests based on the domain name or any other
parameter (ip address, url path, cookies, etc)
uWSGI starts and stops the applications
bottle is used to program the application