comparison docs/overview.rst @ 5418:439792d55052

docs: try to improve the web server overview page Say more about the role of paster and reverse proxies and do not give any hints that the combination should be a magic silver bullet.
author Mads Kiilerich <madski@unity3d.com>
date Thu, 20 Aug 2015 17:29:55 +0200
parents 36a35394b3cb
children fbbe80e3322b
comparison
equal deleted inserted replaced
5417:36a35394b3cb 5418:439792d55052
75 ---------- 75 ----------
76 76
77 Kallithea is (primarily) a WSGI_ application that must be run from a web 77 Kallithea is (primarily) a WSGI_ application that must be run from a web
78 server that serves WSGI applications over HTTP. 78 server that serves WSGI applications over HTTP.
79 79
80 - Kallithea uses the Paste_ tool for some admin tasks. Paste provides ``paster 80 Kallithea itself is not serving HTTP (or HTTPS); that is the web server's
81 serve`` as a convenient way to launch Python WSGI / web servers. 81 responsibility. Kallithea does however need to know its own user facing URL
82 This method is perfect for development but *can* also be used for production. 82 (protocol, address, port and path) for each HTTP request. Kallithea will
83 usually use its own HTML/cookie based authentication but can also be configured
84 to use web server authentication.
83 85
84 ``paster`` is a command line tool. Using it in production requires some way to 86 There are several web server options:
85 wrap it as a manageable service.
86 87
87 Paste come with its own web server but Kallithea defaults to use Waitress_. 88 - Kallithea uses the Paste_ tool as command line interface. Paste provides
88 Gunicorn_ is also an option. These web servers have different limited feature 89 ``paster serve`` as a convenient way to launch a Python WSGI / web server
89 sets. 90 from the command line. That is perfect for development and evaluation.
91 Actual use in production might have different requirements and need extra
92 work to make it manageable as a scalable system service.
90 93
91 It is also common/mandatory to put another web server or (reverse) proxy in 94 Paste comes with its own built-in web server but Kallithea defaults to use
92 front of these Python web servers. Nginx_ is a common choice. This simple 95 Waitress_. Gunicorn_ is also an option. These web servers have different
93 setup will thus often end up being quite complex. 96 limited feature sets.
94 97
95 The configuration of which web server to use is in the ini file passed to 98 The web server used by ``paster`` is configured in the ``.ini`` file passed
96 ``paster``. The entry point for the WSGI application is configured in 99 to it. The entry point for the WSGI application is configured
97 ``setup.py`` as ``kallithea.config.middleware:make_app``. 100 in ``setup.py`` as ``kallithea.config.middleware:make_app``.
98 101
99 - `Apache httpd`_ can serve WSGI applications directly using mod_wsgi_ and a 102 - `Apache httpd`_ can serve WSGI applications directly using mod_wsgi_ and a
100 simple Python file with the necessary configuration. This is a good option if 103 simple Python file with the necessary configuration. This is a good option if
101 Apache is an option. 104 Apache is an option.
102 105
106 - uWSGI_ is also a full web server with built-in WSGI module.
107
103 - IIS_ can also server WSGI applications directly using isapi-wsgi_. 108 - IIS_ can also server WSGI applications directly using isapi-wsgi_.
104 109
105 - UWSGI_ is also an option. 110 - A `reverse HTTP proxy <https://en.wikipedia.org/wiki/Reverse_proxy>`_
111 can be put in front of another web server which has WSGI support.
112 Such a layered setup can be complex but might in some cases be the right
113 option, for example to standardize on one internet-facing web server, to add
114 encryption or special authentication or for other security reasons, to
115 provide caching of static files, or to provide load balancing or fail-over.
116 Nginx_, Varnish_ and HAProxy_ are often used for this purpose, often in front
117 of a ``paster`` server that somehow is wrapped as a service.
106 118
107 The best option depends on what you are familiar with and the requirements for 119 The best option depends on what you are familiar with and the requirements for
108 performance and stability. Also, keep in mind that Kallithea mainly is serving 120 performance and stability. Also, keep in mind that Kallithea mainly is serving
109 custom data generated from relatively slow Python process. Kallithea is also 121 dynamically generated pages from a relatively slow Python process. Kallithea is
110 often used inside organizations with a limited amount of users and thus no 122 also often used inside organizations with a limited amount of users and thus no
111 continuous hammering from the internet. 123 continuous hammering from the internet.
112 124
113 125
114 .. _Python: http://www.python.org/ 126 .. _Python: http://www.python.org/
115 .. _Gunicorn: http://gunicorn.org/ 127 .. _Gunicorn: http://gunicorn.org/
118 .. _Paste: http://pythonpaste.org/ 130 .. _Paste: http://pythonpaste.org/
119 .. _PyPI: https://pypi.python.org/pypi 131 .. _PyPI: https://pypi.python.org/pypi
120 .. _Apache httpd: http://httpd.apache.org/ 132 .. _Apache httpd: http://httpd.apache.org/
121 .. _mod_wsgi: https://code.google.com/p/modwsgi/ 133 .. _mod_wsgi: https://code.google.com/p/modwsgi/
122 .. _isapi-wsgi: https://github.com/hexdump42/isapi-wsgi 134 .. _isapi-wsgi: https://github.com/hexdump42/isapi-wsgi
123 .. _UWSGI: https://uwsgi-docs.readthedocs.org/en/latest/ 135 .. _uWSGI: https://uwsgi-docs.readthedocs.org/en/latest/
124 .. _nginx: http://nginx.org/en/ 136 .. _nginx: http://nginx.org/en/
125 .. _iis: http://en.wikipedia.org/wiki/Internet_Information_Services 137 .. _iis: http://en.wikipedia.org/wiki/Internet_Information_Services
126 .. _pip: http://en.wikipedia.org/wiki/Pip_%28package_manager%29 138 .. _pip: http://en.wikipedia.org/wiki/Pip_%28package_manager%29
127 .. _WSGI: http://en.wikipedia.org/wiki/Web_Server_Gateway_Interface 139 .. _WSGI: http://en.wikipedia.org/wiki/Web_Server_Gateway_Interface
128 .. _pylons: http://www.pylonsproject.org/ 140 .. _pylons: http://www.pylonsproject.org/
141 .. _HAProxy: http://www.haproxy.org/
142 .. _Varnish: https://www.varnish-cache.org/